Escreva um programa que use uma string em que cada linha seja composta pelo caractere 0
recuado por algum número de espaços. A linha superior não é recuada e todas as outras linhas serão recuadas no máximo por mais um espaço do que a linha imediatamente antes dela.
Nenhuma linha terá espaços à direita, mas você pode opcionalmente assumir que há uma nova linha à direita.
Por exemplo, a entrada pode ser algo como isto:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Sua tarefa é numerá-la como um esboço hierárquico , usando números inteiros positivos crescentes como cabeçalhos de linha. Esta seria a saída para o exemplo:
1
1
1
2
2
2
1
2
3
1
3
1
1
2
Observe como todo nível de indentação hierárquica tem seu próprio conjunto de números crescentes, mesmo que eles subam apenas um.
Na saída, não deve haver espaços à direita, mas opcionalmente pode haver uma nova linha à direita.
Escreva um programa completo que aceite a string de entrada via stdin ou linha de comando ou escreva uma função que aceite a string como argumento. Imprima o resultado ou retorne-o como uma sequência.
O código mais curto em bytes vence.
Exemplos
Se a sequência vazia for inserida, a sequência vazia deverá ser gerada.
O próximo exemplo mais trivial é a entrada
0
que deve se tornar
1
Exemplo grande - Entrada:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Resultado:
1
1
1
2
1
3
1
2
1
2
1
1
2
3
4
2
3
1
2
3
2
1
1
2
1
2
3
4
5
6
7
8
9
10
11
1
1
1
12
1
3
4
5
1
1
1
1
1
1
2
2
2
2
2
2
1
2
1
2
6
7
fonte
S=[]\nfor w in input()[:-1].split('0\n'):S=([0]+S)[~len(w):];S[0]+=1;print w+`S[0]`
S=[]\nfor w in input().split('\n'):S=([0]+S)[-len(w):];S[0]+=1;print w[:-1]+`S[0]`
.CJam, 25 bytes
Como minha resposta em Python , isso usa uma matriz para armazenar qual número cada nível de indentação tem. Uma diferença, no entanto, é que isso usa
t
(conjunto de matrizes) para substituir o 0 em cada linha pelo número que queremos.Experimente online .
fonte
JavaScript ES6,
8381 bytesIsso usa uma matriz que mantém o número atual para cada nível de indentação. Tudo o que passou nesse nível é redefinido para 0 usando
fill()
. EDIT: 2 bytes salvos graças à dica do vihan1086.O snippet de pilha abaixo pode ser usado para teste porque é um pouco desmantelado e usa a sintaxe ES5 com melhor suporte. A segunda função é um polyfill,
fill()
pois não há uma maneira curta de fazê-lo sem o ES6.fonte
Python - 191
A função é
z
.fonte
Pip
-rn
,3127 bytesEntrada de stdin. Experimente online!
Explicação
fonte