Para los calendarios gregorianos, el formato de fecha varía de un país a otro. Hay tres formatos principales reconocidos:
YY-MM-DD
(big-endian)DD-MM-YY
(little-endian)MM-DD-YY
(endian medio)
Su tarea es escribir un programa que, dada una cadena de entrada que representa una fecha, genere todos los formatos de fecha posibles mediante los cuales esta cadena se puede interpretar como una fecha.
Reglas
- La fecha de entrada está en el formato
xx-xx-xx
, donde cada campo tiene dos dígitos y está rellenado con ceros. - La fecha siempre es válida (por lo que no puede obtener cosas como 14-13-17)
- La fecha siempre es al menos uno de los formatos anteriores (por lo que no puede obtener cosas como 17-14-11)
- Debido a que, de hecho, estamos en un mundo paralelo, hay 31 días para cada mes del año y, en consecuencia, no hay años bisiestos.
- La fecha es entre el 1 de enero de 2001 y el 31 de diciembre de 2099.
- Si solo hay un formato para la fecha, el código solo debe imprimirlo (solo se permiten líneas nuevas)
- Si hay varios formatos para la fecha, deben estar separados por una coma, un espacio, una nueva línea o una combinación de esos
- Debe generar los nombres exactos de los formatos. El uso de valores arbitrarios distintos no está permitido.
- No se permiten caracteres iniciales o finales que no sean un espacio final
- La salida debe estar en minúsculas
- No está permitido usar ninguna fecha incorporada o funciones de calendario
- Los formatos de salida no tienen que ser ordenados
Ejemplos
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
Este es el código de golf, por lo que gana el código más corto en bytes. Se alientan las explicaciones.
there are 31 days for every month of the year, and consequently no leap years
Entonces, ¿esto significa que cualquier biblioteca de fechas es efectivamente inútil para esto?Respuestas:
05AB1E , 40 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 , 123 bytes
Pruébalo en línea!
Python 2 , menos análisis de entrada, 123 bytes
Pruébalo en línea!
fuente
,
.JavaScript (ES6),
121119118112 bytesDevuelve una cadena delimitada por espacios con un espacio final.
¿Cómo?
Dividimos la entrada en una , b y c . Debido a que se garantiza que la fecha es válida, sabemos con certeza que b es menor que 32. Por lo tanto, es suficiente para probar si a es menor que 13 para validar el formato de endian medio. Ascendente hacia la izquierda y formatos big endian requieren b a ser inferior a 13 y otro de prueba en una y C , respectivamente, para validar el día.
De ahí las 3 pruebas:
Casos de prueba
Mostrar fragmento de código
fuente
Bash,
240125116112 bytesGolfizado
Gracias a manatwork por algunos consejos
Se guardaron 9 bytes eliminando la verificación de menos de 32 en la respuesta de Arnauld que sigue a la respuesta intermedia.
Guardado 4 bytes usando diferentes variables en lugar de una matriz
¡Pruébalo!
fuente
C #, 180 bytes
Las salidas con solo valores separados por espacios, también pueden tener espacios iniciales y finales. Se actualizará cuando el OP haya aclarado ese punto si es necesario.
Versión completa / formateada:
fuente
No leading or trailing characters others than a trailing space are allowed
PHP, 151 bytes
Casos de prueba
fuente
Lote, 138 bytes
Vagamente basado en la respuesta de @ ovs.
fuente
Java 232 bytes
Aquí hay una versión más bonita
Realmente no sabía cómo formatear esta parte ...
fuente
String e="-endian",b="big"+e,m="middle"+e,l="little"+e;
.PHP, 131 bytes
fuente