Nel suo xkcd sul formato di data standard ISO 8601 Randall ha inserito una notazione alternativa piuttosto curiosa:
I numeri grandi sono tutte le cifre che appaiono nella data corrente nel loro solito ordine e i numeri piccoli sono indici basati su 1 delle occorrenze di quella cifra. Quindi l'esempio sopra rappresenta 2013-02-27
.
Definiamo una rappresentazione ASCII per tale data. La prima riga contiene gli indici da 1 a 4. La seconda riga contiene le cifre "grandi". La terza riga contiene gli indici da 5 a 8. Se ci sono più indici in un singolo slot, vengono elencati uno accanto all'altro dal più piccolo al più grande. Se ci sono al massimo m
indici in un singolo slot (cioè sulla stessa cifra e nella stessa riga), ogni colonna dovrebbe avere m+1
caratteri larghi e allineati a sinistra:
2 3 1 4
0 1 2 3 7
5 67 8
Vedi anche la sfida del compagno per la conversione opposta.
La sfida
Data una data in notazione xkcd, genera la data ISO 8601 corrispondente ( YYYY-MM-DD
).
È possibile scrivere un programma o una funzione, prendendo l'input tramite STDIN (o l'alternativa più vicina), l'argomento della riga di comando o l'argomento della funzione e producendo il risultato tramite STDOUT (o l'alternativa più vicina), il valore di ritorno della funzione o il parametro della funzione (out).
Si può presumere che l'input sia una data valida tra anni 0000
e 9999
, compresi.
Non ci saranno spazi iniziali nell'input, ma puoi supporre che le linee siano riempite di spazi in un rettangolo, che contiene al massimo una colonna di spazi finali.
Si applicano le regole standard del code-golf .
Casi test
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
è sopra 2
, quindi la prima cifra è 2
. 2
è sopra 0
, quindi la seconda cifra è 0
. 3
è sopra 1
, 4
è sopra 3
, quindi otteniamo 2013
le prime quattro cifre. Ora 5
è sotto 0
, quindi la quinta cifra è 0
, 6
e 7
sono entrambe sotto 2
, quindi entrambe le cifre sono 2
. E infine, 8
è sotto 7
, quindi l'ultima cifra è 8
, e finiamo con 2013-02-27
. (I trattini sono impliciti nella notazione xkcd perché sappiamo in quali posizioni appaiono.)