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!