메리 골프 마스 여러분!


35

모두 크리스마스이며 축하하는 코드 골프 도전입니다. 선물을 인쇄하려면 프로그램을 만들어야합니다. 구체적으로, "Merry Christmas"라는 단어. 그러나이 프로그램은 12 월 25 일인 경우에만 작동해야합니다. 다른 날에 코드를 실행하면 프로그램이 중단됩니다.

이것은 Code-Golf이므로 바이트 수가 가장 적은 답이 이깁니다.

메리 크리스마스!


5
네, 흠. .. 예 25 죄송합니다
Leo


3
골디 코드 마스 ! :)
Luis Mendo

1
아니요, 충돌해야합니다. 당신은 애플 리케이션을 종료 할 수 없습니다
레오

2
@PhiNotPi 이러한 도전은 다릅니다. 이것은 카운트 다운을 요구하지 않으며 출력을 기다리는 것을 포함하지 않습니다.
Leo

답변:


8

파이크, 21 바이트

.dↄґ6C65h*325q/Al

여기 사용해보십시오!

     C65h*        -   multiply the day by the (current month + 1)
          325q    -  ^ == 325
    6         /   - 6 / ^
.dↄґ              -  load "merry christmas"
               Al - ^.capwords()

또는 18 바이트 비경쟁.

.dↄґ6Cs6Y1q/Al

이 섹션을 제외하고는 정확히 동일합니다.

Cs6Y1q 
C      -    get_time()
 s6    -   add 1 week
   Y   -  get day of the year
    1q - ^ == 1

여기 사용해보십시오!


10 월 30 일이면 실패합니다. 그렇지 않습니까?
Magic Octopus Urn

1
@carusocomputing 30 * (10+1)= 330 not 325
Blue

6

자바 스크립트, 55 53 46 바이트

참고 : 이것은 Chrome에서만 테스트되었으며 프로그램은 브라우저마다 (또는 장치마다) 다르게 작동 할 수 있습니다

@ ConorO'Brien 덕분에 2 바이트 절약

@ETHProductions 덕분에 7 바이트 절약

alert(/c 25/.test(Date())?"Merry Christmas":a)

Uncaught ReferenceError: a is not defined날짜가 아닌 경우로 종료합니다 Dec 25. 이것이 충돌로 간주되는지 확실하지 않습니다.

alert(/c 25/.test(Date())?"Merry Christmas":a)


어때요 .slice(6,10)=="c 25"?
Conor O'Brien

@ ConorO'Brien 감사합니다! 똑똑하다 :)
Kritixi Lithos

@ETHproductions 나는 끝나는 날이나 달을 생각할 수 없습니다 c( Oct가까이 오지만 여전히 정규 표현식을 만족시키지 못합니다). 팁 고마워!
Kritixi Lithos

결과 Date()는 완전히 구현에 따라 다릅니다. 예를 들어 기계의 언어와 위치에 따라 달라질 수 있습니다.
Oriol

@Oriol 그렇다면 대답에 브라우저를 지정하겠습니다.
Kritixi Lithos

5

파이썬 3, 66 63 바이트

JavaScript / ES의 아이디어 덕분에 몇 바이트를 짜낼 수있었습니다. 존재하지 않는 사전을 색인화하면 키가 발생합니다 KeyError. 다음 코드는 현지 시간대로 작동합니다

import time;print({1:'Merry Christmas'}['c 25'in time.ctime()])

의 출력 형식 ctime은 로캘에 따라 달라지지 않습니다 'Sun Dec 25 19:23:05 2016'. 형식은 항상 ~ 입니다. 12 월에만 3 자로 된 약어가로 끝나기 c때문에 'c 25'in time.ctime()여기서 사용하는 것이 안전합니다 .


이전 버전:

이것은 UTC 시간대에서 작동합니다. 현지 시간대의 s/gm/local경우 3 바이트가 더 필요 합니다. 파이썬 2의 경우 print65 바이트 에서 괄호를 제거 할 수 있습니다 .

import time;print({(12,25):'Merry Christmas'}[time.gmtime()[1:3]])

구조는 KeyError다른 날짜에 발생합니다.

>>> import time;print({(1,1):'Happy New Year'}[time.gmtime()[1:3]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: (12, 25)

다른 날 에이 충돌이 발생합니까?
Erresen

2
키로 튜플에 이의를 제기하여 실행할 수 없습니다 . 온라인으로 사용해보십시오! . import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]파이썬 2로 바꾸고 라벨을
붙이면

@ElPedro oops : D 였어야했는데 1:3우연히 테스트 코드를 복사했습니다
Antti Haapala

gmtime()내 대답에 대한 당신의 아이디어를 빌 렸을 때 그 점을 알게 되었습니다. 당신이 신경 쓰지 않기를 바랍니다 :-)
ElPedro

5

PHP, 39 38 바이트, 경쟁하지 않음 (충돌하지 않음)

<?=date(md)-1225?"":"Merry Christmas";

또는

<?date(md)-1225?die:0?>Merry Christmas

또는

<?=["Merry Christmas"][date(md)-1225];

누구든지 4 바이트를 골프 칠 수 date(Lz)%1001-358있습니까? : D
Titus

3
이 충돌이 발생합니까?
edc65

당신은 떠날 수있는 ""당신에게 2 바이트를 저장하는 첫 번째 코드에서. 이 빌어 먹을 윤년 아니었다면, 당신은 대체하여 2 바이트 이상 절약 할 수 mdz하고 122512 월 25 일의 년의 일의 숫자로.
UTF-8

1
대안 : eval((date(md)^TQZZ).'"Merry Christmas";');(43 바이트)
Ismael Miguel

1
@ UTF-8 : 맞습니다. 부울 값으로 주로 Elvis를 사용합니다. 그러면 인쇄 1됩니다. 계산 결과가 인쇄됩니다. 그리고 0104-12251121입니다.
Titus

4

파이썬 2 , 68 67 65 바이트

@muddyfish 덕분에 -1

다른 커플을 구한 아이디어에 대한 @AnttiHaapala에게 감사합니다.

import time;print['Merry Christmas'][(12,25)!=time.gmtime()[1:3]]

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

12 월 25 일이 아닌 경우 IndexError가 발생합니다.

비 윤년에만 작동하기 때문에 59 바이트의 비경쟁 버전 (올해는 360이지만 윤년은 361)

import time;print['Merry Christmas'][360!=time.gmtime()[7]]

튜플 대신 목록을 사용하여 바이트를 저장할 수 없습니까?
Blue

@muddyfish 감사합니다, 잘 잡습니다.
ElPedro

좋은 것은, 내 생각은 여분의 2 바이트 였다 : P
FlipTack

감사. @AnttiHaapala의 답변에 댓글을 달고 gmtime()부부를 면도하려고 생각할 때까지 그것은 67 바이트 버전이었습니다 . 나는 당일 아이디어로 더 많은 것을 할 수 있었으면 좋겠다.
ElPedro

당신은에 1 바이트를 저장할 수 있습니다 time.ctime () [6시 10분] = '25 C'!
최대

4

R, 52 61 58 바이트

`if`(format(Sys.Date(),"%m%d")=="1225","Merry Christmas",)

현재 날짜가 12 월 25 일이 아닌 경우에 세 번째 인수가 제공되지 않으므로 오류가 반환됩니다 if.

편집 : 바보 오류 수정


내 작은 오타가 유감입니다. 나는 25tg를 말하려고했다
Leo

이것은 올해에만 작동합니다!
Erresen

@Erresen 아, 바보 같은 실수. 그래도 해결되었습니다.
Billywob

4

여기 처음으로 ...이 직업에 가장 적합한 언어로 시작했습니다.

Java, 200 188 바이트 (@Daniel Gray 덕분에), 186 바이트는 인쇄에서 "ln"을 제거합니다.

import java.util.*;public class a{public static void main(String[]r){Calendar c=Calendar.getInstance();if(!(c.get(2)==11&&c.get(5)==25)){int i=1/0;}System.out.print("Merry Christmas");}}

여기 사용해보십시오!


1
PPCG에 오신 것을 환영합니다! 자바가 가장 짧지는 않지만 멋진 첫 번째 게시물.
Rɪᴋᴇʀ

1
Calendarfor 를 변경하고 *몇 바이트를 저장할 수 있습니다 . 당신은 또한 args주요 방법으로 매개 변수 의 이름을 줄일 수 있습니다 , 나는 생각합니다 ...
Daniel Gray

@ 다니엘 그레이, 당신은 절대적으로 맞습니다, 감사합니다!
Bonifacio

1
환영! "public class"를 "interface"로 바꾸고 main에서 public 수정자를 제거하면 10 바이트를 절약 할 수 있습니다. 그러나 "interface a {static void main ..."이렇게하면 Compilejava가 실행할 수 없습니다 온라인.
Zavada

3

MATL , 34 33 바이트

'Merry Christmas'IHh&Z'5U12h=?}Yl

이 언어의 현재 버전 (19.7.0) 에서 작동 합니다. 오류를 발생시키기 위해 다음 코드는 문자열의 로그에 오류가 있다는 사실을 이용합니다 (향후 버전에서는 변경 될 수 있음).

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

설명

'Merry Christmas'  % Push this string
IHh                % Push 3, then 2, concatenate: gives array [3 2]
&Z'                % Get 3rd and 2nd outputs of clock vector: current day and month
5U12h              % Push 5, square, push 12, concatenate: gives [25 12]
=                  % Compare if corresponding entries are equal in the two arrays
?                  % If all entries are equal: do nothing
}                  % Else
  Yl               %   Logarithm. Gives an error when applied on a string
                   % End (implicit). Display (implicit)

3

QBIC , 48 바이트

~left$$|(_D,5)=@12-25||?@Merry Christmas|\?a(12)

설명:

~             IF
left$$|(_D,5) the date string starts with
=@12-25|      the string "12-25"
|             THEN
?@Me..as|     PRINT "Merry Christmas"
\             ELSE
?a(12)        Print the twelfth index of an undefined array. 
              Since there are only 11 elements in undefined arrays, this 
              results in an index-out-of-bounds error.    
The the IF statement is auto-closed by QBIC.

이것은 미국 MM-DD날짜 표기법을 가정합니다 . QBIC에서 마침내 Substring 함수를 만들면 더 짧을 것입니다.


크리스마스가 아닌 날에는 어떻게 되나요? 예상대로 충돌합니까?
Erresen

@Erresen은 지금 않습니다.
steenbergh

3

05AB1E ,32 21 바이트

Adnan의 문자열 압축 덕분에 11 바이트가 절약되었습니다.

1žfže‚12D·>‚Q÷”ÞٌΔ×

설명

 žfže‚                Push [current month, current day]
      12D·>‚          Push [12, 25]
            Q         Push tmp = 1 if the two arrays are equal, tmp = 0 otherwise
1            ÷        Evaluate x = 1/tmp. If tmp = 0 a division by 0 exception is thrown
              ”ÞÙŒÎ”× Implicitly display "Merry Christmas" x times

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

내가 먼저 생각했던 것을 했으므로 이것에 대한 더 나은 접근법이있을 수 있습니다. 그러나 PPCG는 05AB1E에서도 메리 크리스마스를받을 자격이 있습니다.


또한, x중복 및 이중 약자 :).
Adnan

3

C # / CS 스크립트 (106) 100 99 바이트

99 바이트 솔루션

using System;int i;Console.WriteLine(DateTime.Now.ToString("dM")=="2512"?"Merry Christmas":i/0+"");

여기 사용해보십시오!

100 바이트 솔루션 (이것을 선호하십시오 ... 약간 다릅니다)

using System;int i;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":i/0+"");

설명 :

using System;
int i;

// if today plus 7 days is the first day of the year, then it's xmas!
Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1
    ? "Merry Christmas"

// otherwise divide i by 0
    : i/0+"");

DateTime.Now.AddDays(7).DayOfYear==11 바이트보다 짧지 DateTime.Now.ToString("ddMM")=="2512"만 1 바이트는 더 깁니다DateTime.Now.ToString("dM")=="2512"


1
사용할 수 있습니다 $"{DateTime.Now:dM}"=="2512". dM모호하지만 "2512"에는 적합하지 않습니다.
Kobi

@ Kobi CS 스크립트에 문자열 보간을 사용할 수 없습니다 :(
Erresen

1
LinqPad (예 : $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""55 바이트) =) 를 사용하면 가능합니다
Kenneth K.

int i그런지 1/0?
NoOneIsHere 다음

1
@Erresen 아, 내 실수. 나는 충분히 테스트하지 않았다. Tweaked : $"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)(59 bytes)
Kenneth K.

2

C # / CS 스크립트, 96 바이트, 대부분 Erresen에서 표절

using System;Console.WriteLine(DateTime.Now.AddDays(7).DayOfYear==1?"Merry Christmas":1/0+"");

int i나누기를 하드 코딩하기 위해 선언을 삭제합니다 . 나는 이것을 의견으로 남길 것이지만 평판은 없습니다.


PPCG에 오신 것을 환영합니다! 좋은 첫 포스트! 의견 / 답변에 대해 걱정하지 마십시오.별로 중요하지 않습니다.
Rɪᴋᴇʀ

2

bash + 유닉스 유틸리티, 51 49 47 바이트

((`date +%m%d`-1225))&&${};echo Merry Christmas

* 에코에서 따옴표를 제거 할 수 있음을 지적한 @ KenY-N과 조건 크기를 2 바이트 줄이려면 @IporSircer에게 감사합니다.


그것은 나에게 bash: ${}: bad substitution오류를 준다 . 또한 Merry Christmas 의 인용문을 삭제하여 2 바이트를 절약 할 수 있습니다 . 또한 45 바이트[ `date +%m%d` = 1225 ]&&echo Merry Christmas 와 동일하게 작동 합니다 .
Ken YN

1
@ KenY-N이 오류는 의도적 인 : 프로그램이되어 가정 크리스마스가 아닌 다른 일에 충돌. 에코의 인용 부호를 삭제할 수 있다고 언급 해 주셔서 감사합니다. 나는 그것을 놓쳤다.
Mitchell Spector

죄송합니다. 해당 요구 사항을 놓쳤습니다! 날짜 문자열을 변경하여 테스트 한 결과 충돌하지 않습니다. 답변을 삭제했습니다 ... 그러나 대안이 있으므로 업데이트하겠습니다.
Ken YN

교체 시도 ${}!-1 바이트 나를 이길. 당신이 이길 때 당신을 upvote합니다.
Ken YN

1
@ KenY-N 고맙지 만 $ {}을 (를)!-(으)로 변경하지는 않겠습니다. 왜냐하면 후자는 스크립트가 아닌 명령 줄에서만 제대로 작동한다고 생각하기 때문입니다. 문자).
Mitchell Spector

1

그루비, 57 바이트

print new Date().format("Md")=="1225"?"Merry Christmas":b

25.12 이외의 날짜에서 충돌이 발생합니다. 에 groovy.lang.MissingPropertyException있기 때문에 b정의되지 않았습니다.


1

스택 , 42 바이트

여기 사용해보십시오!

('Merry Christmas')'MMDD'date'1225'=¬#out

이것은 즉을 포함하는 단일 요소 배열을 만듭니다 'Merry Christmas!'. 그런 다음 날짜와 월을 차례로 사용하여 날짜를 문자열에 넣습니다. '1225'(Christmas) 와 같은지 검사하고로 반전 ¬한 다음 해당 멤버를 이전 배열에서 가져옵니다. 성탄절이 아니면 인덱스 오류와 함께 오류가 발생합니다. 그렇지 않으면을 인쇄합니다 Merry Christmas. (다른 날의 작동 방식을 보려면 문자열의 날짜를 변경하십시오.)


1

배치, 66 바이트

@echo off
if %date:~0,5%==25/12 echo Merry Christmas&exit/b
if

후행 줄 바꿈은 if명령문 구문 분석에 실패 하므로 중요 합니다. 현지 날짜 형식과 일치하도록 날짜 확인을 조정해야 할 수도 있습니다.


1

파이썬 2, 69 77 75 또는 72 70 바이트

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
else:1/0

크리스마스 일 때 오류가 발생해도 문제가되지 않으면 다음을 수행하십시오.

import time
if time.strftime("%d%m")=="2512":print"Merry Christmas"
1/0

편집하다:

오류를 제기해야한다고 지적한 @ Flp.Tkc에게 감사합니다.

strftime 함수에서 콜론 제거에 대한 지적을 위해 @Max에서 -2 바이트


1
크리스마스가 아닌 경우 충돌이 발생하기 때문에 정상적으로 종료됩니다.
FlipTack

> '% D % m'== '2512'- 당신은 2 바이트가 콜론을 제거 절약 할 수 있습니다
최대

@Max OK, 팁 주셔서 감사합니다. 전에는이 기능을 사용하지 않았으므로 그렇게 생각하지 않았습니다.
sonrad10

time.ctime () 6시 10분] == '25 C'와 다른 3 바이트를 저장
최대

1

CJam, 28

et[C25]#1="Merry Christmas"/

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

설명:

et                   push an array of current [year month day hour ...]
[C25]                push the array [12 25] (C=12)
#                    find the position of the 2nd array within the first one
1=                   compare it with 1, resulting in 1 for 1 and 0 otherwise
"Merry Christmas"/   split "Merry Christmas" into pieces of that length
                      (it crashes if the length is 0)
                     at the end, all the pieces are concatenated
                      and printed automatically

0

C # .NET, 180 (172) 171 바이트

Kritixi Lithos 덕분에 8 바이트 절약

Kritixi Lithos 덕분에 1 바이트를 절약했습니다.

namespace System{class P{static void Main(string[] args){var d=DateTime.Today;if(d.Day==25)if(d.Month>11){Console.Write("Merry Christmas!");return;}throw new Exception();}}}

대체되지 않은 다른 변형 :

namespace System //In System, so we don't have to use system.
{
    class Program
    {
        static void Main(string[] args) //Main function.
        {
            var d = DateTime.Today; //Get Today.
            if (d.Day == 25) if (d.Month == 12) //Day has to be 25th, Month has to be 12nd.
                {
                    Console.Write("Merry Christmas!"); return; //Prints.
                }
            throw new NotChristmasException(); //Errors/Crashes the program.
        }
    }
    class NotChristmasException : Exception { } //Holiday exception, hooray!
}

프로그램에 더 짧은 수업 이름을 줄 수 없습니까?
Kritixi Lithos

"NotChristmasException"을 더 짧은 것으로 변경하여 일부 바이트를 제거 할 수 있습니다.
Leo

@FishProHD NotChristmasExceptionUngolfed 변형에만 있습니다.
devRicher

@KritixiLithos 감사합니다.
devRicher

1
if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()진술과 주변에 괄호를 제거하면 메모가 결합 Console.Write및 교체 return와 함께 else. 또한 변경 var d=DateTime.Now아마 당신이 예외를 던져 제거 할 수 args[-1];에 인수 이름을 바꾼 후 a그래서 a[-1];(다른 곳에서 사용 제로에 의해 분할이 때문에 동일하지 않음)
pinkfloydx33

0

수학, 46 바이트

If[Today[[1,2;;]]=={12,25},"Merry Christmas!"]

Now2 바이트 절약Today
Kelly Lowder

또한 False 결과에 충돌이 필요하므로 충분 하다고 생각 Quit[]하거나 1/0충분해야 한다고 생각 합니다.
Kelly Lowder

0

커먼 리스프, 140

(let((m(multiple-value-list(decode-universal-time(get-universal-time)))))(if(and(eq(nth 3 m)25)(eq(nth 4 m)12))(write"Merry Christmas")(c)))

날짜가 맞지 않으면 정의되지 않은 함수와 충돌합니다.


0

awk, 29 바이트 (+ 길이 ( "Merry xmas"))

v=1225==strftime("%m%d")||1/0

그것을 실행 :

$ echo Merry xmas | awk 'v=1225==strftime("%m%d")||1/0'
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: division by zero attempted

계절 인사말은로 전달됩니다 awk. strftimemonth + day (예 :)를 1226반환하고 일치하면 1225 $0레코드가 출력됩니다. 비교 결과는 날짜 비교에 실패한 경우 1을 나누는 데 사용되는 var에 1225==1226배치됩니다 v.


0

하스켈, 116

크리스마스가 아닌 경우 "함수 f의 비 완전 패턴"과 충돌합니다.

import Data.Time
f(_,12,25)="Merry Christmas"
main=getZonedTime>>=print.f.toGregorian.localDay.zonedTimeToLocalTime

불행히도 유용한 형식으로 즉시 시간을 얻을 수있는 기능이 없으므로 대부분 날짜 형식을 변환합니다.


0

C #, 122104 바이트

@raznagul 덕분에 18 바이트 절약

using System;i=>{if(DateTime.Now.AddDays(7).DayOfYear==1)Console.Write("Merry Christmas");else{i/=0;};};

현재 날짜에 7 일을 추가하고 연중 첫 번째 날인지 확인하고, 그렇다면 "Merry Christmas"를 표시하고, 그렇지 않으면 0으로 나눕니다.


return필요하지 않습니다. i대신에 사용하십시오 ().
raznagul

0

루비, 69 바이트

if Time.now.strftime("%j")=="360";puts "Merry Christmas";else 0/0;end

정상과 윤년을 구분하지 않고 윤년이 아닌 해를 조정해야 할 수도 있습니다.


0

ForceLang, 180 바이트

set s datetime.toDateString datetime.now()
set t "Dec 25"
def c s.charAt i
def d t.charAt i
set i -1
label 1
set i 1+i
if i=6
 io.write "Merry Christmas!"
 exit()
if c=d
goto 1
z.z

( datetime.toDateString로케일에 따라 다르므로 로케일에 따라 작동하지 않을 수 있음)


0

C #, 90 바이트

using System;Console.Write(new[]{"Merry Christmas"}[DateTime.Now.AddDays(7).DayOfYear-1]);

크리스마스가 아닌 경우 IndexOutOfRangeException을 발생시킵니다.

여기 사용해보십시오!


0

bash 명령 줄, 45 48 49 48 바이트

date +%m%d|grep -q 1225&&echo Merry Christmas||!-
date +%m%d|grep -q 1225||!-;echo Merry Christmas

유사 미첼 스펙터의 ,하지만 사용 grep일치를 확인하는 자동 모드에서 다음 &&그것에 만 성공에 인쇄하고 있는지 확인합니다 ||그것으로 역사를 보는 원인 !-나에게이를 준다 :

-bash: !-: event not found

그리고 그것은 !- ; echo foo보여 주듯이 실행을 멈 춥니 다 . 이 bash문서는 !-n현재 명령 빼기 n를 참조하므로 아마도로 번역되어 !-0동일한 (및 지역화되지 않은) 오류 메시지를 제공합니다.


좋은 생각이지만 크리스마스가 아닌 다른 날에는 추락하지 않습니다.
Mitchell Spector

이제 실패시 오류가 발생합니다.
Ken YN

1
오류 메시지가 인쇄되지만 계속 진행됩니다. 실제로 충돌하지 않습니다. 를 교체하면 $ {}로 오류 메시지를 인쇄하고 계속 진행하는 것보다 실제로 충돌합니다. 충돌이 발생하면 그 시점에서 프로그램을 종료해야한다고 생각합니다. 마지막에 여분의 "; echo x"를 넣고 실행되는 것을 확인하면 종료되지 않는다는 것을 알 수 있습니다. (그래서 내 대답에. 대신 $ {}을 사용했습니다.) 실제 충돌을 일으킬 수있는 1 또는 2 문자 시퀀스가 ​​있는지 알 수 없습니다.
Mitchell Spector

@MitchellSpector : 2 문자 시퀀스를 찾았습니다!
Ken YN

이제 논리를 전환하여 48 개로 돌아가서 ;대신 사용할 수 있습니다 ||.
Ken YN
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.