Der Tag, an dem dieser Beitrag veröffentlicht wurde, war Heiligabend. Morgen ist Weihnachten. Gestern war Heiligabend. In zwei Tagen ist es soweit
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
.
Ihre Aufgabe ist es, das Datum, an dem das Programm ausgeführt wird, im Heiligabend-Format zu codieren.
- Wenn Ihr Programm an Weihnachten ausgeführt wird, sollte es die Zeichenfolge "Weihnachten" ausgeben.
- Wenn Ihr Programm nicht an Weihnachten ausgeführt wird, sollte die Zeichenfolge "Weihnachten" gefolgt von der Zeichenfolge "Eva" ausgegeben werden
n
, wobein
die Anzahl der Tage bis Weihnachten angegeben ist.- Beachten Sie, dass dies auf dem nächsten Weihnachtsfest basieren muss . Wenn der Tag beispielsweise der 26. April 2019 ist, müssen Sie Ihre Berechnung auf der Grundlage des 25. Dezember 2019 durchführen, nicht auf der Grundlage anderer Weihnachten.
- Denken Sie daran, Schalttage zu zählen.
- Weihnachten ist der 25. Dezember eines jeden Jahres.
Das ist Code-Golf , also gewinnt der kürzeste Code! Beachten Sie jedoch, dass das Ziel nicht darin besteht, das kürzeste Programm in einer beliebigen Sprache zu finden, sondern das kürzeste Programm in einer bestimmten Sprache. Wenn Sie beispielsweise das kürzeste C ++ - Programm finden, gewinnt es diesen Wettbewerb für C ++, auch wenn jemand in Python ein kürzeres Programm findet.
Antworten:
SmileBASIC,
737167 BytesDas Programm druckt "Weihnachten" und dann jedes Mal "Eva", wenn ein Tag vergeht, bis es der 25. Dezember ist. (25.12. = 0,48) Die
Ausführung kann bis zu einem Jahr dauern.
quelle
Excel-Formel, 59 Bytes
quelle
YEAR(TODAY()+6)
immer das richtige Jahr zurückgegeben, wodurch der Zustand vermieden wird.YEAR(NOW()+6)
funktioniert auch mit 2 weniger Bytes.NOW()
enthält die Zeit, also wird es keine ganze Zahl sein und ich bin mir nicht sicher, ob ichREPT
das zulassen würde.="Christmas"&REPT(" Eve",DATE(YEAR(DATE(2018,12,25)+6),12,26)-DATE(2018,12,25))
Perl 6 ,
6147 BytesSagen Sie 'Weihnachten' ~ 'Eva'x (Date.today ... ^ {. month == 12 &&. day == 25})Probieren Sie es online!
-14 Bytes (!) Dank Jo King
Date.today ...^ /12\-25/
ist die Abfolge der Daten, die heute beginnen und am Tag vor Weihnachten enden. (Der reguläre Ausdruck/12\-25/
wird mit der Zeichenfolgendarstellung der Datumsangaben abgeglichen.) Die Zeichenfolge" Eve"
wird so oft repliziert, wie sie der Länge dieser Sequenz entspricht, und nach der Zeichenfolge ausgegeben"Christmas"
.quelle
/12.25/
funktionieren12025-12-24
R ,
112 10672 ByteÜber @digEmAll und @ J.Doe
Probieren Sie es online!
Meine ursprüngliche Antwort war vor der Klarstellung, dass der Code das Datum haben soll, an dem der Code als Eingabe ausgeführt wird. Es könnte wie oben geändert werden, um viele Bytes zu sparen, aber ich werde mich nicht darum kümmern.
Probieren Sie es online!
Erklärung: Jeder ist in der Kirche, also habe ich Zeit dafür. Extrahieren Sie das Jahr, erzwingen Sie eine Ganzzahl. Machen Sie einen Vektor des diesjährigen Weihnachtsfestes und des nächsten Weihnachtsfestes und subtrahieren Sie das Eingabedatum, um einen Vektor mit zwei Differenzen zwischen dem Eingabedatum und diesen beiden Weihnachtsfesten zu erhalten.
Wählen Sie die nicht-negative und
cat
"Weihnachten" mit so vielen "Eves".quelle
y
einmal, sodass Sie es direkt für 108 Bytes verwenden können.z[z>=0][1]
funktionieren stattmin
?Windows PowerShell ,
676463 BytesProbieren Sie es online!
Es ist gelungen,
3 Bytes und4 Bytes (danke an Cows quack ) zu-f
reduzieren, indem der Operator ormat anstelle von verwendet.ToString()
wurde und anschließend die Datumszeichenfolge vom numerischen Wert 1225 subtrahiert wurde, anstatt einen Vergleich mit durchzuführen-ne
. Die resultierende Ganzzahl wird als ein Boolescher Wert für die Bedingung interpretiert, bei der0
(was an Weihnachten passieren wird) interpretiert wird alsFalse
(nicht in die Schleife eintreten), und jeder andere Wert wird interpretiert alsTrue
(in die Schleife eintreten).Da sich die Ganzzahl jetzt links befindet, wird die Datumszeichenfolge in die Ganzzahl konvertiert, und es wird eine Berechnung durchgeführt, im Gegensatz zu der vorherigen Version, in der die
1225
Ganzzahl für den Vergleich in eine Zeichenfolge konvertiert wurde.Originalfassung
Windows PowerShell , 67 Byte
Probieren Sie es online!
Verwenden einer
for
Schleife alswhile
Schleife im Grunde, weil es kürzer ist. In der Schleifenbedingung prüfen wir das aktuelle Datum (date
eine abgekürzte Form vonGet-Date
), das anForEach-Object
den Aliasnamen weitergeleitet wird%
, mithilfe des Formulars, mit dem eine Methode mit Platzhalternamen aufgerufen werden kann. In diesem Fall befindet sich die MethodeAddDays()
auf demDateTime
Objekt, und der Wert, den wir ihm geben, ist$i
.Dies wird
ForEach-Object
erneut weitergeleitet, um dieToString()
Methode mit der FormatzeichenfolgeMd
(Monat, dann Tag, minimale Ziffern, da es uns egal ist, was als Nächstes kommt) aufzurufen . Diese Zeichenfolge wird dann getestet, um festzustellen, ob sie nicht-ne
der Zahl entspricht1225
, die für den Vergleich in eine Zeichenfolge umgewandelt wird, wodurch die Anführungszeichen gespart werden.Aus diesem Grund spielt es keine Rolle, dass die Monate und Tage einstellig sind, es wird nie mehrdeutig sein, da es keinen anderen Tag im Jahr gibt, an dem dies zutreffen würde
1225
.Die Schleife wird fortgesetzt, bis die Zeichenfolge ist
1225
. Zu Beginn des Programms$i
wird Null sein, damit es das aktuelle Datum vergleicht, und die Schleife wird nie ausgeführt, aber für jeden anderen Tag$i
wird der Schleifenkörper inkrementiert, sodass wir zählen, wie viele Tage bis zum nächstes Weihnachten, wobei automatisch die Schaltjahre berücksichtigt werden und ob Weihnachten in diesem Jahr vergangen ist oder nicht.Nach der Schleife geben wir einfach die Zeichenfolge aus, die
Christmas
mit dem Ergebnis der Multiplikation der Zeichenfolge miteve
dem Wert von$i
(der am Weihnachtstag zu0
noeve
s führt) verknüpft ist.quelle
;
nach{$i++}
ist überflüssig? (Auch wow, Sie übernahmen die Führung über Bash wieder)C # (Visual C # Interactive Compiler) , 89 Byte
Probieren Sie es online!
-3 Bytes dank @JeppeStigNielsen!
Meine Strategie ist ziemlich einfach:
t
mit dem aktuellen DatumEve
wennt
nicht Weihnachten istt
und wiederholen SieIch habe einige schickere Dinge ausprobiert, aber auf diese Weise wurden die wenigsten Bytes benötigt.
quelle
t.Month<12|t.Day!=25
mit dem kürzeren ersetzen$"{t:Md}"!="1225"
. Es wird eine interpolierte Zeichenfolge und eine benutzerdefinierte DateTime-Formatierungszeichenfolge verwendet.T-SQL,
9288 BytesBearbeiten: 4 Bytes dank @BradC gespeichert.
quelle
PRINT'Christmas'+...
und 2 mehr mitDATEDIFF(D,
anstelle vonDATEDIFF(DAY,
APL (Dyalog Unicode) ,
7663 Bytes SBCSVolles Programm. Annahmen
⎕IO←0
(Null-Indizierung).Probieren Sie es online!
⎕CY'dfns'
c o p y in der dfns-bibliothek⎕TS
Strom t ime s Stampf als [Jahr, Monat, Tag, Stunde, Minute, Sekunde, ms]days
[c] die Anzahl der Tage finden [n] seit 1899.12.31 00: 00: 00.000(⍳366)
fügen Sie die ersten 366 Zahlen (0 … 365) zu finden, dassdate
[c] die Daten [n] , die diesen Zahlen entsprechen (366 × 7-Tabelle; eine Spalte pro Einheit)⍉
transponieren (7 × 366-Tabelle; eine Zeile pro Einheit)1↓
eine Zeile (die Jahre)2↑
dauern In den ersten beiden Zeilen (Monate und Tage) wird12 25⍳⍨
der Index des ersten Weihnachtsfestes4×
multipliziert und mit vier multipliziert,' Eve'⍴⍨
um die'Christmas ',
Zeichenliste umzugestalten[c] Code dieser Funktion
[n] Notizen für diese Funktion
quelle
Python 2 ,
111103 BytesProbieren Sie es online!
Update inspiriert von Richard Crossleys Antwort .
Erläuterung:
quelle
Ruby , 80 Bytes
Probieren Sie es online!
Danke an tsh für seine Idee
quelle
puts
durchp
: Try It Online-LinkPHP, 61 Bytes
Laufen Sie mit
-n
oder versuchen Sie es online .quelle
JavaScript,
1351311219288 BytesMeine erste (naive) Lösung ( 135b ):
Es werden 2 Daten festgelegt: Jetzt und Weihnachten dieses Jahres. Wenn letzteres noch nicht bestanden hat, unterscheidet es sie nur, wenn es bestanden hat, unterscheidet es sich von Weihnachten des nächsten Jahres. Verwendet entweder Unterschiede für die Anzahl der Wiederholungen.
(Der Versuch, über den Tellerrand hinauszudenken ) ( 131b ):
Die Herausforderung gibt an, WELCHE Ausgabe erforderlich ist, wenn das Programm an einem bestimmten Tag ausgeführt wird, gibt jedoch nicht an, WANN es zurückgegeben werden soll ...
Dies wird nur für einen Tag "schlafen", einen Zähler um 1 erhöhen und wiederholen, bis Weihnachten ist, um die Ausgabe zu geben.
Da JavaScript die Ruhezeit nicht garantiert, ist das tatsächliche Ergebnis möglicherweise nicht korrekt.
Es ist auch hässlich für die Verwendung der
alert
Funktion, was bedeutet, dass wir uns nicht nur mit reinem JavaScript, sondern auch mit Browser-APIs befassen (wir können esconsole.log
für 6 zusätzliche Bytes verwenden).Ein besserer Ansatz ( 121b ):
Erhöhen Sie ab heute das Datum um einen Tag, bis Weihnachten ansteht, und verwenden Sie dann den Zähler dieser Schleife für die Anzahl der erforderlichen Wiederholungen.
Verbessern (einschließlich Durchlaufen eines Minizers und Verwenden des 12Me21-Tricks zum Rasieren von zusätzlichen 5b) ( 92b ):
Letzte Berührung ( 88b ):
quelle
t.getMonth()/t.getDate-.48
überprüfen, ob das Datum nicht der 25. Dezember istprint
wird benötigt, da dies ein Programm ist, das keine Funktion ist, es sei denn, 1. Sie wandeln es in ein Lambda um oder 2. Sie geben an, dass Sie eine REPLt=new Date(+t+864e5)
ist 1 Byte kürzer.VBA (Excel), 108 Byte
Kopieren Sie in einem leeren Modul. Druckt in das Direktfenster:
Hinweis: Durch die Verwendung von
:
anstelle von Zeilenumbrüchen werden zwei Bytes pro Zeile gespart.Beachten Sie, dass der VBA-Editor nach der Unterdefinition zusätzliche Leerzeichen zwischen Schlüsselwörtern, Operatoren usw. und Klammern einfügt. Wenn Sie diesen Code kopieren und einfügen, funktioniert er jedoch (ich konnte diesen Leerzeichen vor dem nicht entfernen
&
).Nicht schlecht für VBA (einmal).
quelle
Christmas
: |&
now
. Wenn Sie das tun, sollte es?"Christmas";:For i=1To DateSerial(Year(Now+6),12,25)-Now:?" Eve";:Next
Bash + GNU Datum,
7273 Bytes!=
durch-
d=0
, weildate -dday
Datum + 1 ist und nicht auf 25/12 arbeitetProbieren Sie es online aus
quelle
=~
nicht in der for-Schleife bedingt?Python 2, 128 Bytes / Python 3, 130 Bytes
Natürlich zwei Bytes weniger mit Python 2
quelle
as D
von selbstBash ,
686561 BytesGolf 4 Bytes dank Nahuel Fouilleul durch
``
Befehlsersetzung undeval
anstelle von sede
undxargs
Probieren Sie es online!
Innerhalb der
``
Befehlsersetzung haben wireval
Führen Sie die folgende Zeichenfolge als Shell-Befehle ausdate\ -d{0..366}day\;
in geschweiften Klammern von{0..366}
ergibt dies die Zeichenfolgedate -d0day; date -d1day; date -d2day; ... date -d366day;
, wobei jeder Befehl in dieser Zeichenfolge das Datum zwischen 0 und 366 Tagen ab dem aktuellen Datum berechnet, was zur Ausgabe des FormatsWed Dec 26 18:22:33 UTC 2018
mit jeweils einer eigenen Zeile führt|sed
Rufen Sie die folgenden sed-Befehle auf/c.25/Q
Wenn der reguläre Ausdruck/c.25/
übereinstimmt, wird erQ
ohne Druck beendet\;cEve
Andernfalls ändern Sie die Zeile inEve
Alle benötigten
Eve
s werden jeweils in einer eigenen Linie produziert. Diese Ausgabe wird in erfasst``
und der Wortteilung unterzogen , wobei Wörter in Zeilenumbrüchen geteilt werden. Jedes Wort wird als Argument an gefüttertecho
.echo Christmas
...
Jedes Argument an
echo
wird durch Leerzeichen getrennt ausgegeben, was zur gewünschten Ausgabe führt.quelle
bash
Spezifisches an dieser Lösung. Es erfordert GNUdate
,sed
undseq
zwar.C (gcc) , 157 Bytes
Ich dachte, ich könnte das Einschließen vermeiden,
time.h
aber das gab nur Segmentfehler.Probieren Sie es online!
quelle
#include <stdlib.h>
es hier überhaupt nichts macht*t;f(u)
anstelle von*t,u;f()
und#import<time.h>
anstelle von#include <time.h>
und5[t=localtime(&u)]
anstelle vont=localtime(&u);t[5]
Groovy , 66 Bytes
Probieren Sie es online!
Mit freundlicher Genehmigung von @ ASCII-only
quelle
Chistmas
: /Python 3, 106 Bytes
quelle
Scala ,
116113 BytesProbieren Sie es online!
Wo
c 25
ist die Abkürzung fürDec 25
.quelle
contains("c 25")
anstelle vonmatches(".*c 25.*")
JavaScript,
8677 BytesMit REPL wäre es
Kudos zu nur ASCII für -9 Bytes
quelle
for(c='Christmas',d=new Date;!/c 25/.test(d=new Date(+d+864e5));)c+=' Eve';c
oder diese Variante:for(s='Christmas',t=Date.now();!/c 25/.test(new Date(t+=864e5));)s+=' Eve';s
beide sind 76 Bytes.Lua ,
137118 Bytes.118 Bytes
137 Bytes (früher)
Es ist erwähnenswert, dass es in LuaJIT nicht funktioniert (Syntaxfehler)
quelle
MySQL, 102 Bytes
ziemlich genau wie Neils T-SQL-Antwort . In SQL scheint es keinen kürzeren Weg zu geben.
Probieren Sie es online aus .
quelle
MATLAB, 91 Bytes
MATLAB Non-Looper, 100 Byte
quelle
Scala , 123 Bytes
Dank der Arbeit von ASCII-only.
Probieren Sie es online!
Scala + Joda-Time , 140 Bytes
Läuft nicht in TIO, da dafür eine Joda-Time-Bibliothek erforderlich ist.
quelle
java.util.Date
hier nicht zur Arbeit kommen: /object Main extends App{}
beim Zählen keine Zeichen gezählt (weil ich auch in meinen anderen Scala-Antworten nicht gezählt habe). Wenn wir das rausholen, schlägst du mich ^^withDate()
Anruf ist so teuer ...05AB1E ,
9389 BytesProbieren Sie es online aus oder Probieren Sie es online mit einem emulierten, selbst festgelegten Datum von "Heute" aus .
Erläuterung:
05AB1E verfügt über keine eingebauten Daten, außer für den Empfang des aktuellen Jahres / Monats / Tages / Stunden / Minuten / Sekunden / Mikrosekunden. Daher werden die meisten Bytes für manuelle Berechnungen verwendet.
Sehen Sie sich meine Antwort an, um zu verstehen, wie wir am nächsten Tag weitermachen. (PS:
1¾ǝ
wurde durch ersetztT`ǝ
, da wir das auchcounter_variable
woanders verwenden.)Sehen Sie sich meinen Tipp 05AB1E an (Abschnitte Verwendung des Wörterbuchs und Komprimieren großer Ganzzahlen ), um zu verstehen, warum dies so
'»ˆ
ist"eve"
.'ŒÎ
ist"christmas"
; undŽ9Ú
ist1225
.quelle
C # (Visual C # Interactive Compiler) , 141 Byte
Probieren Sie es online!
quelle
Rot ,
8986847876 Bytes-10 Bytes nur dank ASCII!
Probieren Sie es online!
quelle
now
und nicht nur zu verwendennow/date
. Vielen Dank für Ihre Verbesserungen!Perl 5 , 68 Bytes
Probieren Sie es online!
Wo
c 25
ist die Abkürzung fürDec 25
.quelle