Нещодавно я потурав собі ностальгією у вигляді Bookworm Deluxe:
Якщо ви цього ще не бачили, це гра в слова, де метою є з'єднання сусідніх плиток для формування слів. Для того, щоб визначити, чи є рядок дійсним словом, він перевіряє його на своєму внутрішньому словнику, який зберігається у стисненому форматі, який виглядає приблизно так:
aa
2h
3ed
ing
s
2l
3iis
s
2rdvark
8s
4wolf
7ves
Правила розпакування словника прості:
Прочитайте число на початку рядка та скопіюйте стільки символів з початку попереднього слова. (Якщо немає номера, скопіюйте стільки символів, скільки минулого разу.)
Додайте наступні літери до слова.
Отже, наше перше слово aa
, а потім 2h
, що означає «копіюємо перші дві букви aa
і Append h
," формування aah
. Потім 3ed
стає aahed
, і оскільки наступний рядок не має числа, ми знову копіюємо 3 символи у форму aahing
. Цей процес триває впродовж решти словника. Отримані слова з невеликого введення зразка:
aa
aah
aahed
aahing
aahs
aal
aaliis
aals
aardvark
aardvarks
aardwolf
aardwolves
Ваше завдання полягає в тому, щоб виконати розпакування в якомога менше байтах.
Кожен рядок введення буде містити нуль або більше цифр, що 0-9
супроводжуються однією або кількома малими літерами a-z
. Ви можете приймати введення та давати вихід у вигляді списку рядків, або як єдиний рядок зі словами, розділеними будь-яким символом, окрім 0-9
/a-z
.
Ось ще один невеликий тестовий випадок із кількома крайовими випадками, не висвітленими у прикладі:
abc cba 1de fg hi 0jkl mno abcdefghijk 10l
=> abc cba cde cfg chi jkl mno abcdefghijk abcdefghijl
Ви також можете перевірити свій код у повному словнику: введення , виведення .
locate
Програма використовує цей тип кодування на колійних іменах.
0
не матиме провідних0
s?