En su xkcd sobre el formato de fecha estándar ISO 8601, Randall se coló en una notación alternativa bastante curiosa:
Los números grandes son todos los dígitos que aparecen en la fecha actual en su orden habitual, y los números pequeños son índices basados en 1 de las ocurrencias de ese dígito. Entonces el ejemplo anterior representa 2013-02-27
.
Definamos una representación ASCII para tal fecha. La primera línea contiene los índices 1 a 4. La segunda línea contiene los dígitos "grandes". La tercera línea contiene los índices del 5 al 8. Si hay varios índices en una sola ranura, se enumeran uno al lado del otro de menor a mayor. Si hay como máximo m
índices en una sola ranura (es decir, en el mismo dígito y en la misma fila), entonces cada columna debe tener m+1
caracteres anchos y alineados a la izquierda:
2 3 1 4
0 1 2 3 7
5 67 8
Vea también el desafío complementario para la conversión opuesta.
El reto
Dada una fecha en notación xkcd, envíe la fecha ISO 8601 correspondiente ( YYYY-MM-DD
).
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).
Puede suponer que la entrada es cualquier fecha válida entre años 0000
e 9999
inclusive.
No habrá espacios iniciales en la entrada, pero puede suponer que las líneas se rellenan con espacios en un rectángulo, que contiene como máximo una columna de espacios final.
Aplican reglas estándar de código de golf .
Casos de prueba
2 3 1 4
0 1 2 3 7
5 67 8
2013-02-27
2 3 1 4
0 1 2 4 5
5 67 8
2015-12-24
1234
1 2
5678
2222-11-11
1 3 24
0 1 2 7 8
57 6 8
1878-02-08
2 4 1 3
0 1 2 6
5 678
2061-02-22
1 4 2 3
0 1 2 3 4 5 6 8
6 5 7 8
3564-10-28
1234
1
5678
1111-11-11
1 2 3 4
0 1 2 3
8 5 6 7
0123-12-30
1
está arriba 2
, entonces el primer dígito es 2
. 2
está arriba 0
, entonces el segundo dígito es 0
. 3
está arriba 1
, 4
está arriba 3
, así que obtenemos 2013
los primeros cuatro dígitos. Ahora 5
está abajo 0
, entonces el quinto dígito está 0
, 6
y 7
ambos están abajo 2
, entonces ambos dígitos están 2
. Y finalmente, 8
está abajo 7
, así que el último dígito es 8
, y terminamos con 2013-02-27
. (Los guiones están implícitos en la notación xkcd porque sabemos en qué posiciones aparecen).