fundo
Baseado em um jogo que meu filho de quatro anos ganhou do rabino.
O "objetivo" é "encontrar" as letras em uma determinada ordem, por exemplo aecdb
. Você recebe uma pilha de cartas, por exemplo daceb
. Você só pode pesquisar na pilha na ordem especificada, embora de forma cíclica. Quando você encontra uma carta de que precisa, tira-a da pilha.
Objetivo
Dada uma ordem e uma pilha (permutações livres de duplicatas), encontre a sequência das letras da pilha superior (é tudo ASCII imprimível) que você vê durante o jogo.
Exemplo passo a passo
Precisamos encontrar a ordem aecdb
, dada a pilha daceb
:
Topo da pilha d
: Não é o que nós estamos procurando ( a
), de modo que adicioná-lo à sequência: d
e girar para obter a pilha: acebd
.
Topo da pilha a
: Sim! assim nós adicioná-lo à sequência: da
e removê-lo da pilha: cebd
.
Topo da pilha c
: Não é o que nós estamos procurando ( e
), de modo que adicioná-lo à sequência: dac
e girar para obter a pilha: ebdc
.
Topo da pilha e
: Sim! assim nós adicioná-lo à sequência: dace
e removê-lo da pilha: bdc
.
Topo da pilha b
: Não é o que nós estamos procurando ( c
), de modo que adicioná-lo à sequência: daceb
e girar para obter a pilha: dcb
.
Topo da pilha d
: Não é o que nós estamos procurando ( c
), de modo que adicioná-lo à sequência: dacebd
e girar para obter a pilha: cbd
.
Topo da pilha c
: Sim! assim nós adicioná-lo à sequência: dacebdc
e removê-lo da pilha: bd
.
Topo da pilha b
: Não é o que nós estamos procurando ( d
), de modo que adicioná-lo à sequência: dacebdcb
e girar para obter a pilha: db
.
Topo da pilha d
: Sim! assim nós adicioná-lo à sequência: dacebdcbd
e removê-lo da pilha: b
.
Topo da pilha b
: Sim! assim nós adicioná-lo à sequência: dacebdcbdb
e removê-lo da pilha: .
E nós terminamos. O resultado é dacebdcbdb
.
Implementação de referência
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'))
Casos de teste
try
, yrt
→yrtyry
1234
, 4321
→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ
, RUAHYKCLQZXEMPBWGDIOTVJNSF
→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?
, ?
→?
a
, a
→a a
abcd
, abcd
→abcd
99
especificamente?