tło
Na podstawie gry, którą mój czterolatek dostał od swojego rabina.
„Celem” jest „znalezienie” liter w określonej kolejności, np aecdb. Otrzymujesz stos kart listowych, np daceb. Możesz przeszukiwać stos tylko w podanej kolejności, aczkolwiek cyklicznie. Kiedy napotkasz potrzebny list, wyjmiesz go ze stosu.
Cel
Biorąc pod uwagę kolejność i stos (wzajemne permutacje bez duplikatów), znajdź sekwencję liter najwyższego stosu (wszystkie to ASCII do wydrukowania), które widzisz podczas gry.
Przykład krok po kroku
Musimy znaleźć zamówienie aecdb, biorąc pod uwagę stos daceb:
Na górę stosu d: Nie to, czego szukasz ( a), więc możemy go dodać do sekwencji: di obracać, aby uzyskać stos: acebd.
Szczyt stosu a: Tak! więc dodać go do sekwencji: dai usunąć go ze stosu: cebd.
Na górę stosu c: Nie to, czego szukasz ( e), więc możemy go dodać do sekwencji: daci obracać, aby uzyskać stos: ebdc.
Szczyt stosu e: Tak! więc dodać go do sekwencji: dacei usunąć go ze stosu: bdc.
Na górę stosu b: Nie to, czego szukasz ( c), więc możemy go dodać do sekwencji: dacebi obracać, aby uzyskać stos: dcb.
Na górę stosu d: Nie to, czego szukasz ( c), więc możemy go dodać do sekwencji: dacebdi obracać, aby uzyskać stos: cbd.
Szczyt stosu c: Tak! więc dodać go do sekwencji: dacebdci usunąć go ze stosu: bd.
Na górę stosu b: Nie to, czego szukasz ( d), więc możemy go dodać do sekwencji: dacebdcbi obracać, aby uzyskać stos: db.
Szczyt stosu d: Tak! więc dodać go do sekwencji: dacebdcbdi usunąć go ze stosu: b.
Szczyt stosu b: Tak! więc dodać go do sekwencji: dacebdcbdbi usunąć go ze stosu: .
I skończone. Rezultat jest dacebdcbdb.
Realizacja referencyjna
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'))
Przypadki testowe
try, yrt→yrtyry
1234, 4321→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ, RUAHYKCLQZXEMPBWGDIOTVJNSF→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?, ?→?
a, a →a a
abcd, abcd→abcd
99konkretnie?