Фон
По мотивам игры мой четырехлетний получил от своего раввина.
«Цель» - «найти» буквы в заданном порядке, например 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конкретно?