Escriba un programa que tome una cadena donde cada línea consiste en el carácter 0
sangrado por un número de espacios. La línea superior no tiene sangría y todas las demás líneas se sangrarán como máximo un espacio más que la línea justo antes.
Ninguna línea tendrá espacios finales, pero puede suponer opcionalmente que hay una nueva línea final.
Por ejemplo, la entrada podría verse así:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Su tarea es numerarlo como un esquema jerárquico , utilizando números enteros positivos crecientes como encabezados de línea. Esta sería la salida para el ejemplo:
1
1
1
2
2
2
1
2
3
1
3
1
1
2
Observe cómo cada nivel de sangría jerárquica tiene su propio conjunto de números crecientes, incluso si solo suben a uno.
En la salida, no debe haber espacios finales, pero opcionalmente puede haber una nueva línea final.
Escriba un programa completo que tome la cadena de entrada a través de stdin o línea de comando, o escriba una función que tome la cadena como argumento. Imprima el resultado o devuélvalo como una cadena.
El código más corto en bytes gana.
Ejemplos
Si se ingresa la cadena vacía, la cadena vacía debe salir.
El siguiente ejemplo más trivial es la entrada
0
que debería convertirse
1
Ejemplo 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
Salida:
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
fuente
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
Al igual que mi respuesta de Python , esto usa una matriz para almacenar el número que corresponde a cada nivel de sangría. Sin embargo, una diferencia es que esto usa
t
(conjunto de matrices) para reemplazar el 0 en cada línea con el número que queremos.Pruébalo en línea .
fuente
JavaScript ES6,
8381 bytesEsto utiliza una matriz que contiene el número actual para cada nivel de sangría. Todo más allá de ese nivel se restablece a 0 usando
fill()
. EDITAR: 2 bytes guardados gracias a la sugerencia de vihan1086.El Fragmento de pila a continuación se puede usar para realizar pruebas, ya que está ligeramente oculto y utiliza una sintaxis ES5 mejor soportada. La segunda función es un polyfill
fill()
ya que no hay una forma corta de hacerlo sin ES6.fuente
Python - 191
La función es
z
.fuente
Pip
-rn
,3127 bytesEntrada de stdin. Pruébalo en línea!
Explicación
fuente