Beaucoup d'entre nous connaissent le jeu Tron. Vous contrôlez un "lightcycle" placé sur une grille. Le cycle lumineux avance toujours (bien que vous contrôliez la direction) et laisse une trace permanente derrière lui. Si vous tombez sur un sentier, vous vous écrasez!
Le but ici est de déterminer si un chemin donné est une boucle valide, c'est-à-dire qu'il revient à son point de départ sans "planter". Pour ce faire, nous supposons que nous commençons au point (0,0)
. Une entrée est donnée sous la forme N2E1S2W1
, avec une série de directions cardinales ( N
is north
, E
is east
, etc.), chacune suivie de la distance à parcourir dans cette direction. Dans cet exemple, vous voyageriez
N2 : North 2 to (0,2)
E1 : East 1 to (1,2)
S2 : South 2 to (1,0)
W1 : West 1 to (0,0)
Un chemin est considéré comme valide s'il se termine (0,0)
sans visiter aucune autre coordonnée plus d'une fois (il visite (0,0)
exactement deux fois. Une fois au début et une fois à la fin). Gardez à l'esprit que dans l'exemple ci-dessus, pour aller de (0,0)
à (0,2)
, nous visitons nécessairement (0,1)
aussi.
Autres exemples:
input -> output
N1E1S1W1 -> true
N1E1N1E1S2W2 -> true
N1S1E1W1 -> false // Visits (0,0) 3 times
N4E2S2W4S2E2 -> false // Visits (0,2) twice
N3E2S3 -> false // Does not return to (0,0)
N1S1 -> anything //I don't care how you evaluate this case
Votre sortie peut être sous n'importe quelle forme tant qu'elle donne la même sortie pour toute valeur véridique ou falsey.
L'entrée peut être considérée comme une chaîne ou comme une liste de caractères, sous la forme S1N2E3
... ou SNNEEE
... Il n'y a pas non plus de limite stricte sur la taille de la grille, mais supposez que l'entrée ne va rien déborder. Tant que le code est fondamentalement solide, il n'est pas crucial de gérer des cas comme N99999999999999
.
REMARQUE: Vous pouvez évaluer les cas N1S1
, E1W1
, S1N1
et W1E1
vous aimeriez cependant. Ce sont des voies techniquement valables, mais elles vont à l'encontre de l'esprit "Tron" du défi.
Notation
Il s'agit de code-golf , donc la réponse la plus courte l'emporte!
N
comme 1j
, E
comme 1
, S
comme -1j
et W
comme -1
?
N99999999999999
N1S1
doit être vrai pour être cohérent avec vos définitions car il atteint(0, 0)
deux fois et(0, 1)
une fois, ce qui est valide selon votre définition.