Es ist Dezember 2014 und 2015 hat fast begonnen. Es scheint jedoch, dass nicht jeder dies erkannt hat.
Aber die Leute von PPCG kommen zur Rettung!
Eingang
Ihr Programm erhält ein Raster wie das an der Wand, wobei die Tage im Monat Dezember anders aussehen als im November und Januar. Jede Woche beginnt mit Sonntag und endet mit Samstag.
Tage innerhalb eines Monats werden durch a dargestellt #
. Tage, die außerhalb des Monats liegen, werden durch ein (Leerzeichen, ASCII-Code 32) dargestellt. Jede Woche steht in einer separaten Zeile. Zeilen werden durch ein Zeilenumbruchzeichen (
\n
) getrennt. Ihr Programm erfordert möglicherweise entweder die Inbetriebnahme oder die Aufnahme einer neuen Zeile am Ende der Eingabe.
Dies ist beispielsweise die Eingabe für Dezember 2009:
#####
#######
#######
#######
#####
Der Kalender ist immer der Monat Dezember.
Aufgabe
Bei der Eingabe müssen Sie das mit dem Kalender verknüpfte Jahr finden. Da es mehrere Jahre gibt, für die ein Kalender übereinstimmt, müssen Sie das Jahr (vor 2015) zurückgeben, das dem Jahr 2015 am nächsten kommt. (Ausgenommen 2015 selbst.)
Ihr Programm muss für jedes Jahr <2015 die richtige Ausgabe liefern, mit Ausnahme derjenigen, deren Kalenderlayout für Dezember dem eines anderen Jahres (vor 2015) entspricht, das näher an 2015 liegt.
Wenn das Jahr <2014 ist, müssen Sie auch die Differenz des Jahres bis 2014 berechnen. Für 2012 beträgt die Differenz beispielsweise 2
.
Ausgabe
Die Ausgabe Ihres Programms muss sein:
- Der Text:
Your calendar is for <year>.
(Hinweis: Da dies ursprünglich als „Kalender“ geschrieben wurde, akzeptiere ich diese Schreibweise auch.) - Gefolgt von einem Zeilenumbruch (
\n
oder\r\n
). - Gefolgt vom Text:
It's almost 2015.
- Wenn das Jahr <2014 ist, muss der folgende Text folgen:
You're <difference> years behind.
Dies muss in einer separaten Zeile stehen. - Gefolgt von einem Zeilenumbruch (
\n
oder\r\n
). - Gefolgt vom Text:
Go buy a new calendar!
- Optional gefolgt von einem Zeilenumbruch (
\n
oder\r\n
).
Regeln
- Sie können wählen, ob Sie den Kalender als Befehlszeilenargument (z. B.
yourprogram.exe <calendar>
) oder als Eingabeaufforderung für den Benutzer erhalten möchten . - Sie können davon ausgehen, dass Ihr Programm keine ungültigen Eingaben erhält. Eine ungültige Eingabe enthält ein Kalenderlayout, für das kein Jahr vorhanden ist.
- Der kürzeste Code (in Bytes, in jeder Sprache) gewinnt.
Alle nicht standardmäßigen Befehlszeilenargumente (Argumente, die normalerweise nicht zum Ausführen eines Skripts erforderlich sind) werden auf die Gesamtzeichenanzahl angerechnet.
Was Ihr Programm nicht tun darf :
- Abhängig von externen Ressourcen.
- Abhängig von einem bestimmten Dateinamen.
- Geben Sie etwas anderes als die erforderliche Ausgabe aus.
- Die Ausführung dauert außergewöhnlich lange. Wenn Ihr Programm auf dem Computer eines durchschnittlichen Heimanwenders länger als eine Minute läuft, ist es ungültig.
- Ihr Programm darf nicht in einer Programmiersprache geschrieben sein, für die es keinen öffentlich verfügbaren Compiler / Interpreter gab, bevor diese Herausforderung veröffentlicht wurde.
Beispiele
Eingang:
#####
#######
#######
#######
#####
Ausgabe:
Your calendar is for 2009.
It's almost 2015.
You're 5 years behind.
Go buy a new calendar!
Eingang:
######
#######
#######
#######
####
Ausgabe:
Your calendar is for 2014.
It's almost 2015.
Go buy a new calendar!
Eingang:
#
#######
#######
#######
#######
##
Ausgabe:
Your calendar is for 2012.
It's almost 2015.
You're 2 years behind.
Go buy a new calendar!
quelle
Antworten:
CJam, 126 Bytes
quelle
Python 3, 178 Bytes
Eine einfache Nachschlagetabelle basierend auf dem Speicherort der ersten
#
.Erweitert:
quelle
Perl - 187
quelle
Perl 5: 137
143Bisheriger Ansatz:
Kalender bei Standardeingabe (natürlich ist nur die erste Zeile von Bedeutung)
quelle
C # 235
minimiert:
Ungolfed
Nun, die Sprache ist ausführlich :)
quelle
Program
zuP
. Das sollte Ihnen einige Zeichen ersparen :)y
Berechnungsweise ändern . Wenn Sie eine Zeichenfolge indizieren, können Sie die zur Beschreibung des Arrays erforderliche Syntax speichern (dhvar y = "1054382"[index]-48
(0
ist ASCII 48)).y
kann auch in diez
Berechnung einbezogen werden , um weitere Einsparungen zu erzielen .C #,
384,363,325 BytesC # Time, bitte sag mir, ob ich eine der Regeln usw. verpasst habe.
Eingang
Ausgabe
Eingabe 2
Ausgabe 2
Bearbeiten: Aktualisiert, einige Bytes konnten entfernt werden
quelle
Java, 243 Bytes
Es ist eine ausführliche Sprache :-)
Nicht minimiert
quelle
JavaScript (ES6),
199170 ByteIch bin es noch nicht gewohnt, ES6 zu schreiben, daher wären Tipps willkommen:
Nachschlagetabelle, 170 Bytes
Original, 199 Bytes
Nicht minimiert
JavaScript (ES5),
212182 ByteIch habe auch meine Originalversion unten aufgenommen
Sucharray, 182 Bytes
Nicht minimiert
Original, 212 Bytes
Nicht minimiert
quelle
CoffeeScript,
211177 BytesÄhnlich wie meine PHP-Antwort, aber CoffeeScript hat weder
do-while
Schleifen noch einen kurzen ternären Operator:Nicht minimiert
Verkürzt durch Verwendung einer Nachschlagetabelle:
quelle
PHP,
215181 BytesNachschlagetabelle, 181 Bytes
Funktioniert aufgrund der kurzen Array-Syntax nur unter PHP 5.4+:
Nicht minimiert
Original, 215 Bytes
Funktioniert mit den meisten (wenn nicht allen) Versionen von PHP 5:
Nicht minimiert
quelle
Ruby, 174
quelle
PHP, 145 Bytes
zwei Zeilenumbrüche hinter dem schließenden Tag, da PHP den ersten ignoriert
Nimmt Eingaben vom Befehlszeilenargument entgegen.
erfordert PHP 5.6 (veröffentlicht am 18. Dezember 2014) oder höher zum Indizieren des String-Literal.
quelle
SmileBASIC, 159 Bytes
quelle
C # (Visual C # Interactive Compiler) ,
178175172 ByteProbieren Sie es online aus!
quelle