Contexte
Basé sur un jeu que mon fils de quatre ans a obtenu de son rabbin.
Le «but» est de «trouver» les lettres dans un ordre donné, par exemple aecdb. On vous donne une pile de cartes-lettres, par exemple daceb. Vous ne pouvez rechercher dans la pile que dans l'ordre indiqué, bien que cycliquement. Lorsque vous rencontrez une lettre dont vous avez besoin, vous la retirez de la pile.
Objectif
Étant donné un ordre et une pile (permutations sans doublons les uns des autres), trouvez la séquence des lettres de la pile supérieure (tout est ASCII imprimable) que vous voyez en jouant.
Exemple pas à pas
Nous devons trouver la commande aecdb, compte tenu de la pile daceb:
Haut de la pile d: Non ce que nous cherchons ( a), donc nous l' ajouterons à la séquence: det alternons pour obtenir la pile: acebd.
Haut de la pile a: Oui! si l' on ajoute à la séquence: daet le retirer de la pile: cebd.
Haut de la pile c: Non ce que nous cherchons ( e), donc nous l' ajouterons à la séquence: dacet alternons pour obtenir la pile: ebdc.
Haut de la pile e: Oui! si l' on ajoute à la séquence: daceet le retirer de la pile: bdc.
Haut de la pile b: Non ce que nous cherchons ( c), donc nous l' ajouterons à la séquence: dacebet alternons pour obtenir la pile: dcb.
Haut de la pile d: Non ce que nous cherchons ( c), donc nous l' ajouterons à la séquence: dacebdet alternons pour obtenir la pile: cbd.
Haut de la pile c: Oui! si l' on ajoute à la séquence: dacebdcet le retirer de la pile: bd.
Haut de la pile b: Non ce que nous cherchons ( d), donc nous l' ajouterons à la séquence: dacebdcbet alternons pour obtenir la pile: db.
Haut de la pile d: Oui! si l' on ajoute à la séquence: dacebdcbdet le retirer de la pile: b.
Haut de la pile b: Oui! si l' on ajoute à la séquence: dacebdcbdbet le retirer de la pile: .
Et nous avons terminé. Le résultat est dacebdcbdb.
Implémentation de référence
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'))
Cas de test
try, yrt→yrtyry
1234, 4321→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ, RUAHYKCLQZXEMPBWGDIOTVJNSF→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?, ?→?
 a, a →a a
abcd, abcd→abcd
99spécifiquement?