Écrivez un programme qui prend une chaîne où chaque ligne se compose du caractère 0
indenté par un certain nombre d'espaces. La ligne supérieure n'est pas en retrait et toutes les autres lignes seront en retrait d'au plus un espace de plus que la ligne juste avant.
Aucune ligne n'aura d'espaces de fin, mais vous pouvez éventuellement supposer qu'il existe une seule nouvelle ligne de fin.
Par exemple, l'entrée peut ressembler à ceci:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Votre tâche consiste à le numéroter comme un plan hiérarchique , en utilisant des entiers positifs croissants comme en-têtes de ligne. Ce serait la sortie de l'exemple:
1
1
1
2
2
2
1
2
3
1
3
1
1
2
Notez que chaque niveau d'indentation hiérarchique possède son propre ensemble de nombres croissants, même s'ils ne vont que jusqu'à un.
Dans la sortie, il ne doit pas y avoir d'espaces de fin, mais il peut éventuellement y avoir une seule nouvelle ligne de fin.
Écrivez un programme complet qui prend la chaîne d'entrée via stdin ou la ligne de commande, ou écrivez une fonction qui prend la chaîne en argument. Imprimez le résultat ou renvoyez-le sous forme de chaîne.
Le code le plus court en octets gagne.
Exemples
Si la chaîne vide est entrée, la chaîne vide doit être sortie.
L'exemple le plus trivial suivant est l'entrée
0
qui devrait devenir
1
Grand exemple - Entrée:
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
Production:
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
la source
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 octets
Comme ma réponse Python , cela utilise un tableau pour stocker le nombre jusqu'à ce que chaque niveau d'indentation soit. Une différence, cependant, est que cela utilise
t
(ensemble de tableaux) pour remplacer le 0 sur chaque ligne par le nombre que nous voulons.Essayez-le en ligne .
la source
JavaScript ES6,
8381 octetsCela utilise un tableau qui contient le numéro actuel pour chaque niveau d'indentation. Tout ce qui dépasse ce niveau est réinitialisé à 0 en utilisant
fill()
. EDIT: 2 octets enregistrés grâce à la astuce de vihan1086.L'extrait de pile ci-dessous peut être utilisé pour les tests, car il est légèrement non-golfé et utilise une syntaxe ES5 mieux prise en charge. La deuxième fonction est un polyfill
fill()
car il n'y a pas de moyen court de le faire sans ES6.la source
Python - 191
La fonction est
z
.la source
Pip
-rn
,3127 octetsEntrée de stdin. Essayez-le en ligne!
Explication
la source