Schreiben Sie eine Funktion oder ein Programm, das ein Datum (als Zeichenfolge im YYYY-MM-DD
Format) als Eingabe akzeptiert und einen Wahrheitswert zurückgibt, wenn dieses Datum "alphabetisch" ist, und einen False-Wert, wenn dies nicht der Fall ist.
Ein alphabetisches Datum ist ein Datum, dessen Monat, Tag und Jahr in alphabetischer Reihenfolge angegeben sind, wenn es als Zeichenfolge ausgedrückt wird (und wenn es speziell in der Reihenfolge M - D - Y betrachtet wird). Der 26. September 2018 ist beispielsweise ein alphabetisches Datum:
September 26th 2018 -> September twenty-sixth two thousand eighteen
September
Twenty-sixth
Two thousand eighteen
Eine andere Art, sich diese Herausforderung vorzustellen: "Sind die Elemente eines bestimmten Datums lexikalisch sortiert?"
Anmerkungen:
- 2018 wird als "zweitausendachtzehn" dargestellt, nicht als "achtundzwanzig achtzehn" oder "zwei null eins acht". Für ein anderes Beispiel würde das Jahr 1456 als "eintausendvierhundertsechsundfünfzig" dargestellt, nicht als "vierzehn sechsundfünfzig".
- 26. wird als "sechsundzwanzig" dargestellt, nicht als "sechsundzwanzig".
- Jedes Element des Datums wird als Ganzes betrachtet. Aus diesem Grund schlägt 2018 nicht automatisch fehl, obwohl das "e" in achtzehn vor dem "t" in zwei steht.
Die folgenden Daten sind nicht alphabetisch:
- 2. September 2018 ("zweite" sollte vor "September" sortieren)
- 30. April 4000 ("viertausend" sollten vor "dreißigsten" sortieren)
Zusätzliche Regeln:
- Sie erhalten das Datum als Zeichenfolge, formatiert wie
YYYY-MM-DD
. Das Jahr hat immer vier Ziffern und der Monat und der Tag haben immer jeweils zwei Ziffern. Das Auffüllen mit Nullen wird in der Zeichenfolgenkonvertierung nicht dargestellt (z. B. "2000-01-01" ist erwartungsgemäß "1. Januar zweitausend"). - Sie können davon ausgehen, dass die Daten immer gültig sind (kein 30. Februar, kein Smarch 1.) und dass der Wert des Jahres positiv ist (keine Daten vor Christus), aber das Datum kann weit in der Zukunft liegen ("im Jahr
zwei,neun tausend..."). - Sie sollten einen wahrheitsgemäßen oder falschen Wert zurückgeben, nicht unbedingt einen booleschen
True
oderFalse
. Wenn Sie dies in Javascript tun und zurückkehren wollen'0'
und0
das ist in Ordnung. Wenn Sie einen Booleschen Wert zurückgeben möchten , können Sie sich natürlich frei fühlen. - Standardlücken sind verboten.
- Das ist
code-golf
Weitere Beispiele für alphabetische Daten
- 2066-01-02 (2. Januar, zweitausendsechsundsechzig)
- 1000-04-08 (8. April, eintausend)
- 6000-08-01 (erster August, sechstausend)
Weitere Beispiele für nicht alphabetische Daten
- 1066-01-02 (2. Januar, eintausendsechsundsechzig)
- 1000-04-07 (7. April, eintausend)
- 8000-08-01 (erster August, achttausend)
Antworten:
05AB1E ,
666258 BytesProbieren Sie es online aus oder überprüfen Sie alle in der Herausforderung genannten Beispiele .
Erläuterung:
Sehen Sie diese 05AB1E Spitze Mine (Abschnitt Wie Kompresse integer Listen? ) Zu verstehen , warum
•88ΛηΣλšëÇñ0é≠>sîä&ζp°Lć®-αÅ®`•21в
ist[7,3,7,0,7,7,7,0,13,10,10,0,4,12,17,6,4,17,15,2,9,17,2,19,17,6,4,17,15,2,9,19,19,19,19,19,19,19,19,19,19,17,17,11,20,18,5,5,16,14,1,8]
undŽqT32в
ist[12,31,9]
.Zusätzliche allgemeine Erklärung:
Die Sortierfunktion sortiert werden alle drei Typen (Tag, Monat, Jahr) zur gleichen Zeit, wo wir ein truthy Wert zurückgeben wird nur , wenn
M < D < Y
(wo dieseD
,M
undY
sind die Werte , die wir aus den komprimierten Listen abgerufen haben).Warum diese drei oben genannten Listen? Wenn wir alle Wörter nach Typ kategorisieren, haben wir die folgende Reihenfolge:
Wenn wir dann jeden Typ einzeln und seine ursprüngliche Reihenfolge betrachten (eintausend, zweitausend usw. für Jahre; Januar, Februar usw. für Monate und erste, zweite usw. für Tage), sind die oben genannten Sortiernummern in diesen Bestellungen:
quelle
JavaScript (ES6), 101 Byte
4 Bytes dank @Shaggy gespeichert
Gibt oder .0 1
Probieren Sie es online aus! oder Teste alle Daten! (enthält einige ungültige Eingaben)
Wie?
Jeder Monat, jeder Tag und jedes Jahr wird gemäß der folgenden Tabelle einer ID in ( , bzw. ) zugeordnet. Wir testen dann, ob wir und .[0..10] M D Y M<D D<Y
Der letzte Teil der Lookup - Zeichenfolge für Tag - IDs unter Verwendung von leicht komprimiert
${6e12-12}
, was erweitert5999999999988
(19 th bis 31 st ).quelle
m=
war natürlich völlig nutzlos. Vielen Dank. :)