모두 크리스마스이며 축하하는 코드 골프 도전입니다. 선물을 인쇄하려면 프로그램을 만들어야합니다. 구체적으로, "Merry Christmas"라는 단어. 그러나이 프로그램은 12 월 25 일인 경우에만 작동해야합니다. 다른 날에 코드를 실행하면 프로그램이 중단됩니다.
이것은 Code-Golf이므로 바이트 수가 가장 적은 답이 이깁니다.
메리 크리스마스!
모두 크리스마스이며 축하하는 코드 골프 도전입니다. 선물을 인쇄하려면 프로그램을 만들어야합니다. 구체적으로, "Merry Christmas"라는 단어. 그러나이 프로그램은 12 월 25 일인 경우에만 작동해야합니다. 다른 날에 코드를 실행하면 프로그램이 중단됩니다.
이것은 Code-Golf이므로 바이트 수가 가장 적은 답이 이깁니다.
메리 크리스마스!
답변:
.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
30 * (10+1)
= 330 not 325
참고 : 이것은 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"
?
c
( Oct
가까이 오지만 여전히 정규 표현식을 만족시키지 못합니다). 팁 고마워!
Date()
는 완전히 구현에 따라 다릅니다. 예를 들어 기계의 언어와 위치에 따라 달라질 수 있습니다.
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의 경우 print
65 바이트 에서 괄호를 제거 할 수 있습니다 .
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)
import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]
파이썬 2로 바꾸고 라벨을
1:3
우연히 테스트 코드를 복사했습니다
gmtime()
내 대답에 대한 당신의 아이디어를 빌 렸을 때 그 점을 알게 되었습니다. 당신이 신경 쓰지 않기를 바랍니다 :-)
<?=date(md)-1225?"":"Merry Christmas";
또는
<?date(md)-1225?die:0?>Merry Christmas
또는
<?=["Merry Christmas"][date(md)-1225];
date(Lz)%1001-358
있습니까? : D
""
당신에게 2 바이트를 저장하는 첫 번째 코드에서. 이 빌어 먹을 윤년 아니었다면, 당신은 대체하여 2 바이트 이상 절약 할 수 md
로 z
하고 1225
12 월 25 일의 년의 일의 숫자로.
eval((date(md)^TQZZ).'"Merry Christmas";');
(43 바이트)
1
됩니다. 계산 결과가 인쇄됩니다. 그리고 0104-1225
1121입니다.
@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]]
gmtime()
부부를 면도하려고 생각할 때까지 그것은 67 바이트 버전이었습니다 . 나는 당일 아이디어로 더 많은 것을 할 수 있었으면 좋겠다.
여기 처음으로 ...이 직업에 가장 적합한 언어로 시작했습니다.
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");}}
Calendar
for 를 변경하고 *
몇 바이트를 저장할 수 있습니다 . 당신은 또한 args
주요 방법으로 매개 변수 의 이름을 줄일 수 있습니다 , 나는 생각합니다 ...
'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)
~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 함수를 만들면 더 짧을 것입니다.
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
중복 및 이중 약자 :).
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==1
1 바이트보다 짧지 DateTime.Now.ToString("ddMM")=="2512"
만 1 바이트는 더 깁니다DateTime.Now.ToString("dM")=="2512"
$"{DateTime.Now:dM}"=="2512"
. dM
모호하지만 "2512"에는 적합하지 않습니다.
$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""
55 바이트) =) 를 사용하면 가능합니다
int i
그런지 1/0
?
$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)
(59 bytes)
((`date +%m%d`-1225))&&${};echo Merry Christmas
* 에코에서 따옴표를 제거 할 수 있음을 지적한 @ KenY-N과 조건 크기를 2 바이트 줄이려면 @IporSircer에게 감사합니다.
${}
와 !-
1 바이트 나를 이길. 당신이 이길 때 당신을 upvote합니다.
('Merry Christmas')'MMDD'date'1225'=¬#out
이것은 즉을 포함하는 단일 요소 배열을 만듭니다 'Merry Christmas!'
. 그런 다음 날짜와 월을 차례로 사용하여 날짜를 문자열에 넣습니다. '1225'
(Christmas) 와 같은지 검사하고로 반전 ¬
한 다음 해당 멤버를 이전 배열에서 가져옵니다. 성탄절이 아니면 인덱스 오류와 함께 오류가 발생합니다. 그렇지 않으면을 인쇄합니다 Merry Christmas
. (다른 날의 작동 방식을 보려면 문자열의 날짜를 변경하십시오.)
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 바이트
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
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!
}
NotChristmasException
Ungolfed 변형에만 있습니다.
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];
(다른 곳에서 사용 제로에 의해 분할이 때문에 동일하지 않음)
If[Today[[1,2;;]]=={12,25},"Merry Christmas!"]
Now
2 바이트 절약Today
Quit[]
하거나 1/0
충분해야 한다고 생각 합니다.
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
. strftime
month + day (예 :)를 1226
반환하고 일치하면 1225
$0
레코드가 출력됩니다. 비교 결과는 날짜 비교에 실패한 경우 1을 나누는 데 사용되는 var에 1225==1226
배치됩니다 v
.
if Time.now.strftime("%j")=="360";puts "Merry Christmas";else 0/0;end
정상과 윤년을 구분하지 않고 윤년이 아닌 해를 조정해야 할 수도 있습니다.
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
로케일에 따라 다르므로 로케일에 따라 작동하지 않을 수 있음)
using System;Console.Write(new[]{"Merry Christmas"}[DateTime.Now.AddDays(7).DayOfYear-1]);
크리스마스가 아닌 경우 IndexOutOfRangeException을 발생시킵니다.
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
동일한 (및 지역화되지 않은) 오류 메시지를 제공합니다.
;
대신 사용할 수 있습니다 ||
.