Wszyscy są Święta Bożego Narodzenia, a oto święto wyzwanie golfowego. Musisz stworzyć program do wydrukowania prezentu. W szczególności słowa „Wesołych Świąt”. Ale jest haczyk: ten program musi działać tylko wtedy, gdy jest 25 grudnia. Jeśli kod zostanie uruchomiony w innym dniu, program powinien się zawiesić.
To jest Code-Golf, więc wygrywa odpowiedź z najmniejszą ilością bajtów.
Wesołych Świąt!
Odpowiedzi:
Pyke, 21 bajtów
Wypróbuj tutaj!
Lub 18 bajtów niekonkurencyjnych.
Dokładnie tak samo, z wyjątkiem tej sekcji:
Wypróbuj tutaj!
źródło
30 * (10+1)
= 330 nie 325JavaScript,
555346 bajtówUwaga: zostało to przetestowane tylko w Google Chrome, program może zachowywać się inaczej w zależności od przeglądarki (lub urządzenia na urządzenie)
2 bajty zapisane dzięki @ ConorO'Brien
7 bajtów zapisanych dzięki @ETHProductions
Wyjście z,
Uncaught ReferenceError: a is not defined
jeśli data nie jestDec 25
. Nie jestem do końca pewien, czy liczy się to jako awariaźródło
.slice(6,10)=="c 25"
?c
(Oct
zbliża się, ale nadal nie spełnia wyrażenia regularnego). Dzięki za wskazówkę!Date()
jest całkowicie zależny od implementacji. Na przykład oczekuję, że będzie się różnić w zależności od języka i lokalizacji urządzenia.Python 3,
6663 bajtówDzięki pomysłom z odpowiedzi JavaScript / ES udało mi się tutaj wycisnąć kilka bajtów. Indeksuj słownik - nieistniejące klucze podniosą
KeyError
. Poniższy kod działa w lokalnej strefie czasowejFormat wyjściowy dla
ctime
nie zależy od ustawień regionalnych - format jest zawsze ~'Sun Dec 25 19:23:05 2016'
. Ponieważ dopiero w grudniu kończy się 3-literowy skrót, można zc
niego bezpiecznie korzystać'c 25'in time.ctime()
.Poprzednia wersja:
Działa to w strefie czasowej UTC. Dla lokalnej strefy czasowej potrzeba jeszcze
s/gm/local
3 bajtów. W Pythonie 2 można usunąć nawiasy zprint
65 bajtów.Konstrukt rzuca
KeyError
w inne daty:źródło
import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]
i1:3
, przez przypadek skopiowałem mój kod testowygmtime()
pomysł na moją odpowiedź. Mam nadzieję, że nie masz nic przeciwko :-)PHP,
3938 bajtów, nie konkuruje (nie ulega awarii)lub
lub
źródło
date(Lz)%1001-358
? : D""
pierwszy kod, który oszczędza 2 bajty. Gdyby nie było od lat przestępnych do cholery, można zaoszczędzić 2 Byte więcej zastępującmd
przezz
i1225
przez liczbę w dniu 25 grudnia roku.eval((date(md)^TQZZ).'"Merry Christmas";');
(43 bajty)1
. Spowoduje to wydrukowanie wyniku obliczeń. i0104-1225
jest 1121.Python 2 ,
686765 bajtów-1 dzięki dzięki @muddyfish
Dzięki @AnttiHaapala za pomysł, który uratował kolejną parę.
Wypróbuj online!
Zgłasza błąd indeksu, jeśli nie 25 grudnia.
Niekonkurencyjna wersja na 59 bajtów, ponieważ działa tylko dla lat przestępnych (używa dnia roku, który wynosi 360 w tym roku, ale 361 w latach przestępnych)
źródło
gmtime()
kilku. Muszę przyznać, że chciałbym mieć więcej możliwości zrobienia tego z pomysłem na cały rok.R,
52 6158 bajtówJeśli bieżąca data nie przypada na 25 grudnia, zwracany jest błąd, ponieważ nie podano trzeciego argumentu
if
.Edycja: Naprawiono głupi błąd
źródło
Mój pierwszy raz tutaj ... Zacząłem od najlepszego języka do tej pracy:
Java,
200188bajtów (dzięki @Daniel Gray), 186 bajtów usuwających „ln” z wydruku.Wypróbuj tutaj!
źródło
Calendar
dla*
i zapisać kilka bajtów.args
Myślę, że można także skrócić nazwę parametru w głównej metodzie, myślę ...MATL ,
3433 bajtyDziała to w bieżącej wersji (19.7.0) języka. Aby spowodować błąd, poniższy kod wykorzystuje fakt, że logarytm ciągu powoduje błąd (może to ulec zmianie w przyszłych wersjach).
Wypróbuj online!
Wyjaśnienie
źródło
QBIC , 48 bajtów
Wyjaśnienie:
Zakłada to amerykańską
MM-DD
notację daty. Byłoby to krótsze, gdybym w końcu utworzył funkcję Substring w QBIC.źródło
05AB1E ,
3221 bajtówZaoszczędzono 11 bajtów dzięki kompresji ciągów Adnana :).
Wyjaśnienie
Wypróbuj online!
Zrobiłem to, co przyszło mi do głowy, więc może być lepsze podejście do tego. Ale PPCG również zasługuje na Wesołych Świąt w 05AB1E;).
źródło
x
skrótem od duplikatu i podwóju :).C # / CS Script
10610099 bajtów99 bajtowe rozwiązanie
Wypróbuj tutaj!
100 bajtowe rozwiązanie (wolę ten ... trochę inny)
Wyjaśnił:
DateTime.Now.AddDays(7).DayOfYear==1
jest o jeden bajt krótszy niż,DateTime.Now.ToString("ddMM")=="2512"
ale o 1 bajt dłuższy niżDateTime.Now.ToString("dM")=="2512"
źródło
$"{DateTime.Now:dM}"=="2512"
.dM
jest niejednoznaczny, ale nie dla „2512”.$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""
55 bajtów) =)int i
i nie w porządku1/0
?$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)
(59 bajtów)Skrypt C # / CS, 96 bajtów, głównie plagiat z Erresen
Usuwa
int i
deklarację na korzyść twardego kodowania podziału. Zostawiłbym to jako komentarz, ale nie mam reputacji.źródło
narzędzia bash + Unix,
514947 bajtów* Dzięki @ KenY-N za wskazanie, że można usunąć cytaty w echu, oraz @IporSircer za zmniejszenie rozmiaru warunku o 2 bajty.
źródło
bash: ${}: bad substitution
błąd. Możesz także usunąć cytaty z Wesołych Świąt, aby zaoszczędzić dwa bajty. Ponadto[ `date +%m%d` = 1225 ]&&echo Merry Christmas
działa dla mnie, co odpowiada moim 45 bajtom .${}
ze!-
pokazał mi przez jednego bajta. Będę cię głosować, jak wygrasz.Groovy, 57 bajtów
Awarie w datach innych niż 25.12. z
groovy.lang.MissingPropertyException
ponieważb
nie jest zdefiniowana.źródło
Ułożone , 42 bajty
Wypróbuj tutaj!
To tworzy tablicę jednoelementową zawierającą mianowicie
'Merry Christmas!'
. Następnie wstawia datę w ciąg znaków wraz z miesiącem i dniem. Sprawdza równość z'1225'
(Boże Narodzenie), odwraca to¬
, a następnie pobiera ten element z poprzedniej tablicy. Jeśli to nie Boże Narodzenie, wystąpi błąd z indeksem. W przeciwnym razie drukuje sięMerry Christmas
. (Zmień datę w ciągu, aby zobaczyć, jak działa w inne dni).źródło
Partia, 66 bajtów
Końcowy znak nowej linii jest znaczący, ponieważ powoduje, że parsowanie
if
instrukcji kończy się niepowodzeniem. Konieczne może być dostosowanie funkcji sprawdzania daty w celu dopasowania do lokalnego formatu daty.źródło
Python 2,
69 7775 lub7270 BajtówJeśli nie ma znaczenia, czy kończy się z błędem, gdy są święta, to:
EDYTOWAĆ:
Dzięki @ Flp.Tkc za zwrócenie uwagi, że muszę zgłosić błąd
-2 bajty od @Max za wskazanie na temat usuwania dwukropków z funkcji strftime
źródło
CJam, 28
Wypróbuj online
Wyjaśnienie:
źródło
C # .NET,
180172171 bajtówZaoszczędź 8 bajtów dzięki Kritixi Lithos
Oszczędność 1 bajtu dzięki Kritixi Lithos, ponownie;)
Alternatywny wariant bez golfa:
źródło
NotChristmasException
Jest tylko w wariancie bez golfa.if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()
uwaga połączone if i usuwanie szelki wokółConsole.Write
i wymienićreturn
zelse
. Zmień takżevar d=DateTime.Now
, aby pozbyć się wyjątku rzucania, być możeargs[-1];
po zmianie nazwy argumentów naa
taka[-1];
(tak więc nie jest to identyczne z dzieleniem przez zera używane gdzie indziej)Mathematica, 46 bajtów
źródło
Now
oszczędza 2 bajty ponadToday
Quit[]
lub1/0
powinno wystarczyć.Common Lisp, 140
Awaria z niezdefiniowaną funkcją, jeśli data nie jest prawidłowa.
źródło
awk, 29 bajtów (+ długość („Wesołych świąt”))
Uruchamianie:
Sezonowe powitanie jest przekazywane
awk
.strftime
zwraca miesiąc + dzień (na przykład1226
) i jeśli pasuje,1225
$0
rekord jest generowany. Wynik porównania1225==1226
jest ustawiany nav
var, który służy do podzielenia 1, jeśli porównanie daty się nie powiedzie.źródło
Haskell, 116
Występuje awaria z „Niewyczerpującymi wzorami w funkcji f”, jeśli nie jest to Boże Narodzenie.
Niestety nie ma żadnej funkcji, która pozwala od razu uzyskać czas w przydatnym formacie, więc większość z nich to konwersja formatów daty.
źródło
C #,
122104 bajty18 bajtów zapisanych dzięki @raznagul
Dodaje 7 dni do bieżącego dnia i sprawdza, czy jest to pierwszy dzień roku, jeśli tak, wyświetla „Wesołych Świąt”, w przeciwnym razie dzieli przez zero.
źródło
return
nie jest konieczne. Użyji
zamiast()
.Rubinowy, 69 bajtów
Działa w 2016 r. Nie rozróżnia lat normalnych i przestępnych, może wymagać korekty w odniesieniu do lat innych niż przestępne.
źródło
ForceLang, 180 bajtów
(Pamiętaj, że
datetime.toDateString
jest to zależne od ustawień regionalnych, więc może nie działać w zależności od ustawień regionalnych)źródło
C #, 90 bajtów
Zgłasza wyjątek IndexOutOfRangeException, jeśli nie jest to Boże Narodzenie.
Wypróbuj tutaj!
źródło
wiersz poleceń bash,
454849 48 bajtówPodobne do Mitchella Spectora , ale używaj go
grep
w trybie cichym, aby sprawdzić dopasowanie, a następnie&&
upewni się, że drukuje tylko po sukcesie i||
powoduje, że sprawdza historię!-
, co daje mi to:I zatrzymuje wykonywanie, jak
!- ; echo foo
pokazuje.bash
Dokumentacja mówi, że!-n
odnosi się do bieżącego polecenia minusn
, więc być może jest on interpretowany jako!-0
, co daje komunikat o błędzie identyczne (i nie zlokalizowane).źródło
;
zamiast||
.