Es ist Weihnachten, und hier ist eine Code-Golf-Herausforderung zum Feiern. Sie müssen ein Programm erstellen, um ein Geschenk auszudrucken. Insbesondere die Worte "Frohe Weihnachten". ABER es gibt einen Haken: Dieses Programm muss nur funktionieren, wenn es der 25. Dezember ist. Wenn der Code an einem anderen Tag ausgeführt wird, sollte das Programm abstürzen.
Das ist Code-Golf, also gewinnt die Antwort mit der geringsten Anzahl von Bytes.
Fröhliche Weihnachten!
Antworten:
Pyke, 21 Bytes
Probieren Sie es hier aus!
Oder 18 Bytes nicht konkurrenzfähig.
Genau das Gleiche mit Ausnahme dieses Abschnitts:
Probieren Sie es hier aus!
quelle
30 * (10+1)
= 330 nicht 325JavaScript,
555346 BytesHinweis: Dies wurde nur in Google Chrome getestet. Das Programm kann sich von Browser zu Browser (oder von Gerät zu Gerät) unterschiedlich verhalten.
2 Bytes gespart dank @ ConorO'Brien
7 Bytes gespart dank @ETHProductions
Beendet mit,
Uncaught ReferenceError: a is not defined
wenn das Datum nicht istDec 25
. Ich bin mir nicht sicher, ob dies als Absturz giltquelle
.slice(6,10)=="c 25"
?c
(Oct
kommt dem nahe, befriedigt aber immer noch nicht den regulären Ausdruck). Danke für den Tipp!Date()
ist vollständig implementierungsabhängig. Ich gehe zum Beispiel davon aus, dass es mit der Sprache und dem Standort der Maschine variiert.Python 3,
6663 BytesDank der Ideen von JavaScript / ES-Antworten hier habe ich es geschafft, einige Bytes zu komprimieren. Indizieren Sie ein Wörterbuch - nicht vorhandene Schlüssel lösen a aus
KeyError
. Der folgende Code funktioniert in der lokalen ZeitzoneDas Ausgabeformat für
ctime
ist nicht vom Gebietsschema abhängig - das Format lautet immer ~'Sun Dec 25 19:23:05 2016'
. Da die 3-Buchstaben-Abkürzung erst im Dezember endetc
, ist die Verwendung'c 25'in time.ctime()
hier sicher .Vorherige Version:
Dies funktioniert in der UTC-Zeitzone. Für die lokale Zeitzone werden
s/gm/local
3 weitere Bytes benötigt. Bei Python 2 könnenprint
für 65 Byte Klammern entfernt werden .Das Konstrukt wirft
KeyError
an anderen Daten:quelle
import time;print{'2512':'Merry Christmas'}[time.strftime("%d%m")]
Python 2 ändern und es als Python 2 bezeichnen, sind es immer noch 66 Bytes, und es stürzt mit einem KeyError an anderen Daten als dem 25. Dezember ab.1:3
, ich habe meinen Testcode versehentlich kopiertgmtime()
Idee für meine Antwort ausgeliehen habe.PHP,
3938 Bytes, nicht konkurrierend (stürzt nicht ab)oder
oder
quelle
date(Lz)%1001-358
? : D""
im ersten Code weglassen, wodurch Sie 2 Byte sparen. Wenn es keine verdammten Schaltjahre gäbe, könnten Sie 2 Byte mehr sparen, indem Siemd
durchz
und1225
durch die Nummer des Tages des Jahres vom 25. Dezember ersetzen .eval((date(md)^TQZZ).'"Merry Christmas";');
(43 Bytes)1
. Dies würde das Ergebnis der Berechnung ausgeben. und0104-1225
ist 1121.Python 2 ,
686765 Bytes-1 danke an @muddyfish
Vielen Dank an @AnttiHaapala für die Idee, die ein weiteres Paar gerettet hat.
Probieren Sie es online!
Löst einen IndexError aus, wenn nicht am 25. Dezember.
Nicht konkurrierende Version für 59 Bytes, da sie nur für Nicht-Schaltjahre funktioniert (verwendet den Tag des Jahres, der in diesem Jahr bei 360 liegt, jedoch bei 361 in Schaltjahren)
quelle
gmtime()
, ein paar zu rasieren. Ich muss zugeben, ich wünschte, ich könnte mit der Idee des Jahres mehr anfangen.R,
52 6158 BytesWenn das aktuelle Datum nicht der 25. Dezember ist, wird ein Fehler zurückgegeben, da kein drittes Argument übergeben wird
if
.Bearbeiten: Ein dummer Fehler wurde behoben
quelle
Mein erstes Mal hier ... Begonnen mit der besten Sprache überhaupt für diesen Job:
Java,
200188Bytes (danke an @Daniel Gray), 186 Bytes, die "ln" aus dem Druck entfernen.Probieren Sie es hier aus!
quelle
Calendar
für ändern*
und ein paar Bytes speichern. Sie könnten auch den Namen desargs
Parameters in der Hauptmethode verkürzen , denke ich ...MATL ,
3433 BytesDies funktioniert in der aktuellen Version (19.7.0) der Sprache. Um den Fehler zu verursachen, nutzt der folgende Code die Tatsache aus, dass der Logarithmus einer Zeichenfolge einen Fehler ergibt (dies kann sich in zukünftigen Versionen ändern).
Probieren Sie es online!
Erläuterung
quelle
QBIC , 48 Bytes
Erläuterung:
Dies setzt die amerikanische
MM-DD
Datumsnotation voraus . Dies wäre kürzer, wenn ich endlich eine Substring-Funktion in QBIC erstellen würde.quelle
05AB1E ,
3221 BytesDank der String-Komprimierung von Adnan wurden 11 Bytes eingespart :).
Erläuterung
Probieren Sie es online!
Ich habe zuerst das gemacht, was mir in den Sinn gekommen ist, damit es vielleicht bessere Ansätze für diesen gibt. Aber PPCG verdient auch in 05AB1E ein frohes Weihnachtsfest;).
quelle
x
ist kurz für duplizieren und verdoppeln :).C # / CS-Skript
10610099 Bytes99-Byte-Lösung
Probieren Sie es hier aus!
100-Byte-Lösung (bevorzugen Sie diese ... ein bisschen anders)
Erklärt:
DateTime.Now.AddDays(7).DayOfYear==1
ist ein Byte kürzer als,DateTime.Now.ToString("ddMM")=="2512"
aber 1 Byte länger alsDateTime.Now.ToString("dM")=="2512"
quelle
$"{DateTime.Now:dM}"=="2512"
.dM
ist nicht eindeutig, aber nicht für "2512".$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":1/1-1+""
55 Bytes) =)int i
und nicht gerecht1/0
?$"{DateTime.Now:dM}"=="2512"?"Merry Christmas":"".Remove(1)
(59 Bytes)C # / CS-Skript, 96 Bytes, größtenteils aus Erresen plagiiert
Löscht die
int i
Deklaration zugunsten einer festen Kodierung der Division. Ich würde dies als Kommentar hinterlassen, habe aber nicht den Ruf.quelle
Bash + Unix-Dienstprogramme,
514947 Bytes* Dank an @ KenY-N für den Hinweis, dass die Anführungszeichen im Echo entfernt werden können, und an @IporSircer für die Reduzierung der Bedingungsgröße um 2 Byte.
quelle
bash: ${}: bad substitution
Fehler. Sie können auch die Anführungszeichen von Merry Christmas löschen , um zwei Bytes zu sparen. Außerdem[ `date +%m%d` = 1225 ]&&echo Merry Christmas
funktioniert bei mir das, was meinen 45 Bytes entspricht .${}
mit!-
mir zu schlagen , indem ein Byte. Ich stimme dir zu, wenn du gewinnst.Groovy, 57 Bytes
Abstürze an anderen Daten als dem 25.12. mit
groovy.lang.MissingPropertyException
weilb
ist nicht definiert.quelle
Gestapelt , 42 Bytes
Probieren Sie es hier aus!
Dies erzeugt ein Einzelelement-Array, das nämlich enthält
'Merry Christmas!'
. Danach wird das Datum in eine Zeichenfolge mit dem Monat gefolgt vom Tag eingefügt. Es prüft auf Gleichheit mit'1225'
(Weihnachten), kehrt es mit um¬
und holt dann das Mitglied aus dem vorhergehenden Array. Wenn es nicht Weihnachten ist, wird dies mit einem Indexfehler fehlschlagen. Andernfalls wird gedrucktMerry Christmas
. (Ändern Sie das Datum in der Zeichenfolge, um zu sehen, wie es an anderen Tagen funktioniert.)quelle
Batch, 66 Bytes
Die nachfolgende Newline ist signifikant, da das Parsen der
if
Anweisung fehlschlägt. Möglicherweise müssen Sie die Datumsprüfung an Ihr lokales Datumsformat anpassen.quelle
Python 2,
69 7775 oder7270 BytesWenn es keine Rolle spielt, wenn es zu Weihnachten mit einem Fehler beendet wird, dann:
BEARBEITEN:
Vielen Dank an @ Flp.Tkc für den Hinweis, dass ich einen Fehler auslösen musste
-2 Bytes von @Max für Hinweise zum Entfernen von Doppelpunkten aus der strftime-Funktion
quelle
CJam, 28
Probieren Sie es online aus
Erläuterung:
quelle
C # .NET,
180172171 Bytes8 Bytes gespart dank Kritixi Lithos
Dank Kritixi Lithos wieder 1 Byte gespart;)
Alternative, ungolfed Variante:
quelle
NotChristmasException
gibt es nur in der ungolfed Variante.if(d.Day==25&&d.Month>11)Console.Write(...);else throw new Exception()
Anmerkung kombiniert, wenn Anweisungen und Entfernen von Klammern um dieConsole.Write
und ersetzenreturn
durchelse
. Auch ändernvar d=DateTime.Now
Sie können die Ausnahme werfen mit vielleichtargs[-1];
nach dem Umbenennen von Argumenten aufa
so loswerdena[-1];
(dies ist so nicht identisch mit Division durch Nullen an anderer Stelle verwendet)Mathematica, 46 Bytes
quelle
Now
spart 2 Bytes mehr alsToday
Quit[]
oder1/0
sollte ausreichen.Common Lisp, 140
Abstürze mit undefinierter Funktion, wenn das Datum nicht stimmt.
quelle
awk, 29 bytes (+ length ("Frohe Weihnachten"))
Laufen es:
Die Begrüßung der Saison wird an weitergeleitet
awk
. Gibtstrftime
beispielsweise Monat + Tag zurück1226
und wenn es übereinstimmt, wird der1225
$0
Datensatz ausgegeben. Das Vergleichsergebnis1225==1226
wird inv
var abgelegt, das zum Teilen von 1 verwendet wird, wenn der Datumsvergleich fehlschlägt.quelle
Haskell, 116
Abstürze mit "Nicht erschöpfenden Mustern in Funktion f", wenn es nicht Weihnachten ist.
Leider gibt es keine Funktion, mit der Sie die Uhrzeit sofort in einem nützlichen Format anzeigen können. Daher werden die Datumsformate größtenteils konvertiert.
quelle
C #,
122104 Bytes18 Bytes gespart, dank @raznagul
Es addiert 7 Tage zum aktuellen Tag und prüft, ob es der erste Tag des Jahres ist. Wenn ja, zeigt es "Frohe Weihnachten" an, andernfalls dividiert es durch Null.
quelle
return
ist nicht nötig. Verwenden Siei
anstelle von()
.Ruby, 69 Bytes
Funktioniert in 2016. Unterscheidet nicht zwischen normalen und Schaltjahren, muss möglicherweise für Nicht-Schaltjahre angepasst werden.
quelle
ForceLang, 180 Byte
(Erinnere dich daran
datetime.toDateString
Gebietsschema abhängig ist, sodass dies je nach Gebietsschema möglicherweise nicht funktioniert.)quelle
C #, 90 Bytes
Löst eine IndexOutOfRangeException aus, wenn nicht Weihnachten ist.
Probieren Sie es hier aus!
quelle
Bash-Befehlszeile,
454849 48 BytesÄhnlich wie Mitchell Spector , aber die Verwendung
grep
im Silent - Modus für ein Spiel zu überprüfen, dann&&
wird dafür sorgen , dass es druckt nur auf den Erfolg und die||
Ursachen es Geschichte mit zu sehen!-
, was das gibt mir:Und es stoppt die Ausführung, wie
!- ; echo foo
gezeigt wird. In derbash
Dokumentation heißt es, dass!-n
der aktuelle Befehl minus angegebenn
wird. Daher wird er möglicherweise so interpretiert!-0
, dass eine identische (und nicht lokalisierte) Fehlermeldung angezeigt wird.quelle
;
anstelle von verwenden kann||
.