Napisz program, który pobiera ciąg znaków, w którym każda linia składa się ze znaku 0
wciętego przez pewną liczbę spacji. Górna linia nie jest wcięta, a każda inna linia będzie wcięta o co najmniej jedną spację więcej niż linia tuż przed nią.
Żadne wiersze nie będą miały końcowych spacji, ale możesz opcjonalnie założyć, że istnieje jedna końcowa nowa linia.
Na przykład dane wejściowe mogą wyglądać mniej więcej tak:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Twoim zadaniem jest ponumerowanie go jak hierarchicznego konturu , przy użyciu rosnących liczb całkowitych dodatnich jako nagłówków linii. To byłby wynik dla przykładu:
1
1
1
2
2
2
1
2
3
1
3
1
1
2
Zwróć uwagę, że każdy hierarchiczny poziom wcięcia ma swój własny zestaw rosnących liczb, nawet jeśli zwiększają się tylko do jednego.
Na wyjściu nie powinno być żadnych spacji końcowych, ale opcjonalnie może występować pojedynczy znak nowej linii.
Napisz pełny program, który pobiera ciąg wejściowy za pomocą stdin lub wiersza poleceń, lub napisz funkcję, która przyjmuje ciąg jako argument. Wydrukuj wynik lub zwróć jako ciąg.
Najkrótszy kod w bajtach wygrywa.
Przykłady
Jeśli wprowadzono pusty ciąg, pusty ciąg powinien zostać wyprowadzony.
Kolejnym najbardziej trywialnym przykładem jest wejście
0
który powinien się stać
1
Duży przykład - dane wejściowe:
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
Wynik:
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
źródło
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 bajtów
Podobnie jak moja odpowiedź w języku Python , ta tablica używa do przechowywania numeru, który ma każdy poziom wcięcia. Jedną różnicą jest to, że używa
t
(zestaw tablic) do zamiany 0 w każdej linii na żądaną liczbę.Wypróbuj online .
źródło
JavaScript ES6,
8381 bajtówWykorzystuje tablicę, która przechowuje bieżącą liczbę dla każdego poziomu wcięcia. Wszystko powyżej tego poziomu jest resetowane do 0 za pomocą
fill()
. EDYCJA: 2 bajty zapisane dzięki końcówce vihan1086.Poniższego fragmentu stosu można użyć do testowania, ponieważ jest on nieznacznie ulepszony i używa lepiej obsługiwanej składni ES5. Drugą funkcją jest polifill,
fill()
ponieważ nie ma krótkiej drogi, aby to zrobić bez ES6.źródło
Python - 191
Ta funkcja to
z
.źródło
Pip
-rn
,3127 bajtówDane wejściowe ze standardowego wejścia. Wypróbuj online!
Wyjaśnienie
źródło