Una formica cammina lungo i bordi (non le facce) di un cubo wireframe. Ogni vertice che incontra lo presenta con una forcella da cui si diramano due nuovi bordi. La formica sceglie da che parte girare - lefto right. Queste direzioni sono relative alla formica, che si trova di fronte al vertice ed è al di fuori del cubo. Il tuo obiettivo è determinare, dalla sequenza left/ rightscelte della formica, se finisce nella stessa posizione in cui è iniziata.
Ad esempio, se la formica gira a sinistra quattro volte ( left left left left), avrà attraversato un quadrato in senso antiorario e si è conclusa nello stesso punto in cui è iniziata. Ma, se va left left left left right, finirà in un punto diverso sul cubo. Inoltre, se va left right right right left, finisce sul suo bordo iniziale ma rivolto verso il vertice opposto, che non conta come la stessa posizione.
Il percorso della formica potrebbe ripetere i bordi, incluso il bordo da cui è iniziato, ma ciò che conta è dove finisce dopo l'intera sequenza.
Scrivi una funzione con nome che accetta la sequenza di turni della formica ed emette se la formica è tornata alla sua posizione iniziale dopo la sequenza. L'assegnazione di una funzione senza nome a una variabile è sufficiente per renderla una funzione con nome.
(Modifica: se la tua lingua non è in grado di creare una funzione con nome, può invece implementare la funzione con input e output tramite STDIN / stampa o stack. Se ciò non è possibile, rendilo uno snippet in cui input e output sono salvati in variabili.)
Ingresso
Una sequenza di left/ rightdecisioni di lunghezza 0per 31inclusiva, rappresentati in un formato di vostra scelta. Potrebbe trattarsi di una stringa di lettere R/ L, un elenco di numeri 1/ -1o una matrice di booleani. Niente di strano come averli come nomi di metodi o stringhe utili per il tuo codice.
Si prega di pubblicare i casi di test nel proprio formato se è diverso dai casi di test di seguito.
Produzione
True/ False, 0/ 1o analoghi nella tua lingua.
Criteri vincenti
Vince il minor numero di byte. Ricorda, devi dare una funzione con nome. Puoi avere del codice al di fuori della funzione, ma contano anche quei byte. La tua funzione dovrebbe comportarsi correttamente se chiamata più volte.
Casi test
True casi (uno per riga, il secondo è un elenco vuoto):
1 1 1 1
-1 -1 -1 -1
1 -1 1 -1 1 -1
1 1 -1 -1 1 1 -1 -1
-1 1 1 -1 -1 1 1 -1
1 1 1 -1 -1 -1 -1 1
1 -1 -1 1 -1 -1
1 1 1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1
-1 -1 -1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
False casi (uno per riga):
1
1 1
1 1 1
-1 1
1 -1 -1 -1 1
1 -1 -1 1 1
-1 1 -1 1
1 1 1 1 -1
-1 -1 1 -1 1 -1 -1 1
1 -1 1 1 1 1 -1 -1 -1 1 1 -1 -1 -1
Ecco gli stessi casi di test con L"se R".
True casi:
RRRR
LLLL
RLRLRL
RRLLRRLL
LRRLLRRL
RRRLLLLR
RLLRLL
RRRRLLLLRLLRLL
LLLRLLRRLRLRRRRRRRRRRRRRRRRR
False casi:
R
RR
RRR
LR
RLLLR
RLLRR
LRLR
RRRRL
LLRLRLLR
RLRRRRLLLRRLLL
Sfida di credito extra
Stessa cosa, ma con un dodecaedro anziché un cubo. Vedi Hunt the Wumpus per idee.