sfondo
Basato su un gioco che il mio bambino di quattro anni ha ricevuto dal suo rabbino.
L '"obiettivo" è "trovare" le lettere in un determinato ordine, ad es aecdb
. Ti viene data una pila di carte lettera, ad es daceb
. Puoi cercare nello stack solo nell'ordine indicato, anche se ciclicamente. Quando incontri una lettera che ti serve, la togli dalla pila.
Obbiettivo
Dato un ordine e una pila (permutazioni duplicate senza reciprocità), trova la sequenza di lettere in cima alla pila (è tutta ASCII stampabile) che vedi mentre giochi.
Esempio passo-passo
Dobbiamo trovare l'ordine aecdb
, dato lo stack daceb
:
Cima alla pila d
: Non quello che stiamo cercando ( a
), in modo da aggiungiamo alla sequenza: d
e ruotare per ottenere lo stack: acebd
.
Top of stack a
: Sì! in modo da aggiungiamo alla sequenza: da
e rimuoverlo dalla pila: cebd
.
Cima alla pila c
: Non quello che stiamo cercando ( e
), in modo da aggiungiamo alla sequenza: dac
e ruotare per ottenere lo stack: ebdc
.
Top of stack e
: Sì! in modo da aggiungiamo alla sequenza: dace
e rimuoverlo dalla pila: bdc
.
Cima alla pila b
: Non quello che stiamo cercando ( c
), in modo da aggiungiamo alla sequenza: daceb
e ruotare per ottenere lo stack: dcb
.
Cima alla pila d
: Non quello che stiamo cercando ( c
), in modo da aggiungiamo alla sequenza: dacebd
e ruotare per ottenere lo stack: cbd
.
Top of stack c
: Sì! in modo da aggiungiamo alla sequenza: dacebdc
e rimuoverlo dalla pila: bd
.
Cima alla pila b
: Non quello che stiamo cercando ( d
), in modo da aggiungiamo alla sequenza: dacebdcb
e ruotare per ottenere lo stack: db
.
Top of stack d
: Sì! in modo da aggiungiamo alla sequenza: dacebdcbd
e rimuoverlo dalla pila: b
.
Top of stack b
: Sì! in modo da aggiungiamo alla sequenza: dacebdcbdb
e rimuoverlo dalla pila: .
E abbiamo finito. Il risultato è dacebdcbdb
.
Implementazione di riferimento
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'))
Casi test
try
, yrt
→yrtyry
1234
, 4321
→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ
, RUAHYKCLQZXEMPBWGDIOTVJNSF
→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?
, ?
→?
a
, a
→a a
abcd
, abcd
→abcd
99
specifico?