Étant donné une date écrite dans l'un (doit gérer tous dans le même programme) des formats suivants, l'analyser en un valide yyyy/mm/dd date
.
17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015
Règles
- Les dates seront parfois invalides, c.-à-d. jour incorrect pour le mois ou le nombre de mois dans une année, vous devez gérer les deux cas. Soit en faisant une erreur soit en renvoyant une valeur de falsey cohérente, vous choisissez. (Ils s'en tiendront toutefois aux formats de modèles ci-dessus)
- Un remplissage pour les jours et les mois de moins de 10 doit être utilisé pour créer une sortie à deux chiffres.
- Les noms de mois seront toujours le nom complet, pas raccourcis à leurs homologues à trois caractères.
- Vous pouvez supposer que l'année sera toujours comprise dans la plage 0000-9999.
- Les nombres négatifs ne doivent pas être traités.
- Vous pouvez créer un programme ou une fonction complète afin que la sortie puisse être dans n'importe quel format, imprimée sur la console ou renvoyée par une fonction.
- L'entrée sera toujours une chaîne, la sortie doit toujours être une chaîne, si elle est plus courte pour la prendre comme un seul argument dans un tableau par exemple.
["17th May 2012"]
vous pouvez le faire et la sortie peut être la même["2012/05/17"]
- Vous pouvez supposer que l'orthographe en entrée sera correcte.
BONUS: cos qui ici n'aime pas un défi;)
Si vous parvenez à autoriser également les formats d'entrée de The Fourteenth of March, 2016
ou March the Fourteenth, 2016
vous pouvez prendre 20 octets supplémentaires sur votre code avec tout octet final comptant moins de 1, ce qui donne 1.
Voici les numéros écrits complets pour chacun des jours afin d'éviter toute confusion sur l'orthographe.
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
Cas de test
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
sont par défaut prises en charge dans de nombreux analyseurs de date, mais17th
etSunday, June 8, 2015
sont un peu plus difficiles à analyser (selon la langue).Thursday, August 25, 2017
valide? Je vois des soumissions ignorant le DOW.Réponses:
Rails,
41,3735 octetsJe ne connais pas d'interprète en ligne pour Rails, mais voici une capture d'écran illustrant ce processus
la source
PowerShell ,
91899156 octetsEssayez-le en ligne!
Prend l'entrée sous forme de chaîne. Utilise a
-replace
pour se débarrasser des fichiers indésirables, puis utilise laGet-Date
commande-f
intégrée avec l' indicateur ormat pour spécifier leyyyy/MM/dd
format requis . Cette chaîne est laissée sur le pipeline et la sortie est implicite.Enregistré deux octets grâce à Mr Xcoder. Économisé un gros morceau grâce au golf regex de TessellatingHeckler.
la source
''
du format de date, pour -2. Si vous voulez vous en tenir à votre approche, étant donné que "l'orthographe est correcte", vous pouvez le remplacer'th|rd|st|(\b.*)day|,'
et il tombe à 56 octets et gère les mêmes cas. Bien que je pense que c'est faux parce que si vous laissez tomber les jours, vous ne pouvez pas ramasser l'Sunday, June8, 2015 | Invalid
affaire parce que c'était lundi. Il devrait y avoir une erreur, mais il est analysé comme valide. Je ne sais pas quelle sera la décision à ce sujet, ou si d'autres vérifient.PHP,
73164 + 1 octetsExécuter en tant que pipe avec
-nR
ou l' essayer en ligne .La vérification de la date était vraiment chère: j'ai dû démonter la date avant d'utiliser une fonction intégrée, puis essayer de faire une erreur sur le nom du mois.
la source
30 February 2014
retourne2014/03/02
. Soit en faisant une erreur soit en renvoyant une valeur de falsey cohérente, vous choisissez. (Ils s'en tiendront toutefois aux formats de modèles ci-dessus)Python 3 + bibliothèque de ParseDateTime,
152139155153 octetsEnregistré 13 octets grâce à Jonathan Allan
Ajout de 16 octets pour gérer les dates avec des jours non valides
Enregistré 2 octets en supprimant l'affectation lambda
Essayez-le en ligne!
Ne prend pas en charge les dates de bonus
la source
None
;import ...as
; & alambda
en réutilisantparse
commeh
.Python 2 , 193 octets
Essayez-le en ligne!
; -; pls halp
la source
time
.f=
du décompte d'octets sur TiO) en déclarantre.sub
Java (OpenJDK 8) , 190 + 26 = 216 octets
Essayez-le en ligne!
Remarque importante: il était plus court de valider également le jour de la semaine au lieu de l'abandonner, afin que la validation soit incluse!
Je n'ai pas essayé au-
SimpleDateFormat
delà des cas évidents qui ont tous accepté des dates comme le 30 février. J'ai donc dû l'abandonner et j'ai utilisé Java 8DateTimeFormatter
.Explication
Ce format signifie:
[EEEE, ]
(se produit dansSunday, ...
),[d ]
,MMMM
et espace,[d, ]
,uuuu
pour faire savoir à l'analyseur que nous sommes à l'ère grégorienne.Code:
Crédits
la source
replaceAll
motif?JavaScript (ES6),
124122 octetsla source
2015/06/07
pourJune 8, 2015
(problème UTC? Je suis en UTC + 2) etfalse
pourSunday, June 8, 2015
ouMonday, June 8, 2015
.nday
.