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: de girar para obter a pilha: acebd.
Topo da pilha a: Sim! assim nós adicioná-lo à sequência: dae 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: dace girar para obter a pilha: ebdc.
Topo da pilha e: Sim! assim nós adicioná-lo à sequência: dacee 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: dacebe 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: dacebde girar para obter a pilha: cbd.
Topo da pilha c: Sim! assim nós adicioná-lo à sequência: dacebdce 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: dacebdcbe girar para obter a pilha: db.
Topo da pilha d: Sim! assim nós adicioná-lo à sequência: dacebdcbde removê-lo da pilha: b.
Topo da pilha b: Sim! assim nós adicioná-lo à sequência: dacebdcbdbe 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
99especificamente?