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: de ruotare per ottenere lo stack: acebd.
Top of stack a: Sì! in modo da aggiungiamo alla sequenza: dae rimuoverlo dalla pila: cebd.
Cima alla pila c: Non quello che stiamo cercando ( e), in modo da aggiungiamo alla sequenza: dace ruotare per ottenere lo stack: ebdc.
Top of stack e: Sì! in modo da aggiungiamo alla sequenza: dacee rimuoverlo dalla pila: bdc.
Cima alla pila b: Non quello che stiamo cercando ( c), in modo da aggiungiamo alla sequenza: dacebe ruotare per ottenere lo stack: dcb.
Cima alla pila d: Non quello che stiamo cercando ( c), in modo da aggiungiamo alla sequenza: dacebde ruotare per ottenere lo stack: cbd.
Top of stack c: Sì! in modo da aggiungiamo alla sequenza: dacebdce rimuoverlo dalla pila: bd.
Cima alla pila b: Non quello che stiamo cercando ( d), in modo da aggiungiamo alla sequenza: dacebdcbe ruotare per ottenere lo stack: db.
Top of stack d: Sì! in modo da aggiungiamo alla sequenza: dacebdcbde rimuoverlo dalla pila: b.
Top of stack b: Sì! in modo da aggiungiamo alla sequenza: dacebdcbdbe 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
99specifico?