Фон
По мотивам игры мой четырехлетний получил от своего раввина.
«Цель» - «найти» буквы в заданном порядке, например aecdb
. Вам дают стопку писем, например daceb
. Поиск в стеке возможен только в указанном порядке, хотя и циклически. Когда вы встречаете нужное письмо, вы берете его из стопки.
Задача
При заданном порядке и стопке (перестановки без дубликатов друг друга) найдите последовательность букв верхнего стека (это все печатные ASCII), которые вы видите во время игры.
Пошаговый пример
Нам нужно найти порядок aecdb
, учитывая стек daceb
:
Верх стека d
: Не то , что мы ищем ( a
), поэтому мы добавим его в последовательности: d
и повернуть , чтобы получить стек: acebd
.
Вершина стека a
: да! поэтому мы добавим его в следующей последовательности: da
и удалить его из стека: cebd
.
Верх стека c
: Не то , что мы ищем ( e
), поэтому мы добавим его в последовательности: dac
и повернуть , чтобы получить стек: ebdc
.
Вершина стека e
: да! поэтому мы добавим его в следующей последовательности: dace
и удалить его из стека: bdc
.
Верх стека b
: Не то , что мы ищем ( c
), поэтому мы добавим его в последовательности: daceb
и повернуть , чтобы получить стек: dcb
.
Верх стека d
: Не то , что мы ищем ( c
), поэтому мы добавим его в последовательности: dacebd
и повернуть , чтобы получить стек: cbd
.
Вершина стека c
: да! поэтому мы добавим его в следующей последовательности: dacebdc
и удалить его из стека: bd
.
Верх стека b
: Не то , что мы ищем ( d
), поэтому мы добавим его в последовательности: dacebdcb
и повернуть , чтобы получить стек: db
.
Вершина стека d
: да! поэтому мы добавим его в следующей последовательности: dacebdcbd
и удалить его из стека: b
.
Вершина стека b
: да! поэтому мы добавим его в следующей последовательности: dacebdcbdb
и удалить его из стека: .
И мы сделали. Результат есть dacebdcbdb
.
Ссылочная реализация
def letters(target, stack):
string = ''
while stack:
string += stack[0]
if stack[0] == target[0]:
stack.pop(0)
target = target[1:]
else:
stack.append(stack.pop(0))
return string
print letters('aecdb', list('daceb'))
Контрольные примеры
try
, yrt
→yrtyry
1234
, 4321
→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ
, RUAHYKCLQZXEMPBWGDIOTVJNSF
→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?
, ?
→?
a
, a
→a a
abcd
, abcd
→abcd
99
конкретно?