Bei Gregorianischen Kalendern variiert das Datumsformat von Land zu Land. Es werden drei Hauptformate erkannt:
YY-MM-DD
(Big-Endian)DD-MM-YY
(Little-Endian)MM-DD-YY
(Middle-Endian)
Ihre Aufgabe ist es, ein Programm zu schreiben, das bei einer Eingabezeichenfolge, die ein Datum darstellt, alle möglichen Datumsformate ausgibt, mit denen diese Zeichenfolge als Datum interpretiert werden kann.
Regeln
- Das Eingabedatum hat das Format
xx-xx-xx
, in dem jedes Feld zweistellig und mit Nullen aufgefüllt ist. - Das Datum ist immer gültig (so dass Sie Dinge wie 14-13-17 nicht bekommen können)
- Das Datum ist immer mindestens eines der oben genannten Formate (Sie können also keine Dinge wie 17-14-11 erhalten).
- Da wir uns tatsächlich in einer Parallelwelt befinden, gibt es 31 Tage für jeden Monat des Jahres und folglich keine Schaltjahre
- Das Datum liegt zwischen dem 01. Januar 2001 und dem 31. Dezember 2099
- Wenn es nur ein Format für das Datum gibt, darf der Code nur dieses drucken (nur nachgestellte Zeilenumbrüche sind zulässig).
- Wenn es für das Datum mehrere Formate gibt, müssen diese entweder durch ein Komma, ein Leerzeichen, eine neue Zeile oder eine Kombination davon getrennt werden
- Sie müssen die genauen Namen der Formate ausgeben. Die Verwendung unterschiedlicher beliebiger Werte ist nicht zulässig.
- Es sind keine führenden oder nachfolgenden Zeichen außer einem nachgestellten Leerzeichen zulässig
- Die Ausgabe muss in Kleinbuchstaben erfolgen
- Sie dürfen keine integrierten Datums- oder Kalenderfunktionen verwenden
- Die Ausgabeformate müssen nicht sortiert werden
Beispiele
Input Output
30-05-17 big-endian, little-endian
05-15-11 middle-endian
99-01-02 big-endian
12-11-31 big-endian, little-endian, middle-endian
02-31-33 middle-endian
Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes. Erklärungen sind erwünscht.
there are 31 days for every month of the year, and consequently no leap years
Das heißt also, dass jede Datumsbibliothek dafür effektiv nutzlos ist?Antworten:
05AB1E , 40 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
Python 2 , 123 Bytes
Probieren Sie es online aus!
Python 2 , weniger Parsing von Eingaben, 123 Bytes
Probieren Sie es online aus!
quelle
,
.JavaScript (ES6),
121119118112 ByteGibt eine durch Leerzeichen getrennte Zeichenfolge mit einem nachgestellten Leerzeichen zurück.
Wie?
Wir teilen die Eingabe in a , b und c auf . Da das Datum garantiert gültig ist, wissen wir mit Sicherheit, dass b kleiner als 32 ist. Daher reicht es aus, zu testen, ob a kleiner als 13 ist, um das Middle-Endian-Format zu validieren. Für Little-Endian- und Big-Endian-Formate muss b kleiner als 13 sein und ein weiterer Test für a bzw. c , um den Tag zu validieren.
Daher die 3 Tests:
Testfälle
Code-Snippet anzeigen
quelle
Bash,
240125116112 BytesGolf gespielt.
Danke an manatwork für ein paar Tipps
Es wurden 9 Bytes gespeichert, wodurch die Überprüfung für weniger als 32 in der folgenden Arnauld-Antwort im mittleren Endian entfernt wurde
4 Bytes wurden gespeichert, indem anstelle eines Arrays verschiedene Variablen verwendet wurden
Probier es aus!
quelle
C #, 180 Bytes
Ausgaben mit nur durch Leerzeichen getrennten Werten können auch führende und nachfolgende Leerzeichen enthalten. Wird bei Bedarf aktualisiert, wenn das OP dies geklärt hat.
Vollversion / Formatierte Version:
quelle
No leading or trailing characters others than a trailing space are allowed
PHP, 151 Bytes
Testfälle
quelle
Stapel, 138 Bytes
Vage basierend auf der Antwort von @ ovs.
quelle
Java 232 Bytes
Hier ist eine schönere Version
Ich wusste nicht wirklich, wie ich diesen Teil formatieren sollte ...
quelle
String e="-endian",b="big"+e,m="middle"+e,l="little"+e;
.PHP, 131 Bytes
quelle