크리스마스인가요?


33

도전

크리스마스는 다음과 같습니다.

  • 12 월
  • 12 개월
  • 25 일

매년 오늘 날짜와 오늘이 크리스마스인지 여부를 결정하십시오. 크리스마스 인 경우을 인쇄해야합니다 "It's Christmas". 크리스마스가 아닌 경우 어떻게 든 크리스마스까지 기다렸다가 인쇄해야합니다 "It's Christmas".

에서 이 스택 오버플로 질문

import time
while time.strftime("%b, %d", time.localtime()) != "Dec, 25":
    time.sleep(60)
print "It's Christmas"

115 자 파이썬

규칙

규칙은 다음과 같습니다.

  • 컴퓨터의 시계가 항상 옳다고 가정하십시오.
  • 언제든지 코드를 시작할 수 있어야합니다.
  • 당신의 코드는 "It's Christmas"크리스마스에 인쇄해야합니다 .
  • 루핑은 반드시 필요한 것은 아니지만 일단 시작하면 코드가 인쇄 될 때까지 멈추지 않아야합니다.
  • 가장 짧은 코드가 승리합니다.

이 글을 읽기 전에 입력이 Julian 날짜라고 생각했습니다
Ming-Tang

답변:


18

Perl + Unix, 40 자

1until`date`=~/c 25/;say"It's Christmas"

이것은 Perldate 대신 외부 명령 을 사용하여 몇 개의 문자를 저장한다는 점을 제외하고는 JB의 Perl 솔루션 과 동일합니다 localtime.


143

배쉬, 39

기다릴 수없는 사람들을 위해 :

sudo date 12250000
echo It\'s Christmas

이것은 모든 규칙, 특히 첫 번째 규칙을 따릅니다.


11
영리한. 내가 의미하는 것이 아니라 영리한 사람.
Patrick Perini

8
"... 그리고 컴퓨터의 시계가 항상 정확하지 않다면 그것을 만드십시오."좋은 쇼!
JB

13
루트 인 경우 5자를 저장할 수 있습니다. : D
Wug

29

유닉스, 39 바이트

echo{,} "It\'s christmas"|at -t12252359

Dennis의 도움으로 감사합니다.


위반»루핑이 반드시 필요한 것은 아니지만 일단 시작하면 코드가 인쇄 될 때까지 멈추지 않아야합니다.«,.
Joey

나는 당신의 비판을 이해하지 못한다. 이것이 반복된다고 주장합니까? 인쇄하기 전에 멈추는가?
사용자가 알 수 없음

2
를 사용 echo{,} "It\'s Christmas"|at -t12252359하면 허용되는 답변보다 짧습니다. (백 슬래시는 필수입니다.)
Dennis

1
@Dennis : 괄호 확장의 멋진 사용.
Joey Adams

18

PowerShell, 45 46

for(;(date).date-ne'12/25'){}"It's Christmas"

확실히 전력 효율적이지 않기 때문에 랩탑 배터리는 크리스마스 전에 죽을 수도 있습니다 (새로운 배터리를 원할 수도 있습니다). 그러나 자지 않는 것은 확실히 짧습니다 .

또한 로케일에 구애받지 않습니다. Jaykul 덕분에이를 더욱 줄일 수있었습니다.

규칙을 약간 남용, 45 자

for(){"It's Christmas"*((date)-like'12/25*')}

이것은 크리스마스가 될 때까지 빈 줄을 인쇄하고, 그 위에“It 's Christmas”를 인쇄합니다.

그것은 ...

  • ... 언제든지 시작할 수 있습니다.
  • ... 크리스마스에“It 's Christmas”를 인쇄합니다. 여러번. 하루 종일. (규칙은 얼마나 자주 인쇄 될 수 있는지에 대해서는 아무 말도하지 않았습니다.)
  • ... 비 크리스마스에는 "It 's Christmas"를 인쇄 하지 않습니다 (이 경우 빈 줄을 인쇄하지만 다른 문자를 희생하여 수정할 수는 있지만 위의 더 깔끔한 해결책으로는 아무런 효과가 없습니다).
  • ... 결코 멈추지 않습니다 (“크리스마스입니다”라고 인쇄 한 후에도 확실 하지 않습니다).

2
for (; (date) .date-ne "12/25") {} "크리스마스입니다"# 45 자
Jaykul

Jaykul : 고마워 ... 그건 내가 생각하지 못했을 것입니다.
Joey

"부식적인"스크립트는 또한 -match문자를 얻거나 잃지 않기 위해 와일드 카드없이 사용할 수 있습니다 .
Iszi

이제 남용을 제거 할 수 있습니다. 불필요합니다.
Outgolfer Erik

@EriktheGolfer : 어떻게 요? 비록 짧지는 않지만 여전히 흥미로운 대안 접근 방식을 제공합니다.
Joey

13

파이썬 (36 자)

규칙을 남용하는 정신으로 :

  • 크리스마스에 "It 's Christmas"를 확실히 인쇄

  • 크리스마스가 아니면 "크리스마스입니다"를 인쇄하여 시간을 보내십시오

    while True:
        print "It's Christmas"
    

2
29 바이트 : while 1:print"It's Christmas".
Outgolfer Erik

11

포스트 스크립트, 90

(%Calendar%)currentdevparams begin{Month 12 eq Day 25 eq and{exit}if}loop(It's Christmas)=

프린터에서 실행하지 말고, 페이지를 인쇄하지 않으며, 크리스마스 날까지만 프린터를 DoS합니다. 그런 다음 다시 프린터를 다시 가져 오는 것이 좋습니다.


4
프린터에 다음과 같은 표시를하는 것을 잊지 마십시오. 크리스마스까지 죽지 마십시오!
Joey Adams

대부분의 프린터에는 옵션 기능이므로 작동하는 하드웨어 시계가 없을 것입니다. 아주 훌륭하지만 :)
Joey


5

펄, 44 45

perl -E'1until localtime=~/c 25/;say"It's Christmas"'

GMT 시간이 충분하지 않습니까? (3 글자 ;-)


1until localtime=~/c 25/;하나의 문자를 저장합니다. :)
Ilmari Karonen

나는 이미 그것을 시도했지만 실패했다고 생각했지만 실제로는 잊어 버렸습니다 -E. 감사!
JB

문제 없어. (Ps. 방금 localtime아래 대신 백틱을 사용하여 솔루션 버전을 게시했습니다 . 원하는 경우 훔칠 수는 있지만 추가 종속성이 별도의 답변을 정당화했다고 생각합니다.)
Ilmari Karonen

Naaaw, 부끄러운 줄 다시 생각하지 않아서 . 별도의 답변은 완벽하게 정당화 된 IMO (및 공표)입니다.
JB

5

펄, 45

{localtime=~/c 25/&&die"It's Christmas";redo}

펄, 44

삼항 연산자 사용 (Ilmari Karonen에게 감사).

{localtime=~/c 25/?say"It's Christmas":redo}

? :대신 && ;하나의 문자도 저장합니다. (그리고 더 예쁘게 출력 하는 say대신에 사용 합니다 die.)
Ilmari Karonen

@ 일 마리 카로 넨 : 감사합니다. 그러나 say다이 대신 사용 하면 스크립트가 끝나지 않습니다.
Toto

삼항 연산자를 사용하면됩니다.
Ilmari Karonen

@Ilmari Karonen : 물론입니다. 내가 너무 피곤할 수 있습니다!
Toto

5

자바 스크립트, 51 자

CPU 킬러입니다.

while(!/c 25/.test(Date()));alert("It's Christmas")

4

문자열을 구문 분석하지 않고이 작업을 수행하고 싶었습니다. 결과적으로 내 코드에는 많은 마법의 숫자가 있습니다.

윤년을 설명하기 위해 근사치를했습니다. 아무도 12 월 25 일 00:00:00에 바로 인쇄해야한다고 말하지 않았습니다!

Perl, 80 69 57 자

{(time-30931200)%31557600<86399?die"It's Christmas":redo}

더 간결한 반복을 위해 편집되었습니다!


4

R (47)

while(!grepl("c 25",date())){};"It's Christmas"

3

파이썬, 66 68

import time
while'c 25'not in time.ctime():1
print"It's Christmas"

그것은 1두 번째 줄의 끝에서 나에게 매우 의심스러운. :피
cjfaure

@Trimsty : 1while 루프를위한 바디를 제공합니다. 기본적으로 12 월 25 일까지는 바쁘다 while 1:if'c 25'in time.asctime():break.
Steven Rumbalski

아, 알았어요
cjfaure

할 것 같아요 time.ctime().
gnibbler

@gnibbler : 그렇습니다. 잘 잡았다.
Steven Rumbalski

3

TI-BASIC, 42 38

Repeat 769=sum(getDate²,2
End
"It's Christmas

날짜 형식은 YYYY / MM / DD 여야합니다.

getDate는 3 요소 목록을 작성합니다. {year,month,day} . 크리스마스에만 월 ^ 2 + 일 ^ 2는 769입니다.

소문자는 가상 단위 토큰으로 표시되는 i를 제외하고 각각 2 바이트이므로 23 바이트가 문자열에 사용됩니다.


2

배치 파일, 68 자

:l
@date/t|findstr/c:"-12-25">nul&&echo It's Christmas&&exit
@goto l

세션을 죽이기 때문에 대화식으로 사용할 수 없습니다. 이를 해결하려면 5 자 이상이 필요합니다.

로케일에 따라 다릅니다. 이것은 ISO 8601 날짜 형식을 사용하는 로케일에서 작동합니다.

그러나 이것은 배치 파일입니다 (프로그래밍 언어로 간주되지 않음). 그리고 자바 스크립트보다 짧습니다 (파이썬과 동등합니다).


2

그루비, 55

while(!new Date()==~/.*c 25.*/);
println"It's Christmas"

작동한다고 생각하지만 여전히 출력을 기다리고 있습니다.


Groovy의 정규 표현식이 다른 대부분의 언어와 같은 것이면 .*전적으로 불필요합니다. (Ps. 25 대신 12 월 5 일을 기다리면 테스트 할 수 있습니다.)
Ilmari Karonen

1
Ilmari, Groovy는 JVM 언어이며 Java의 정규식은 기본적으로 고정되어 있습니다.
Joey

1
Ilmari, 확인했지만 프로그램이 아직 실행 중입니다.
Armand

2

(pdf) eTeX-12 월 1-25 일에만 180 자.

\lccode`m`~\let\e\expandafter\def~{\ifdim900pt<\pdfelapsedtime
sp\pdfresettimer\else\e~\fi}\lowercase\e{\e\scantokens\e
{\romannumeral\numexpr (25 - \day)*96000}}It's Christmas!\bye

TeX는 프로그램이 시작될 때 날짜에 액세스 할 수있는 방법 만 있으며 시작 이후 경과 한 시간은 32768 초로 제한되어 있으므로 대기 할 시간 (초)을 계산해야하며 매초마다 대기하는 루프를 수행해야합니다. 도달하는 경과 시간 1s 하고 재설정합니다. (정확하게, 나는 900 초의 블록을하고 있습니다.)

한 달 동안 일하려면 더 많은 일이 필요합니다 : 355 자.

\lccode`m=`~\let\o\or\let\y\year\let\n\numexpr\let\e\expandafter
\def\b#1{\ifnum#1=\n(#1/4)*4\relax+1\fi}\def~{\ifdim
900pt<\pdfelapsedtime sp\pdfresettimer\else\e~\fi}\lowercase
\e{\e\scantokens\e{\romannumeral\n(25-\day+\ifcase\month\o334\b\y
\o303\b\y\o275\o244\o214\o183\o153\o122\o91\o61\o30\o0\ifnum25<\day
365\b{\n\y+1}\fi\fi)*96000}}It's Christmas!\bye

2

MySQL, 180 자

어쨌든 데이터베이스 엔진을 무엇을 사용하고 있습니까?

DELIMITER $$
CREATE FUNCTION c() RETURNS CHAR(14) BEGIN a: LOOP IF DAY(NOW())=25 && MONTH(NOW())=12 THEN RETURN 'It\'s Christmas'; END IF; END LOOP a; END$$
DELIMITER ;
SELECT c();

세로로 치열한 경쟁은 아니지만 할 수 있습니다!


시도 DELIMITER /, RETURNS TEXTCURDATE()LIKE'%12-25'; 공백을 제거하십시오.
Titus


2

PHP, 40 바이트

<?while(date(dm)-1225);?>It´s Christmas;

12 월 25 일까지 루프; 그런 다음 일반 모드를 종료하고 인쇄하십시오.

기본 설정으로 실행합니다 (알림을 표시하지 않음).


2

8086 머신 코드, 33 바이트

00000000  b4 2a cd 21 81 fa 19 0c  75 f6 b4 09 ba 12 01 cd  |.*.!....u.......|
00000010  21 c3 49 74 27 73 20 43  68 72 69 73 74 6d 61 73  |!.It's Christmas|
00000020  24                                                |$|
00000021

1

자바 스크립트, 93 89 78 77 자

function x(){Date().match("c 25")?alert("It's Christmas"):setTimeout(x,1)}x()


@Joey 감사합니다! 나는 그것을 잊었다.
JiminP

2
또 다른 비 차단 버전 : setInterval('/c 25/.test(Date())&&alert("It\'s Christmas")',9)61 문자 ... 유일한 단점은 alert()크리스마스 하루 종일 것 입니다.
David Murdoch

setInterval1입니까? setInveral1000*60*60*24그리고 두 프로세스가 고통과 크리스마스에 한 번만 알립니다하지 않습니다.
George Mauer

1

D, 130

import std.datetime,std.stdio;
main(){
do{
auto t = Clock.currTime();
}while(t.month!=12||t.day!=25);
writeln("It's Christmas");
}

과제에 두 문자를 저장할 수 있습니다. 그리고 줄 수를 줄임으로써 몇 가지 더.
Joey

나는 또한 t.month^12|t.day^25(내 우선 순위를 올바르게 얻는다면) 를 사용하여 일부를 구할 수있다
ratchet freak

1

Q, 63 자

system"t 1000";.z.ts:{$["12.25"~-5#-3!.z.d;1"It's Christmas";]}

매년 크리스마스에 일할 것입니다


1

SQL * Plus + PL / SQL-100

EXEC LOOP EXIT WHEN TO_CHAR(SYSDATE,'DDMM')='2512';END LOOP;DBMS_OUTPUT.put_line('It''s Christmas');
  • 가정 SERVEROUTPUT ON
  • MySql 솔루션보다 짧습니다 (MySql!).
  • 작년에는 너무 늦었지만 올해는 시간이 지났습니다
  • DBMS_OUTPUT.put대신 시도 DBMS_OUTPUT.put_line했지만 아무것도 인쇄되지 않습니다.

1

C # (126)

using System;class P{static void Main(){while(DateTime.Now.Date.ToString("Md")!="1225");Console.WriteLine("It's Christmas");}}

배터리가 더 좋습니다 :

C # (163)

using s=System;class P{static void Main(){s.Threading.Thread.Sleep(s.DateTime.ParseExact("1225","Md",null)-s.DateTime.Now);s.Console.WriteLine("It's Christmas");}}

편집하다

두 번째 버전 ( "배터리 성능 향상")에는 약간의 문제가 있습니다. 26 일 ~ 12 월 방금 생각한 31 번째 : P

두 버전 모두 약간 더 단축 될 수 있습니다.


1

Japt , 27 바이트 (비경쟁)

Ks f"c 25" ?`It's CËItµs`:P

오늘 날짜를 기준으로 테스트하려면 c 25이 달의 마지막 문자 (약식) + 공백 + 월로 대체하십시오 . Feb 02==b 02

온라인으로 사용해보십시오! Japt가이 과제보다 훨씬 새롭기 때문에 비경쟁입니다.


1

VBA, 58 바이트

익명의 VBE 즉시 창 기능은 입력하지 않고 크리스마스 날까지 It's ChristmasVBE 즉시 창으로 출력되는 시간까지 실행됩니다 .

While Left(Now,5)<>"12/25":DoEvents:Wend:?"It's Christmas"

0

bash-n- 날짜 : 69 문자 :

sleep $(($(date -d"12/25" +%s)-$(date +%s))) && echo "It's X-Ray    "

그러나 12 월 26 일부터 12 월 31 일까지는 실패합니다.


0

Q (60)

 system"t 1000";.z.ts:{if[.z.d~2012.12.25;1"It’s Christmas"]}

> 성탄절이 아닌 경우 어떻게 든 성탄절까지 기다렸다가 "크리스마스입니다"를 인쇄해야합니다.
skeevey

크리스마스가되면 초마다 확인하도록 사과드립니다. 12 월 25 일에 86,400 번 "크리스마스입니다"라고 인쇄됩니다. 분명히 밀리 초 단위의 타이머를 늘려서이를 변경할 수 있습니다.
sinedcm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.