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: d
et alternons pour obtenir la pile: acebd
.
Haut de la pile a
: Oui! si l' on ajoute à la séquence: da
et le retirer de la pile: cebd
.
Haut de la pile c
: Non ce que nous cherchons ( e
), donc nous l' ajouterons à la séquence: dac
et alternons pour obtenir la pile: ebdc
.
Haut de la pile e
: Oui! si l' on ajoute à la séquence: dace
et le retirer de la pile: bdc
.
Haut de la pile b
: Non ce que nous cherchons ( c
), donc nous l' ajouterons à la séquence: daceb
et alternons pour obtenir la pile: dcb
.
Haut de la pile d
: Non ce que nous cherchons ( c
), donc nous l' ajouterons à la séquence: dacebd
et alternons pour obtenir la pile: cbd
.
Haut de la pile c
: Oui! si l' on ajoute à la séquence: dacebdc
et le retirer de la pile: bd
.
Haut de la pile b
: Non ce que nous cherchons ( d
), donc nous l' ajouterons à la séquence: dacebdcb
et alternons pour obtenir la pile: db
.
Haut de la pile d
: Oui! si l' on ajoute à la séquence: dacebdcbd
et le retirer de la pile: b
.
Haut de la pile b
: Oui! si l' on ajoute à la séquence: dacebdcbdb
et 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
99
spécifiquement?