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: d
i obracać, aby uzyskać stos: acebd
.
Szczyt stosu a
: Tak! więc dodać go do sekwencji: da
i usunąć go ze stosu: cebd
.
Na górę stosu c
: Nie to, czego szukasz ( e
), więc możemy go dodać do sekwencji: dac
i obracać, aby uzyskać stos: ebdc
.
Szczyt stosu e
: Tak! więc dodać go do sekwencji: dace
i usunąć go ze stosu: bdc
.
Na górę stosu b
: Nie to, czego szukasz ( c
), więc możemy go dodać do sekwencji: daceb
i obracać, aby uzyskać stos: dcb
.
Na górę stosu d
: Nie to, czego szukasz ( c
), więc możemy go dodać do sekwencji: dacebd
i obracać, aby uzyskać stos: cbd
.
Szczyt stosu c
: Tak! więc dodać go do sekwencji: dacebdc
i usunąć go ze stosu: bd
.
Na górę stosu b
: Nie to, czego szukasz ( d
), więc możemy go dodać do sekwencji: dacebdcb
i obracać, aby uzyskać stos: db
.
Szczyt stosu d
: Tak! więc dodać go do sekwencji: dacebdcbd
i usunąć go ze stosu: b
.
Szczyt stosu b
: Tak! więc dodać go do sekwencji: dacebdcbdb
i 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
99
konkretnie?