Une fourmi marche le long des bords (pas des faces) d'un cube en fil de fer. Chaque sommet qu’il rencontre le présente avec une fourche à partir de laquelle deux nouvelles arêtes se ramifient. La fourmi choisit quel chemin tourner - left
ou right
. Ces directions sont relatives à la fourmi, qui fait face au sommet et se trouve en dehors du cube. Votre but est de déterminer, à partir de la séquence de left
/ right
choix que la fourmi a pris, si elle se termine à la même position qu’elle a commencé.
Par exemple, si la fourmi tourne à gauche quatre fois ( left left left left
), elle aura traversé un carré dans le sens anti-horaire et terminé au même endroit où elle a commencé. Mais si ça marche left left left left right
, ça finira à un endroit différent du cube. De plus, si cela se produit left right right right left
, il se termine sur son bord de départ, mais face au sommet opposé, qui ne compte pas comme la même position.
Le chemin de la fourmi peut répéter des arêtes, y compris l'arête sur lequel elle a commencé, mais ce qui compte est l'endroit où il se termine après la séquence complète.
Ecrivez une fonction nommée qui prend la séquence de tours de la fourmi et indique si la fourmi est revenue à sa position de départ après la séquence. Assigner une fonction sans nom à une variable suffit à en faire une fonction nommée.
(Édition: si votre langue ne peut pas créer de fonction nommée, elle peut également implémenter la fonction avec des entrées et des sorties via STDIN / impression ou la pile. Si cela n'est pas possible, faites-en un extrait dans lequel l'entrée et la sortie sont enregistrées. variables.)
Contribution
Une séquence de left
/ right
décisions de longueur 0
à 31
inclusive, représentée dans un format de votre choix. Cela peut être une chaîne de lettres R
/ L
, une liste de nombres 1
/ -1
ou un tableau de booléens. Rien de plus ringard que de les avoir comme noms de méthode ou chaînes utiles pour votre code.
S'il vous plaît, postez les cas de test dans votre format s'il diffère des cas de test ci-dessous.
Sortie
True
/ False
, 0
/ 1
ou les analogues dans votre langue.
Critères gagnants
Le moins d'octets gagne. N'oubliez pas que vous devez donner une fonction nommée. Vous pouvez avoir du code en dehors de la fonction, mais ces octets comptent également. Votre fonction devrait se comporter correctement si elle est appelée plusieurs fois.
Cas de test
True
cas (un par ligne, le second est une liste vide):
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
cas (un par ligne):
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
Voici les mêmes cas de test avec L
'et R
'.
True
cas:
RRRR
LLLL
RLRLRL
RRLLRRLL
LRRLLRRL
RRRLLLLR
RLLRLL
RRRRLLLLRLLRLL
LLLRLLRRLRLRRRRRRRRRRRRRRRRR
False
cas:
R
RR
RRR
LR
RLLLR
RLLRR
LRLR
RRRRL
LLRLRLLR
RLRRRRLLLRRLLL
Défi de crédit supplémentaire
Même chose, mais avec un dodécaèdre plutôt qu'un cube. Voir Hunt the Wumpus pour des idées.