Dada una fecha escrita en cualquiera (debe manejar todos en el mismo programa) de los siguientes formatos, analícela en una válida yyyy/mm/dd date
.
17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015
Reglas
- Las fechas a veces serán inválidas, es decir. día incorrecto para el mes o número de meses en un año, debe manejar ambos casos. Ya sea por error o devolviendo un valor de falsey consistente, usted elige. (Sin embargo, se apegarán a los formatos de plantilla anteriores)
- El relleno para días y meses inferiores a 10 debe usarse para crear una salida de dos dígitos.
- Los nombres de los meses siempre serán el nombre completo, no abreviado a sus contrapartes de tres caracteres.
- Puede asumir que el año siempre estará dentro del rango de9999.
- Los números negativos no necesitan ser manejados.
- Puede crear un programa o función completa para que la salida pueda estar en cualquier formato, imprimirse en la consola o devolverse desde una función.
- La entrada siempre será una cadena, la salida siempre debe ser una cadena, si hace que sea más corto tomarlo como un argumento único en una matriz, por ejemplo.
["17th May 2012"]
puede hacerlo y la salida puede ser la misma["2012/05/17"]
- Puede suponer que la ortografía en la entrada será correcta.
BONIFICACIÓN: porque a quién aquí no le gusta un desafío;)
Si puede permitir también los formatos de entrada The Fourteenth of March, 2016
o March the Fourteenth, 2016
puede quitar 20 bytes adicionales de su código con cualquier recuento final de bytes inferior a 1, lo que da como resultado 1.
Aquí están los números escritos completos para cada uno de los días para evitar cualquier confusión en la ortografía.
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
Casos de prueba
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
son soportados por omisión en un montón de fecha-analizadores, pero17th
ySunday, June 8, 2015
son un poco más difícil de analizar (en función del idioma).Thursday, August 25, 2017
valido? Veo presentaciones ignorando el DOW.Respuestas:
Carriles,
41,3735 bytesNo conozco un intérprete en línea para Rails, pero aquí hay una captura de pantalla que demuestra este proceso
fuente
PowerShell ,
91899156 bytesPruébalo en línea!
Toma la entrada como una cadena. Utiliza a
-replace
para deshacerse de la basura, luego usa elGet-Date
comando incorporado con el-f
indicador ormat para especificar elyyyy/MM/dd
formato requerido . Esa cadena se deja en la tubería y la salida es implícita.Ahorré dos bytes gracias al Sr. Xcoder. Ahorró una gran parte gracias al juego de golf regex de TessellatingHeckler.
fuente
''
del formato de fecha, para -2. Si desea apegarse a su enfoque, dado que "la ortografía es correcta", puede reemplazarlo'th|rd|st|(\b.*)day|,'
y se reduce a 56 bytes y maneja los mismos casos. Aunque creo que está mal porque si abandonas los días, no puedes recoger elSunday, June8, 2015 | Invalid
caso porque era lunes. Debe error, pero se analiza como válido. No estoy seguro de cuál será la decisión sobre eso, o si otros lo están revisando.PHP,
73164 + 1 bytesEjecutar como tubería
-nR
o probarlo en línea .La verificación de la fecha fue realmente costosa: tuve que desarmar la fecha antes de usar un incorporado, y luego intentar y error en el nombre del mes.
fuente
30 February 2014
vuelve2014/03/02
. Ya sea por error o devolviendo un valor de falsey consistente, usted elige. (Sin embargo, se apegarán a los formatos de plantilla anteriores)Python 3 + biblioteca parsedatetime,
152139155153 bytesGuardado 13 bytes gracias a Jonathan Allan
Se agregaron 16 bytes para manejar fechas con días de longitud no válidos
Se guardaron 2 bytes al eliminar la asignación lambda
Pruébalo en línea!
No admite fechas de bonificación
fuente
None
;import ...as
; & alambda
reutilizandoparse
comoh
.Python 2 , 193 bytes
Pruébalo en línea!
; -; pls halp
fuente
time
.f=
del recuento de bytes en TiO) declarandore.sub
Java (OpenJDK 8) , 190 + 26 = 216 bytes
Pruébalo en línea!
Nota importante: fue más corto validar también el día de la semana en lugar de deshacerse de él, por lo que se incluye la validación.
No he intentado con
SimpleDateFormat
más allá de los casos obvios que todos aceptaron fechas como el 30 de febrero. Así que tuve que deshacerme de él y usé Java 8DateTimeFormatter
.Explicación
Este formato significa:
[EEEE, ]
(sucede enSunday, ...
),[d ]
,MMMM
y espacio,[d, ]
,uuuu
para hacerle saber al analizador que estamos en la era gregoriana.Código:
Créditos
fuente
replaceAll
patrón?JavaScript (ES6),
124122 bytesfuente
2015/06/07
paraJune 8, 2015
(¿problema UTC? Estoy en UTC + 2) yfalse
para cualquieraSunday, June 8, 2015
oMonday, June 8, 2015
.nday
.