Em seu xkcd sobre o formato de data padrão ISO 8601, Randall se escondeu em uma notação alternativa bastante curiosa:
Os números grandes são todos os dígitos que aparecem na data atual em sua ordem usual, e os números pequenos são índices baseados em 1 das ocorrências desse dígito. Portanto, o exemplo acima representa 2013-02-27
.
Vamos definir uma representação ASCII para essa data. A primeira linha contém os índices de 1 a 4. A segunda linha contém os dígitos "grandes". A terceira linha contém os índices 5 a 8. Se houver vários índices em um único slot, eles serão listados um do lado do outro, do menor para o maior. Se houver no máximo m
índices em um único slot (ou seja, no mesmo dígito e na mesma linha), cada coluna deverá ter m+1
caracteres largos e alinhados à esquerda:
2 3 1 4
0 1 2 3 7
5 67 8
Veja também o desafio associado para a conversão oposta.
O desafio
Dada uma data na notação xkcd, imprima a data ISO 8601 correspondente ( YYYY-MM-DD
).
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e exibindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Você pode assumir que a entrada é qualquer data válida entre anos 0000
e 9999
inclusive.
Não haverá espaços à esquerda na entrada, mas você pode assumir que as linhas são preenchidas com espaços em um retângulo, que contém no máximo uma coluna de espaços à direita.
Aplicam-se as regras de código-golfe padrão .
Casos de teste
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á acima 2
, então o primeiro dígito é 2
. 2
está acima 0
, então o segundo dígito é 0
. 3
está acima 1
, 4
está acima 3
, então obtemos 2013
os quatro primeiros dígitos. Agora 5
está abaixo 0
, assim que o quinto dígito é 0
, 6
e 7
são ambos abaixo 2
, então ambos os dígitos são 2
. E, finalmente, 8
está abaixo 7
, então o último dígito é 8
, e terminamos com 2013-02-27
. (Os hífens estão implícitos na notação xkcd porque sabemos em que posições eles aparecem.)