크리스마스 이브 형식으로 날짜를 인코딩


51

이 포스트가 출판 된 날은 크리스마스 이브였습니다. 내일은 크리스마스 일 것이다. 어제는 크리스마스 이브 이브였습니다. 이틀 후에는

Christmas Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve Eve

.

당신의 임무는 프로그램이 실행되는 날짜를 잡아 크리스마스 이브 형식으로 인코딩하는 것입니다.

  • 프로그램이 크리스마스에서 실행되면 문자열 "Christmas"를 출력해야합니다.
  • 프로그램이 크리스마스에서 실행되지 않으면 "Christmas"문자열과 그 다음에 "Eve"문자열을 반복해서 출력해야합니다. n여기서 n크리스마스까지의 일 수입니다.
    • 이것은 다음 크리스마스를 기반으로해야합니다 . 예를 들어, 날짜가 2019 년 4 월 26 일인 경우 다른 크리스마스가 아니라 2019 년 12 월 25 일을 기준으로 계산을 수행해야합니다.
    • 윤일을 세는 것을 잊지 마십시오.
  • 크리스마스는 매년 12 월 25 일입니다.

이것은 이므로 가장 짧은 코드가 승리합니다! 목표는 어떤 언어로든 가장 짧은 프로그램을 찾는 것이 아니라 모든 특정 언어로 가장 짧은 프로그램을 찾는 것입니다. 예를 들어, 가장 짧은 C ++ 프로그램을 찾으면 누군가 파이썬에서 더 짧은 프로그램을 찾더라도 C ++ 대회에서 이깁니다.


7
어쨌든 나는 이것이 만화를 본 순간 PPCG 도전이 될 것이라는 것을 알았습니다.-나에게서 +1
Black Owl Kai


7
@BlackOwlKai LMBO 난 당신의 의견까지 그 만화를 보지 못했습니다. 나는 이미 이것을 게시 할 계획이었고 크리스마스 이브를 기다리고있었습니다. 좋은 생각은 비슷하게 생각합니다.
PyRulez

1
날짜가 매개 변수가 될 수 있습니까?
Olivier Grégoire

1
@ OlivierGrégoire 흠, 나는 언어가 다른 방식으로 현재 날짜를 얻을 수있는 능력이 없다면 그것을 허용 할 것입니다.
PyRulez

답변:


52

SmileBASIC, 73 71 67 바이트

?"Christmas";
@L?" Eve"*(D!=P);
P=D
DTREAD OUT,M,D
IF M/D-.48GOTO@L

이 프로그램은 "크리스마스"를 인쇄 한 다음 하루가 지나면 12 월 25 일까지 "이브"를 인쇄합니다. (12/25 = 0.48)
실행하는 데 최대 1 년이 걸릴 수 있습니다.


7
순수한 천재 ...
FlipTack

7
이것은 나를 미소
Neil

3
좋은! 내 JavaScript 솔루션 중 하나가 비슷한 접근 방식을 취합니다. 그러나 JavaScript에서 대기 시간은 최선의 노력입니다. 이와 관련하여 SmileBASIC은 어떻게 진행됩니까?
targumon

4
윤초로 인해 분명히 실패 할 @ 12Me21,이 버전은 훨씬 좋아 보입니다.
Rɪᴋᴇʀ

5
상자 밖에서 생각하고 나를 웃게 만드는 +1
Tom

24

Excel 수식, 59 바이트

="Christmas"&REPT(" Eve",DATE(YEAR(NOW()+6),12,25)-TODAY())

4
나는 YEAR(TODAY()+6)항상 올바른 연도를 반환하여 조건을 피 한다고 생각 합니다.
Neil

3
나는 YEAR(NOW()+6)2 바이트 이하로도 잘 작동 한다고 생각 합니다.
엔지니어 토스트

2
= "Christmas"& REPT ( "Eve", DATE (YEAR (NOW () + 6), 12,26) -NOW ())가 더 짧아서 작동해야한다고 생각합니다.
JeroendeK

1
NOW()시간을 포함하므로 정수가 아니므로 REPT허용 할 수 없습니다 .
12Me21

2
그러나 이것은 크리스마스에 "크리스마스"를주지 않습니다. Check="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
Anthony

12

펄 6 , 61 47 바이트

'크리스마스'라고 말하세요 ~ 'Eve'x (Date.today ... ^ {. month == 12 &&. day == 25})

say 'Christmas'~' Eve'x(Date.today...^/12\-25/)

온라인으로 사용해보십시오!

Jo King 덕분에 -14 바이트 (!)

Date.today ...^ /12\-25/오늘부터 크리스마스 전날까지의 날짜 순서입니다. 정규식 /12\-25/은 날짜의 문자열 표현과 일치합니다. 문자열 " Eve"은 해당 시퀀스의 길이와 동일한 횟수만큼 복제되고 문자열 뒤에 출력 "Christmas"됩니다.


바이트를 저장하기 위해 "month> 11"을 수행 할 수 있습니까?
chrixbittinx

2
시겠습니까 /12.25/일?
Kritixi Lithos

2
@Cowsquack no, 왜냐하면 그것은 다음과 같은 날짜의 연도에 일치 할 수 있기 때문입니다12025-12-24
Jo King

나는 결코 일어나지 않을 것이라고 가정하는 것이 안전하다고 생각합니다
12Me21

8

R , 112106 72 바이트

@digEmAll 및 @ J.Doe를 통해

x=Sys.Date()-1;cat('Christmas');while(!grepl('12-25',x<-x+1))cat(' Eve')

온라인으로 사용해보십시오!

내 원래의 대답은 코드가 코드가 입력 된 날짜를 가져야한다는 것을 분명히하기 전에였습니다. 많은 바이트를 절약하기 위해 위와 같이 수정할 수 있지만 귀찮게하지는 않습니다.

function(x,z=as.Date(paste0(strtoi(format(x,"%Y"))+0:1,"-12-25"))-x)cat("Christmas",rep("Eve",z[z>=0][1]))

온라인으로 사용해보십시오!

설명 : 모두 교회에 있으므로 시간을 내야합니다. 연도를 추출하고 정수로 강제 변환하십시오. 해당 연도의 크리스마스와 다음 연도의 크리스마스로 구성된 벡터를 만들고 입력 날짜를 빼서 입력 날짜와 해당 두 크리스마스 사이에 두 가지 차이가있는 벡터를 얻습니다.

음수가 아닌 것을 선택하고 cat"Eves"가 많은 "Christmas"를 선택하십시오 .


y한 번만 사용 하므로 108 바이트에 직접 사용할 수 있습니다.
주세페

또한 것 z[z>=0][1]대신에 일을 min?
주세페

73 바이트 . 마지막 주석에 따르면, 프로그램은 실행 날짜를 기준으로 텍스트를 출력해야합니다. 메리 크리스마스 BTW! : D
digEmAll

1
@digEmAll 을 72 바이트 로 조정했습니다. 메리 크리스마스!
J.Doe

8

Windows PowerShell , 67 64 63 바이트

for(;1225-'{0:Md}'-f(date|% *ys $i)){$i++}'Christmas'+' eve'*$i

온라인으로 사용해보십시오!

면도하는 관리 3 바이트 4 바이트 (감사 소 돌팔이 이용하여) -f대신 ORMAT 연산자 .ToString()다음 수치 1225에서 날짜 열을 감산 대신과의 비교를 수행 -ne. 결과 정수는 0(크리스마스에 발생할) 조건부 ( False루프에 들어 가지 않음 )로 해석되고 다른 값은 (루프 입력 )으로 해석되는 조건부 부울로 해석됩니다 True.

정수가 왼쪽에 있기 때문에 비교를 위해 정수가 문자열로 변환 된 이전 버전과 달리 날짜 문자열이 정수로 변환되고 수학이 수행됩니다 1225.

원본 버전


Windows PowerShell , 67 바이트

for(;(date|% *ys $i|% tost* Md)-ne1225){$i++};'Christmas'+' eve'*$i

온라인으로 사용해보십시오!

for루프 while가 짧기 때문에 기본적으로 루프로 루프를 사용합니다 . 루프 조건 에서 와일드 카드 이름으로 메소드를 호출 할 수있는 양식을 사용하여 현재 날짜 ( date축약 된 양식 Get-Date)를 ForEach-Object별명으로 파이프 %하여 확인합니다. 이 경우, 상기 방법은 AddDays()DateTime개체 및 값 우리는 그것이 제공 $i.

이것은 형식 문자열 (다음에 오는 것을 신경 쓰지 않기 때문에 월, 일, 최소 자릿수)을 사용 ForEach-Object하여 ToString()메소드 를 다시 호출하도록 파이프됩니다 Md. 그런 다음이 문자열은 -ne숫자 1225와 같지 않은지 테스트 하여 비교를 위해 문자열로 변환하여 따옴표를 저장합니다.

그렇기 때문에 월과 일이 한 자릿수인지는 중요하지 않습니다. 연도의 다른 날이 없기 때문에 모호하지 않습니다 1225.

문자열 이가 될 때까지 루프가 계속 됩니다1225 . 프로그램 시작시 $i0이되어 오늘 날짜를 비교하고 루프는 절대 실행되지 않지만 다른 날 $i은 루프 본문에서 증가하므로 최대 며칠까지 다음 크리스마스, 윤년과 크리스마스가 올해를 통과했는지 여부를 자동으로 계산합니다.

루프 후 우리 Christmas는 문자열 eve에 값을 곱한 결과와 연결된 문자열을 출력합니다 $i(크리스마스 날 0에는 eves 없음 ).


분명히 ;{$i++}는 중복입니까? (또한 당신이 강타를 다시 주도했다 와우)
Kritixi Lithos

@Cowsquack 좋은! 어떻게 알지 못했습니까?!
briantist

7

C # (Visual C # 대화식 컴파일러) , 89 바이트

Write("Christmas");for(var t=DateTime.Now;$"{t:Md}"!="1225";t=t.AddDays(1))Write(" Eve");

온라인으로 사용해보십시오!

@JeppeStigNielsen 덕분에 -3 바이트!

내 전략은 매우 간단합니다.

  1. 루프 변수 t를 현재 날짜로 초기화
  2. 크리스마스가 아닌 Eve경우 인쇄t
  3. 하루에 추가 t하고 반복

나는 더 멋진 것을 시도했지만이 방법에는 가장 적은 바이트가 필요했습니다.


... 증 분기에서 t를 자신에게 할당해야합니까? 내 앞에 문서가 없지만 그렇지 않은 경우 2 바이트를 더 절약 할 수 있습니다.
Stackstuck

1
오, 그것은 구조체입니다. 당연하지. 신경 쓰지 마.
Stackstuck

1
t.Month<12|t.Day!=25더 짧은 것으로 대체 할 수 있습니다 $"{t:Md}"!="1225". 보간 된 문자열과 사용자 정의 DateTime 형식화 문자열을 사용합니다.
Jeppe Stig Nielsen

6

T-SQL, 92 88 바이트

PRINT'Christmas'+REPLICATE(' Eve',DATEDIFF(D,GETDATE(),STR(YEAR(GETDATE()+6))+'-12-25'))

편집 : @BradC 덕분에 4 바이트가 절약되었습니다.


잘 했어. PRINT'Christmas'+...DATEDIFF(D,DATEDIFF(DAY,
BradC

@BradC Nice 감사합니다!

5

APL (Dyalog Unicode) , 76 63 바이트 SBCS

전체 프로그램. ⎕IO←0제로 인덱싱으로 가정 합니다.

⎕CY'dfns'
'Christmas',' Eve'⍴⍨4×12 25⍳⍨⍉2↑1↓⍉date(⍳366)+days⎕TS

온라인으로 사용해보십시오!

⎕CY'dfns'dfns 라이브러리의 c o p y

⎕TS 현재 t IME S 같이 년, 월, 일,시, 분, 초, 밀리 초] 탐포
days[C]  일수를 찾기 [N] 00 1899년 12월 31일 보낸 사람 : 00 : 00.000은
(⍳366) 제 366의 정수를 추가 (0 … 365)에서
date[c] 해당 숫자 (366 × 7 테이블; 단위당 하나의 열)에 해당하는  날짜 [n] 를 찾으십시오
 (7 × 366 테이블; 단위당
1↓ 하나의 행)
2↑ . 처음 두 행 (월 및 일)
12 25⍳⍨ 은 첫 번째 크리스마스의 인덱스
 에 4를 곱하여
' Eve'⍴⍨ 문자 목록을 재구성
'Christmas ', 하는 데 사용합니다.

[c]  해당 기능의 코드
[n]  해당 기능에 대한 참고 사항


5

파이썬 2 , 111,103 바이트

from datetime import*
d=date.today()
print"Christmas"+" Eve"*(date((d+timedelta(6)).year,12,25)-d).days

온라인으로 사용해보십시오!

Richard Crossley의 답변에서 영감을 얻은 업데이트 .

설명:

from datetime import*
# get today as a date, so we don't have to worry about rounding errors due to time
d=date.today()
                              # get the year of the Christmas to compare to
                              # if the current date is after this year's Christmas, the 6 day offset will give the next year
                              # otherwise, returns this year
                              (d+timedelta(6)).year
                         # next Christmas minus the current date
                         date(.....................,12,25)-d
# Christmas, plus (number of days until next Christmas) " Eve"s
print"Christmas"+" Eve"*(...................................).days



4

자바 스크립트, 135 (131) 121 92 88 바이트

내 첫 번째 (순진한) 솔루션 ( 135b ) :

t=new Date();n=new Date();n.setMonth(11);n.setDate(25);'Christmas'+' Eve'.repeat((n>=t?n-t:(n.setFullYear(n.getFullYear()+1)-t))/864e5)

현재와 ​​올해의 2 가지 날짜를 설정합니다. 후자가 아직 통과하지 않았다면, 그것들을 확산시키고, 통과하면 내년의 Xmas로 확산됩니다. 반복 횟수에 diff를 사용합니다.

상자 밖에서 생각하기 ( 131b ) :

i=0;f=_=>{t=new Date();if(t.getMonth()!=11||t.getDate()!=25){i++;setTimeout(f,864e5)}else{alert('Christmas'+' Eve'.repeat(i))}};f()

challange는 주어진 날에 프로그램을 실행할 때 WHICH 출력이 필요하지만 WHEN을 지정하여 반환하지는 않습니다.

이것은 하루 동안 '수면'하고 카운터를 1 씩 증가시킨 다음 Xmas가 될 때까지 반복하여 출력을 제공합니다.

JavaScript는 '수면'시간을 보장하지 않으므로 실제 결과가 꺼져있을 수 있습니다.

또한 alert함수 를 사용 하기에는 추악 합니다. 이는 실제로 순수한 JavaScript를 다루지 않고 브라우저 API도 처리한다는 의미 console.log입니다 (6 바이트 추가 비용으로 사용할 수 있음 ).

더 나은 접근 방식 ( 121b ) :

t=new Date();i=0;while(t.getMonth()!=11||t.getDate()!=25){t=new Date(t.valueOf()+864e5);i++};'Christmas'+' Eve'.repeat(i)

오늘부터 Xmas가 될 때까지 날짜를 하루 씩 늘리고 필요한 반복 횟수에 해당 루프의 카운터를 사용하십시오.

개선 (미니 파이어 통과 및 추가 5b를 면도하기 위해 12Me21의 트릭 사용 포함) ( 92b ) :

for(s='Christmas',t=new Date;t.getMonth()/t.getDate()-.44;)t=new Date(t*1+864e5),s+=' Eve';s

마지막 손길 ( 88b ) :

for(s='Christmas',t=new Date;t.getMonth()/(d=t.getDate())-.44;t.setDate(d+1))s+=' Eve';s
  • 위의 모든 경우 REPL이 가정됩니다.
  • Vadim의 제출을 ​​참조하십시오-내 것보다 훨씬 좋습니다!

1
나는 당신이 사용할 수 있다고 생각 t.getMonth()/t.getDate-.48날짜가 12 월 25 일이 아닌 경우 확인
12Me21

1
사이트에 오신 것을 환영합니다! 4 칸 들여 쓰기를 사용하여 코드 블록을 더 잘 보이게 만들 수 있습니다.
밀 마법사

1
PPCG에 오신 것을 환영합니다!
Shaggy

1
98 , print이 프로그램은 기능이 아니므로 필요 하지 않는 한 당신은 당신이 REPL 사용하고 있는지 명시 람다 또는 2로 돌려 1.
ASCII 전용

1
t=new Date(+t+864e5)1 바이트 더 짧습니다.
Andrew Svietlichnyy

3

VBA (Excel), 108 바이트

빈 모듈로 복사하십시오. 직접 실행 창에 인쇄합니다.

Sub X:s="Christmas":d=Now:For t=1 To (DateSerial(Year(d+6),12,25)-d):s=s &" Eve":Next:Debug.Print s:End Sub

참고 :: 줄 바꿈 대신 사용하면 줄당 2 바이트가 절약됩니다.

VBA 편집기는 Sub 정의 후에 키워드, 연산자 등과 괄호 사이에 추가 공백을 삽입하지만이 코드를 복사하여 붙여 넣으면 작동합니다 (이 전에 공백을 제거 할 수 없었습니다 &).

VBA (한 번)에는 나쁘지 않습니다.


1
* Christmas: |
ASCII 전용

&
@ASCII

-1 바이트 오타를 잡은
@ASCII

1
이를 즉시 창 함수로 변환하고에 대한 임시 변수를 제거하여 71자를 문자로 줄일 수 있습니다 now. 그렇게하면 다음과 같이 보일 것입니다.?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
Taylor Scott

3

배쉬 + GNU 날짜, 72 73 바이트

for((d=0;1`date +%d%m -d$d\day`-12512;d++));{ x+=\ Eve;};echo Christmas$x
  • 1 바이트 대체 저장 !=-
  • 여분의 공간을 제거하는 또 다른 공간
  • 날짜 +1 d=0이므로 date -dday25/12에서 작동하지 않으므로 -3 바이트 수정

온라인으로 사용해보십시오


흠, 왜 =~for-loop 조건부에서 작동 하지 않습니까?
Kritixi Lithos

for 루프 조건이 산술 연산
식이므로


3

배쉬 , 68 65 61 바이트

Nahuel Fouilleul 덕분에`` 명령 대체 를 사용 하고 evalsed exargs

echo Christmas `eval date\ -d{0..366}day\;|sed /c.25/Q\;cEve`

온라인으로 사용해보십시오!

내부 `` 명령 치환 , 우리가

eval 쉘 명령으로 다음 문자열을 실행하십시오.

  • date\ -d{0..366}day\;중괄호 확장{0..366} 에서이 결과는 문자열이 되고 ,이 문자열 date -d0day; date -d1day; date -d2day; ... date -d366day;의 각 명령은 현재로부터 0 일에서 366 일 사이의 날짜를 계산하여 형식의 출력을 생성 Wed Dec 26 18:22:33 UTC 2018하며 각각은 자체 행에 있습니다.

|sed 다음 sed 명령을 호출하십시오.

  • /c.25/Q정규식 /c.25/이 일치하면 Q인쇄하지 않습니다.

  • \;cEve 그렇지 않으면 줄을 다음으로 변경하십시오. Eve

필요한 모든 수는 Eve각각 자체 라인에서 생성됩니다. 이 출력은에서 캡처 되며 단어가 줄 바꿈으로 분할 되는 단어 분할의`` 영향을받습니다 . 각 단어는에 대한 인수로 제공됩니다 .echo

echo Christmas ...

각 인수 echo는 공백으로 구분되어 인쇄되어 원하는 결과를 얻습니다.


bash이 솔루션에 대한 구체적인 것은 없습니다 . 그것은 GNU가 필요 date, sed그리고 seq생각.
Kusalananda


@NahuelFouilleul 감사합니다. xargs를 피하기 위해 backtick 명령 대체를 사용하고
seval

2

C (gcc) 157 바이트

나는 포함을 피할 수있을 것이라고 생각 time.h했지만 세그먼트 오류가 발생했습니다.

#include <time.h>
*t,u;f(){time(&u);t=localtime(&u);t[5]+=t[4]>10&t[3]>25;t[4]=11;t[3]=25;u-=mktime(t);printf("Christmas");for(u/=86400;u++;printf(" Eve"));}

온라인으로 사용해보십시오!


IMO 당신은 #include <stdlib.h>여기서 아무 것도하지 않는 것처럼을 남겨 두어야한다
ASCII-only

*t;f(u)대신에 *t,u;f()그리고 #import<time.h>대신에 #include <time.h>그리고 5[t=localtime(&u)]대신에 제안t=localtime(&u);t[5]
ceilingcat


2

파이썬 3, 106 바이트

from datetime import*
d=date.today()
print("Christmas"+" Eve"*(date((d+timedelta(6)).year,12,25)-d).days)

2

스칼라 , 116 113 바이트

var d=new java.util.Date
print("Christmas")
while(!(""+d).contains("c 25")){print(" Eve");d.setDate(d.getDate+1)}

온라인으로 사용해보십시오!

c 25줄임말입니다 Dec 25.


1
나는 당신이 contains("c 25")대신 사용할 수 있다고 생각합니다matches(".*c 25.*")
12Me21

감사합니다. 3 바이트가 줄었습니다! 😁
Kjetil S.

와우, 잘 했어, toString 날짜가 좋았다
V. Courtois

2

자바 스크립트, 86 77 바이트

REPL을 사용하면

for(c='Christmas',d=new Date;!/c 25/.test(d);d=new Date(+d+864e5))c+=' Eve';c

-9 바이트 동안 ASCII 전용으로 사용



브라보! 넌 나보다 훨씬 잘 했어 여분의 바이트를 면도 할 수 있습니까? for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c 또는이 변형 : for(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s 둘 다 76 바이트입니다.
targumon

2

루아 , 137118 바이트.

118 바이트

t,d,month,day=os.time,os.date,1,-6year=d"%Y"+(d"%D">"12/25"and 2or 1)print("Christmas",d" Eve":rep(d("%j",t(_G)-t())))

137 바이트 (이전)

t,d=os.time,os.date a=d"*t"a.year,a.month,a.day=a.year+(d"%m%d">"1225"and 1 or 0),12,25 print("Christmas",("Eve "):rep((t(a)-t())/86400))

LuaJIT에서 작동하지 않는다는 점에 주목할 가치가 있습니다 (구문 오류)


PPCG에 오신 것을 환영합니다! 좋은 첫 포스트!
Rɪᴋᴇʀ


1

MATLAB, 91 바이트

n=datetime
x=datetime(year(n+6),12,25)
s='Christmas'
while days(x-n)>=1 n=n+1 s=[s,' Eve'] end

MATLAB 비루 퍼, 100 바이트

x=datenum(datetime(floor((now+5)/365.2425),12,25))
d=x-now
['Christmas' repmat(' Eve',1,min(d(d>=0)))]

1

스칼라 , 123 바이트

ASCII 전용 작업 덕분입니다.

print("Christmas")
var d=new java.util.Date
while(d.getMonth()<11||d.getDate()!=25){print(" Eve");d.setDate(d.getDate()+1)}

온라인으로 사용해보십시오!

스칼라 + Joda-Time , 140 바이트

import org.joda.time._
var s="Christmas"
var d=DateTime.now
while(d!=d.withDate(d.year().get(),12,25)){d=d.plusDays(1);s+=" Eve"};println(s)

Joda-Time 라이브러리가 필요하므로 TIO에서 실행되지 않습니다.


요다 없음, 154 . 슬프게도 java.util.Date여기서 일할 수 없습니다 : /
ASCII 전용


아 @ASCII 전용 나는 object Main extends App{}내 계산에서 문자를 세지 않았습니다 (다른 스칼라 답변도하지 않았기 때문에). 우리가 그걸 꺼내면 나를 이겼습니다 ^^
V. Courtois

withDate()호출 ... 너무 비싸다
V. COURTOIS

1. 외부 라이브러리를 사용하고 변경 사항을 사용하지 않기 때문에 언어를 "Scala + Joda-Time"으로 지정해야합니다. 더 짧고 더하기 라이브러리가 필요하지 않습니다 : P
ASCII-only

1

05AB1E , 93 89 바이트

žežfžg)V'ŒÎ[Y¨JŽ9ÚQ#Y`2ô0Kθ4ÖUD2Qi\28X+ë31s<7%É-}‹iY¬>0ëYT`ǝDÅsD12‹i>1ë\1Dǝ¤>2}}ǝVð'»ˆ}J™

온라인으로 시도 하거나 에뮬레이트 된 자체 지정 날짜 'today'로 온라인으로 시도하십시오 .

설명:

05AB1E에는 현재 연도 / 월 / 일 /시 / 분 / 초 / 마이크로 초를 수신하는 것을 제외하고는 날짜에 대한 기본 제공 기능이 없으므로 대부분의 바이트는 수동 계산에 사용됩니다.

žežfžg)V   # Get the current date and save it in variable `Y`
'ŒÎ       '# Push compressed string "christmas"
[          # Start an infinite loop
 Y¨JŽ9ÚQ   #  If the current date is December 25th:
        #  #   Stop the infinite loop
 Y`2ô0Kθ4ÖUD2Qi\28X31s<7%É-}‹iY¬>0ëYTDÅsD12i>1ë\1Dǝ¤>2}}ǝV
           #  Go to the next day, and set `Y` to it
 ð         #  Push a space " "
 '»ˆ      '#  Push compressed string "eve"
}          # After the infinite loop:
 J         # Join everything on the stack together
          # And make every word title-case (and output the result implicitly)

다음 날 어떻게 가는지 이해하려면 이 대답을보십시오 . (PS : 다른 곳에서도 사용하기 때문에 1¾ǝ으로 대체되었습니다 .)T`ǝcounter_variable

내이 05AB1E 팁을 참조하십시오 (섹션 어떻게 사전 사용할 수 있나요? 그리고 어떻게 큰 정수를 압축하는 방법? ) 이유를 이해하는 방법 '»ˆ이다 "eve"; 'ŒÎ이다 "christmas"; 하고 Ž9Ú있다 1225.


영리한 골프!
MilkyWay90

0

C # (Visual C # 대화식 컴파일러) , 141 바이트

var g=DateTime.Now;Write("Christmas"+string.Concat(Enumerable.Repeat(" Eve",(new DateTime(g.Year+(g.Day>25&g.Month>11?1:0),12,25)-g).Days)));

온라인으로 사용해보십시오!


1
나는 이것이 11 월 30 일에 효과가 있다고 생각하지 않습니다 ...
Neil

이제 수정되었습니다. 12 월인지 아닌지에 체크 표시를 잊었습니다
무지의 실시

Month> 25에 대해 확실합니까?
Neil

지금 고쳤습니다 ...
무지의 구현

? 1 : 0이 필요한가요? 정수를 반환하지 않습니까?
12Me21

0

빨강 , 89 86 84 78 76 바이트

ASCII 전용으로 -10 바이트!

does[a: now prin"Christmas"while[a/3 * 31 + a/4 <> 397][prin" Eve"a: a + 1]]

온라인으로 사용해보십시오!



물론 @ASCII 전용 흠! 감사합니다!
Galen Ivanov



: 크리스마스에 실행할 때 @ ASCII-만 76 바이트 버전은 올바른 결과를 제공하지 않습니다 날짜를 인수로 난 단지 사용하지 않는 바보가 된 기분 now하지 now/date. 개선해 주셔서 감사합니다!
Galen Ivanov

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.