Wenn ein Datum in einem der folgenden Formate geschrieben ist (muss alle im selben Programm verarbeiten), analysieren Sie es in ein gültiges yyyy/mm/dd date
.
17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015
Regeln
- Daten sind manchmal ungültig, dh. Falscher Tag für den Monat oder die Anzahl der Monate in einem Jahr, müssen Sie beide Fälle behandeln. Entweder indem Sie einen Fehler machen oder einen konsistenten Falsey-Wert zurückgeben, wählen Sie. (Sie bleiben jedoch bei den obigen Vorlagenformaten)
- Für eine zweistellige Ausgabe muss eine Auffüllung für Tage und Monate unter 10 verwendet werden.
- Monatsnamen sind immer der vollständige Name und werden nicht auf die drei Zeichen gekürzt.
- Sie können davon ausgehen, dass das Jahr immer im Bereich von 0000-9999 liegt.
- Negative Zahlen müssen nicht behandelt werden.
- Sie können ein vollständiges Programm oder eine vollständige Funktion erstellen, sodass die Ausgabe in einem beliebigen Format erfolgen, auf die Konsole gedruckt oder von einer Funktion zurückgegeben werden kann.
- Die Eingabe ist immer eine Zeichenfolge, die Ausgabe muss immer eine Zeichenfolge sein, wenn es kürzer wird, sie als einzelnes Argument in einem Array zu verwenden, z.
["17th May 2012"]
Sie können dies tun und die Ausgabe kann dieselbe sein["2012/05/17"]
- Sie können davon ausgehen, dass die Schreibweise in der Eingabe korrekt ist.
BONUS: weil wer hier keine Herausforderung mag;)
Wenn Sie es schaffen, auch die Eingabeformate von zuzulassen, The Fourteenth of March, 2016
oder March the Fourteenth, 2016
wenn Sie Ihrem Code zusätzliche 20 Bytes entziehen, wobei die Anzahl der endgültigen Bytes weniger als 1 beträgt, was zu 1 führt.
Hier finden Sie die vollständigen Zahlen für jeden Tag, um Verwechslungen bei der Rechtschreibung zu vermeiden.
First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Nineth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, Fifteenth, Sixteenth, Seventeenth, Eighteenth, Nineteenth, Twentieth, Twenty First, Twenty Second, Twenty Third, Twenty Fourth, Twenty Fifth, Twenty Sixth, Twenty Seventh, Twenty Eighth, Twenty Nineth, Thirtieth, Thirty First
Testfälle
INPUT | Output
17th May 2012 | 2012/05/17
March 14th, 2016 | 2016/03/14
20 February 2014 | 2014/02/20
September 14, 2017 | 2017/09/14
Sunday, June 8, 2015 | 2015/06/08
1st January 1918 | 1918/01/01
The Fourteenth of March, 2016 | 2016/03/14
March the Fourteenth, 2016 | 2016/03/14
November the Seventeenth, 2019 | 2019/11/17
The Thirtieth of April, 2016 | 2016/04/30
30 February 2014 | Invalid
September 99, 2017 | Invalid
Sunday, June8, 2015 | Invalid
The Thirty First of April, 2016 | Invalid
20 February 2014
sind Standard in vielen datum Parser unterstützt, aber17th
undSunday, June 8, 2015
sind ein bisschen schwieriger zu analysieren (abhängig von der Sprache).Thursday, August 25, 2017
gültig? Ich sehe Einsendungen, die den DOW ignorieren.Antworten:
Schienen,
41,3735 BytesIch kenne keinen Online-Interpreter für Rails, aber hier ist ein Screenshot, der diesen Prozess demonstriert
quelle
PowerShell ,
91899156 ByteProbieren Sie es online aus!
Nimmt die Eingabe als Zeichenfolge auf. Verwendet a
-replace
, um Junk zu entfernen , und verwendet dann den integriertenGet-Date
Befehl mit dem-f
ormat-Flag, um das erforderlicheyyyy/MM/dd
Format anzugeben . Diese Zeichenfolge verbleibt in der Pipeline und die Ausgabe ist implizit.Dank Mr Xcoder wurden zwei Bytes gespeichert. Dank des Regex-Golfspiels von TessellatingHeckler wurde ein großer Teil gespart.
quelle
''
für -2 aus dem Datumsformat entfernen . Wenn Sie an Ihrem Ansatz festhalten möchten, können Sie ihn ersetzen, da die Rechtschreibung korrekt ist.'th|rd|st|(\b.*)day|,'
Er fällt auf 56 Byte ab und behandelt dieselben Fälle. Obwohl ich denke, dass es falsch ist, denn wenn Sie die Tage fallen lassen, können Sie denSunday, June8, 2015 | Invalid
Fall nicht abholen, weil es Montag war. Es sollte ein Fehler sein, aber es wird als gültig analysiert. Ich bin mir nicht sicher, wie das Urteil darüber aussehen wird oder ob andere es überprüfen.PHP,
73164 + 1 BytesLaufen Sie als Pipe mit
-nR
oder probieren Sie es online aus .Die Datumsüberprüfung war sehr teuer: Ich musste das Datum zerlegen, bevor ich eine integrierte Funktion verwendete, und dann versuchen, den Monatsnamen zu überprüfen.
quelle
30 February 2014
kehrt zurück2014/03/02
. Entweder indem Sie einen Fehler machen oder einen konsistenten Falsey-Wert zurückgeben, wählen Sie. (Sie werden sich jedoch an die obigen Vorlagenformate halten)Python 3 + parsedatetime Bibliothek,
152139155153 BytesDank Jonathan Allan wurden 13 Bytes gespeichert
16 Bytes hinzugefügt, um Daten mit ungültigen Tagen zu verarbeiten
2 Bytes durch Entfernen der Lambda-Zuweisung gespeichert
Probieren Sie es online aus!
Unterstützt keine Bonusdaten
quelle
None
;import ...as
;; & alambda
durch Wiederverwendungparse
alsh
.Python 2 , 193 Bytes
Probieren Sie es online aus!
; -; pls halp
quelle
time
.f=
aus derre.sub
Java (OpenJDK 8) , 190 + 26 = 216 Bytes
Probieren Sie es online aus!
Wichtiger Hinweis: Es war kürzer , auch den Wochentag zu validieren, anstatt ihn fallen zu lassen, sodass die Validierung eingeschlossen ist!
Ich habe es nicht mit
SimpleDateFormat
den offensichtlichen Fällen versucht, bei denen alle Daten wie der 30. Februar akzeptiert wurden. Also musste ich es fallen lassen und habe Java 8's verwendetDateTimeFormatter
.Erläuterung
Dieses Format bedeutet:
[EEEE, ]
(geschieht inSunday, ...
),[d ]
,MMMM
und Leerzeichen,[d, ]
,uuuu
, um den Parser wissen zu lassen, dass wir uns in der Gregorianischen Ära befinden.Code:
Credits
quelle
replaceAll
Muster?JavaScript (ES6),
124122 Bytequelle
2015/06/07
fürJune 8, 2015
(UTC-Problem? Ich bin in UTC + 2) undfalse
für entwederSunday, June 8, 2015
oderMonday, June 8, 2015
.nday
.