Inspirado por A014486 .
Desafio
Dada uma entrada inteira na base 10, construa uma representação para a floresta binária correspondente à entrada. As representações incluem, mas não estão limitadas a, matrizes e cadeias aninhadas.
Quão?
Converta a entrada em binário. 1
s representam ramos 0
es representam folhas.
Para facilitar a compreensão, vamos usar 834
(1101000010 em binário) como exemplo.
Começamos com o primeiro dígito. O primeiro dígito é a 1
, então desenhamos ramificações:
\ / 1 1
ou como uma matriz, {{1}}
O próximo dígito é 1
, portanto, desenhamos mais ramos (vamos da esquerda para a direita):
\ / 1 1 \ / 1 1
ou como uma matriz, {{1, {1}}}
O próximo dígito é 0
, então colocamos uma folha:
0 0 \ / 1 1 \ / 1 1
ou como uma matriz, {{1, {1, 0}}}
O próximo dígito é a 1
, então colocamos um ramo:
\ / 0 1 \ / 1 1 \ / 1 1
ou como uma matriz, {{1, {1, 0, {1}}}}
Repetindo o processo, obtemos a seguinte árvore após o oitavo dígito:
0 0 \ / 0 1 \ / 1 0 \ / 1 1
ou como uma matriz, {{1, {1, 0, {1, 0, 0}}, 0}}
Para os dígitos restantes, desenhamos mais árvores:
O nono dígito é um 0
, então colocamos uma folha (aww, é um broto jovem!)
0 0 \ / 0 1 \ / 1 0 \ / 1 0
ou como uma matriz, {{1, {1, 0, {1, 0, 0}}, 0}, 0}
Quando usamos todos os dígitos, terminamos com o seguinte:
0 0 \ / 0 1 \ / 1 0 0 \ / \ / 1 0 1
ou como uma matriz, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0}}
Isso parece estranho, por isso, preenchemos um zero para completar a árvore:
0 0 \ / 0 1 \ / 1 0 0 0 \ / \ / 1 0 1
ou como uma matriz, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0, 0}}
Observe que o achatamento da matriz gera o número original em binário, mas com um zero preenchido.
Critério
- A saída deve mostrar claramente a separação das árvores e galhos (se não for uma matriz aninhada, explique seu formato de saída).
- A extração de todos os dígitos da saída deve ser idêntica à representação binária da entrada (com os zero preenchidos do processo acima).
Casos de teste
A saída pode diferir desde que atenda aos critérios.
0 -> {0} 1 -> {{1, 0, 0}} 44 -> {{1, 0, {1, {1, 0, 0}, 0}}} 63 -> {{1, {1, {1, {1, {1, {1, 0, 0}, 0}, 0}, 0}, 0}, 0}, 0}} 404 -> {{1, {1, 0, 0}, {1, 0, {1, 0, 0}}}} 1337 -> {{1, 0, {1, 0, 0}}, {1, {1, {1, 0, 0}, {1, 0, 0}}, 0}}
Pontuação
Isso é código-golfe , então os bytes mais baixos vencem!