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 ISO 8601 ( YYYY-MM-DD
), imprima a notação de data xkcd correspondente.
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 emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Qualquer ano de 0000
a 9999
é entrada válida.
Espaços à direita são permitidos, espaços à esquerda não. Opcionalmente, você pode gerar uma única nova linha à direita.
Aplicam-se as regras de código-golfe padrão .
Casos de teste
2013-02-27
2 3 1 4
0 1 2 3 7
5 67 8
2015-12-24
2 3 1 4
0 1 2 4 5
5 67 8
2222-11-11
1234
1 2
5678
1878-02-08
1 3 24
0 1 2 7 8
57 6 8
2061-02-22
2 4 1 3
0 1 2 6
5 678
3564-10-28
1 4 2 3
0 1 2 3 4 5 6 8
6 5 7 8
1111-11-11
1234
1
5678
0123-12-30
1 2 3 4
0 1 2 3
8 5 6 7
Ruby,
200195189178 178162157 caracteres(Código de 156 caracteres + opção de linha de comando de 1 caractere)
Exemplo de execução:
fonte
Python 2.7,
308310 bytesUau, consertá-lo custou apenas 2 bytes!
A data não precisa ser separada, a data pode ter qualquer tamanho, não precisa ser uma data, pode ser qualquer sequência de caracteres (mas os traços são removidos). A parte do meio parece bem jogável para mim.
fonte
C #, 456
Golfe:
Ungolfed:
fonte
Perl6, 265 bytes
Golfe
Ungolfed (ligeiramente)
fonte
Python 3, 306 bytes
Estou investigando maneiras de determinar, antes de montar as linhas superior e inferior, qual será a largura máxima de qualquer coluna. Depois que eu conseguir isso, eu devo conseguir construir os espaços diretamente nas linhas, em vez de usar todas essas
join
funções.fonte
''.join
em uma variável?''.join(...)
comojoin('',...)
, o que precisaria ser "salvo" como uma função.+=[i]
pode ser+=i,
.return '\n'
->return'\n'
.PowerShell,
174170168167 bytesScript de teste com menos golfe:
Saída (barras verticais apenas para ver espaços à direita e à esquerda):
fonte