Niedawno oddałem się nostalgii w postaci Bookworm Deluxe:
Jeśli nie widziałeś go wcześniej, to gra słowna, której celem jest łączenie sąsiadujących ze sobą kafelków w celu utworzenia słów. Aby ustalić, czy łańcuch jest prawidłowym słowem, sprawdza go w wewnętrznym słowniku, który jest przechowywany w skompresowanym formacie, który wygląda następująco:
aa
2h
3ed
ing
s
2l
3iis
s
2rdvark
8s
4wolf
7ves
Zasady rozpakowywania słownika są proste:
Przeczytaj numer na początku wiersza i skopiuj tyle znaków z początku poprzedniego słowa. (Jeśli nie ma numeru, skopiuj tyle znaków, ile poprzednio.)
Dołącz następujące litery do słowa.
Zatem nasze pierwsze słowo aa
, po 2h
którym następuje , oznacza „kopiowanie pierwszych dwóch liter aa
i dopisz h
”, tworząc aah
. Następnie 3ed
staje się aahed
, a ponieważ następny wiersz nie ma liczby, ponownie kopiujemy 3 znaki w celu utworzenia aahing
. Ten proces trwa przez resztę słownika. Wynikowe słowa z małej próbki wejściowej to:
aa
aah
aahed
aahing
aahs
aal
aaliis
aals
aardvark
aardvarks
aardwolf
aardwolves
Twoim wyzwaniem jest wykonanie tego rozpakowywania w jak najmniejszej liczbie bajtów.
Każdy wiersz wprowadzania będzie zawierać zero lub więcej cyfr, 0-9
po których następuje jedna lub więcej małych liter a-z
. Możesz wziąć dane wejściowe i dać wynik jako albo listę ciągów, albo jako pojedynczy ciąg ze słowami oddzielonymi dowolnym znakiem innym niż 0-9
/ a-z
.
Oto kolejny mały przypadek testowy z kilkoma przypadkami brzegowymi nie ujętymi w przykładzie:
abc cba 1de fg hi 0jkl mno abcdefghijk 10l
=> abc cba cde cfg chi jkl mno abcdefghijk abcdefghijl
Możesz także przetestować swój kod na pełnym słowniku: wejście , wyjście .
locate
Program korzysta z tego rodzaju kodowania na ścieżek.
0
wiodących nie będzie mieć0
?