Dzień opublikowania tego postu był wigilijny. Jutro będą święta. Wczoraj była wigilia Bożego Narodzenia. Będzie za dwa dni
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
.
Twoim zadaniem jest ustalenie daty uruchomienia programu i zakodowanie go w formacie wigilijnym.
- Jeśli twój program jest uruchomiony w Boże Narodzenie, powinien wypisać ciąg „Boże Narodzenie”.
- Jeśli twój program nie jest uruchamiany w Boże Narodzenie, powinien wypisać ciąg „Boże Narodzenie”, a następnie ciąg „Ewa” powtórzony
n
razy, gdzien
jest liczba dni do Bożego Narodzenia.- Pamiętaj, że musi to być oparte na następne Święta Bożego Narodzenia. Na przykład, jeśli dzień przypada na 26 kwietnia 2019 r., Musisz wykonać obliczenia na podstawie 25 grudnia 2019 r., A nie innych świąt Bożego Narodzenia.
- Pamiętaj, aby liczyć dni przestępne.
- Boże Narodzenie przypada na 25 grudnia każdego roku.
To jest golf golfowy , więc wygrywa najkrótszy kod! Pamiętaj jednak, że celem nie jest znalezienie najkrótszego programu w żadnym języku, ale znalezienie najkrótszego programu w każdym konkretnym języku. Na przykład, jeśli znajdziesz najkrótszy program w C ++, wygrywa on konkurs dla C ++, nawet jeśli ktoś znajdzie krótszy program w Pythonie.
Odpowiedzi:
SmileBASIC,
737167 bajtówProgram drukuje „Boże Narodzenie”, a następnie „Ewa” za każdym razem, gdy mija dzień, aż do 25 grudnia. (12/25 = 0,48)
Uruchomienie może potrwać nawet rok.
źródło
Formuła Excel, 59 bajtów
źródło
YEAR(TODAY()+6)
zawsze zwraca poprawny rok, unikając w ten sposób warunku.YEAR(NOW()+6)
działa również z 2 bajtami mniej.NOW()
obejmuje czas, więc nie będzie liczbą całkowitą i nie jestem pewienREPT
, czy na to pozwolę.="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
Perl 6 ,
6147 bajtówpowiedz „Christmas” ~ „Eve'x (Date.today ... ^ {. month == 12 &&. day == 25})Wypróbuj online!
-14 bajtów (!) Dzięki Jo King
Date.today ...^ /12\-25/
jest sekwencją dat rozpoczynających się dziś i kończących dzień przed Bożym Narodzeniem. (Wyrażenie regularne/12\-25/
jest porównywane z ciągiem reprezentującym daty.) Łańcuch" Eve"
jest replikowany kilka razy równy długości tej sekwencji i jest wyprowadzany po ciągu"Christmas"
.źródło
/12.25/
zadziała?12025-12-24
R ,
112 10672 bajtówVia @digEmAll i @ J.Doe
Wypróbuj online!
Moja pierwotna odpowiedź była wcześniejsza niż wyjaśnienie, że kod miał przyjmować datę uruchomienia kodu jako danych wejściowych. Można go zmodyfikować jak wyżej, aby zaoszczędzić wiele bajtów, ale nie będę się tym przejmować.
Wypróbuj online!
Wyjaśnienie: wszyscy są w kościele, więc mam na to czas. Wyodrębnij rok, wymusz na liczbę całkowitą. Zrób wektor świąt Bożego Narodzenia na rok i Boże Narodzenie na następny rok i odejmij datę wejściową, aby uzyskać wektor dwóch różnic między datą wejściową a tymi dwiema Xmasami.
Wybierz nieujemną i
cat
„Świąteczną” z tyloma „Evami”.źródło
y
raz, więc możesz użyć go bezpośrednio dla 108 bajtów.z[z>=0][1]
działałoby zamiastmin
?Windows PowerShell ,
676463 bajtówWypróbuj online!
Udało się ogolił
3 bajty4 bajty (dzięki Krowy quack ) za pomocą-f
operatora Ormat zamiast.ToString()
, a następnie odjęcie ciąg dat z wartością liczbową 1225 zamiast robić porównania z-ne
. Wynikowa liczba całkowita będzie interpretowana jako wartość logiczna dla warunku, w którym0
(co nastąpi w Boże Narodzenie) jest interpretowane jakoFalse
(nie wchodź w pętlę), a każda inna wartość jest interpretowana jakoTrue
(wchodź w pętlę).Ponieważ liczba całkowita znajduje się teraz po lewej stronie, ciąg daty zostanie przekonwertowany na liczbę całkowitą i matematyka zostanie wykonana, w przeciwieństwie do poprzedniej wersji, w której
1225
liczba całkowita została przekonwertowana na ciąg dla porównania.Orginalna wersja
Windows PowerShell , 67 bajtów
Wypróbuj online!
Używanie
for
pętli jakowhile
pętli w zasadzie, ponieważ jest krótsza. W stanie pętli sprawdzamy bieżącą datę (date
skróconą formęGet-Date
), przesyłaną potokowo doForEach-Object
aliasu%
, używając formularza, który może wywoływać metodę według nazwy wieloznacznej; w tym przypadku metoda jestAddDays()
naDateTime
obiekcie, a wartość, którą podajemy, to$i
.To jest przesyłane
ForEach-Object
ponownie do wywołaniaToString()
metody z ciągiem formatuMd
(miesiąc, następnie dzień, minimalna liczba cyfr, ponieważ nie dbamy o to, co będzie dalej). Ten ciąg jest następnie testowany, aby sprawdzić, czy nie jest równy-ne
liczbie1225
, która zostanie przekonwertowana na ciąg do porównania, co oszczędza mi cytatów.Dlatego nie ma znaczenia, że miesiące i dni są jednocyfrowe, nigdy nie będzie dwuznaczny, ponieważ nie ma innego dnia w roku, który by się do tego zobowiązał
1225
.Pętla trwa do momentu, gdy ciąg będzie
1225
. Na początku programu$i
wyniesie zero, więc będzie porównywał dzisiejszą datę, a pętla nigdy się nie wykona, ale dla każdego innego dnia$i
zostanie zwiększona w treści pętli, dzięki czemu będziemy mieli liczbę dni do następne Święta Bożego Narodzenia, automatycznie uwzględniające lata przestępne i czy Boże Narodzenie minęło w tym roku.Po pętli po prostu wyprowadzamy ciąg
Christmas
połączony z wynikiem pomnożenia ciągueve
razy razy wartość$i
(która w dzień Bożego Narodzenia będzie0
, nie powodując żadnycheve
s).źródło
;
po{$i++}
jest zbędny? (też wow, znówC # (interaktywny kompilator Visual C #) , 89 bajtów
Wypróbuj online!
-3 bajty dzięki @JeppeStigNielsen!
Moja strategia jest dość prosta:
t
do bieżącej datyEve
jeślit
nie są świętat
i powtórzPróbowałem bardziej wymyślnych rzeczy, ale w ten sposób wymagało najmniej bajtów.
źródło
t.Month<12|t.Day!=25
krótszym$"{t:Md}"!="1225"
. Wykorzystuje interpolowany ciąg i niestandardowy ciąg formatujący DateTime.T-SQL,
9288 bajtówEdycja: Zapisano 4 bajty dzięki @BradC.
źródło
PRINT'Christmas'+...
i 2 więcej, używającDATEDIFF(D,
zamiastDATEDIFF(DAY,
APL (Dyalog Unicode) ,
7663 bajtów SBCSPełny program Zakłada
⎕IO←0
(indeksowanie zera).Wypróbuj online!
⎕CY'dfns'
c o p y w bibliotece dfns⎕TS
Prąd t ime s ubijać w [rok, miesiąc, dzień, godzina, minuta, s, MS]days
[c] Produkt liczbę dni [N] od 31.12.1899 00: 00: 00.000(⍳366)
dodawania pierwszych 366 liczb całkowitych (0 … 365) do tegodate
[c] znajdź daty [n], które odpowiadają tym liczbom (tabela 366 × 7; jedna kolumna na jednostkę)⍉
transponuj (tabela 7 × 366; jeden wiersz na jednostkę)1↓
upuść jeden wiersz (lata)2↑
weź pierwsze dwa wiersze (miesiące i dni)12 25⍳⍨
znajdują indeks pierwszego Bożego Narodzenia4×
pomnożony przez cztery,' Eve'⍴⍨
które służą do przekształcenia listy znaków,'Christmas ',
dołączają ją do tego[c] kod tej funkcji
[n] uwagi na temat tej funkcji
źródło
Python 2 ,
111103 bajtówWypróbuj online!
Aktualizacja zainspirowana odpowiedzią Richarda Crossleya .
Wyjaśnienie:
źródło
Rubinowy , 80 bajtów
Wypróbuj online!
Dzięki tsh za jego pomysł
źródło
puts
zp
: Spróbuj połączyć go onlinePHP, 61 bajtów
Uruchom
-n
lub wypróbuj online .źródło
JavaScript,
1351311219288 bajtówMoje pierwsze (naiwne) rozwiązanie ( 135b ):
Ustawia 2 daty: teraz i Boże Narodzenie tego roku. Jeśli to drugie jeszcze nie minęło, to po prostu je różni, jeśli minęło, różni się od świąt Bożego Narodzenia w przyszłym roku. Używa albo różnic dla liczby powtórzeń.
(Próbuje) Think Outside the Box ( 131b ):
Wyzwanie określa, które dane wyjściowe są wymagane podczas uruchamiania programu w danym dniu, ale nie określa KIEDY, aby je zwrócić ...
Spowoduje to po prostu „przespanie” jednego dnia, zwiększenie licznika o 1 i powtarzanie do Xmas w celu uzyskania wyniku.
Ponieważ JavaScript nie gwarantuje czasu „uśpienia”, rzeczywisty wynik może być wyłączony.
Jest to również brzydkie z powodu korzystania z
alert
funkcji, co oznacza, że tak naprawdę nie mamy do czynienia z czystym JavaScriptem, ale także z interfejsami API przeglądarki (możemy użyćconsole.log
kosztem 6 dodatkowych bajtów).Lepsze podejście ( 121b ):
Począwszy od dzisiaj, zwiększaj datę o jeden dzień aż do Bożego Narodzenia, a następnie użyj licznika tej pętli dla wymaganej liczby powtórzeń.
Ulepszenie (w tym przejście przez minifikator i użycie sztuczki 12Me21, aby zgolić dodatkowe 5b) ( 92b ):
Ostatnie poprawki ( 88b ):
źródło
t.getMonth()/t.getDate-.48
aby sprawdzić, czy data nie jest 25 grudniaprint
jest potrzebny, ponieważ jest to program, a nie funkcja, chyba że 1. zmienisz go w lambda lub 2. oświadczysz, że używasz REPLt=new Date(+t+864e5)
jest o 1 bajt krótszy.VBA (Excel), 108 bajtów
Skopiuj w pustym module. Drukuje do okna Natychmiastowe:
Uwaga: Użycie
:
zamiast podziału linii oszczędza dwa bajty na linię.Zauważ, że edytor VBA wstawi dodatkowe spacje między słowami kluczowymi, operatorami itp. ... i nawiasami po definicji Sub, ale jeśli skopiujesz i wkleisz ten kod, to zadziała (nie mogłem pozbyć się tego miejsca przed
&
).Nieźle jak na VBA (choć raz).
źródło
Christmas
: |&
zgłoszeniem błędunow
. Kiedy to zrobisz, powinno to wyglądać?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
Data Bash + GNU,
7273 bajty!=
go-
d=0
, ponieważdate -dday
jest to data + 1 i nie działa 25/12Wypróbuj online
źródło
=~
nie działa w warunkowym for-loop?Python 2, 128 bajtów / Python 3, 130 bajtów
oczywiście dwa mniej bajtów w Pythonie 2
źródło
as D
samodzielnieBash ,
686561 bajtówGrał w golfa 4 bajty dzięki Nahuelowi Fouilleulowi , używając
``
zastępowania poleceń ieval
zamiast sede
ixargs
Wypróbuj online!
Wewnątrz
``
podstawienia polecenia mamyeval
uruchom następujący ciąg jako polecenia powłokidate\ -d{0..366}day\;
pod rozszerzalności usztywniającego z{0..366}
tego wynika, w ciągudate -d0day; date -d1day; date -d2day; ... date -d366day;
, każde polecenie tego łańcucha obliczania termin pomiędzy 0 i 366 dni od obecnej powodując wyjścia formatuWed Dec 26 18:22:33 UTC 2018
, przy czym każdy w swojej własnej linii|sed
po czym wywołaj następujące polecenia sed/c.25/Q
jeśli wyrażenie regularne/c.25/
jest dopasowane,Q
użyj bez drukowania\;cEve
w przeciwnym razie zmień linię naEve
Wszystkie wymagane liczby
Eve
s są produkowane na osobnych liniach. Wyjście to jest ujęte w``
, i podlega podziałowi na słowa , gdzie słowa są podzielone na nowej linii. Każde słowo jest podawane jako argument doecho
.echo Christmas
...
Każdy argument do
echo
jest drukowany przez oddzielenie spacjami, co daje pożądany wynik.źródło
bash
tym rozwiązaniu nie ma nic konkretnego. Wymaga to GNUdate
,sed
aseq
jednak.C (gcc) , 157 bajtów
Pomyślałem, że będę w stanie uniknąć włączenia,
time.h
ale to tylko spowodowało błędy segmentu.Wypróbuj online!
źródło
#include <stdlib.h>
, a nie jak to ma w ogóle nic tutaj*t;f(u)
zamiast*t,u;f()
i#import<time.h>
zamiast#include <time.h>
i5[t=localtime(&u)]
zamiastt=localtime(&u);t[5]
Groovy , 66 bajtów
Wypróbuj online!
Dzięki uprzejmości @ ASCII
źródło
Chistmas
: /Python 3, 106 bajtów
źródło
Scala ,
116113 bajtówWypróbuj online!
Gdzie
c 25
jest skrótDec 25
.źródło
contains("c 25")
zamiastmatches(".*c 25.*")
JavaScript,
8677 bajtówPrzy użyciu REPL byłoby to
Wyrazy uznania dla ASCII tylko dla -9 bajtów
źródło
for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c
lub ten wariant:for(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s
oba mają 76 bajtów.Lua ,
137118 bajtów.118 bajtów
137 bajtów (poprzedni)
Warto zauważyć, że nie działa w LuaJIT (błąd składniowy)
źródło
MySQL, 102 bajty
prawie tak samo jak odpowiedź T-SQL Neila . Wydaje się, że nie ma krótszej drogi w SQL.
Wypróbuj online .
źródło
MATLAB, 91 bajtów
MATLAB Non-looper, 100 bajtów
źródło
Scala , 123 bajty
Dzięki pracy ASCII-only.
Wypróbuj online!
Scala + czas Joda , 140 bajtów
Nie działa w TIO, ponieważ wymaga biblioteki Joda-Time.
źródło
java.util.Date
tutaj dostać się do pracy: /object Main extends App{}
liczyłem znaków w moim zliczaniu (ponieważ nie miałem też innych odpowiedzi Scali). Jeśli to wyciągniemy, pobijesz mnie ^^withDate()
Rozmowa jest tak drogie ...05AB1E ,
9389 bajtówWypróbuj online lub Wypróbuj online z emulowaną, podaną przez siebie datą „dzisiaj” .
Wyjaśnienie:
05AB1E nie ma żadnych wbudowanych dat, z wyjątkiem otrzymania bieżącego roku / miesiąca / dnia / godzin / minut / sekund / mikrosekund, więc większość bajtów jest wykorzystywana do obliczeń ręcznych.
Zobacz moją odpowiedź, aby zrozumieć, jak idziemy do następnego dnia. (PS:
1¾ǝ
został zastąpionyT`ǝ
, ponieważ używamy równieżcounter_variable
gdzie indziej.)Zobacz tę końcówkę 05AB1E kopalni (sekcje Jak korzystać ze słownika? I Jak skompresować dużych liczb całkowitych? ) , Aby zrozumieć, dlaczego
'»ˆ
jest"eve"
;'ŒÎ
jest"christmas"
; iŽ9Ú
jest1225
.źródło
C # (interaktywny kompilator Visual C #) , 141 bajtów
Wypróbuj online!
źródło
Czerwony ,
8986847876 bajtów-10 bajtów dzięki tylko ASCII!
Wypróbuj online!
źródło
now
i nienow/date
. Dziękujemy za twoje ulepszenia!Perl 5 , 68 bajtów
Wypróbuj online!
Gdzie
c 25
jest skrótDec 25
.źródło