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!
la source
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.N
comme1j
,E
comme1
,S
comme-1j
etW
comme-1
?N99999999999999
Réponses:
Pyth ,
4439 octetsSuite de tests .
la source
JavaScript,
247200 octetsn
est une fonction de la chaîne d'entrées
qui renvoie1
pour vrai et0
pour fauxVoici une version non golfée pour référence / explication:
la source
contains
ne soit une fonction dans aucun dialecte de javascript. Pourriez-vous spécifier le dialecte?Python 3 ,
236161150 octetsEssayez-le en ligne!
-75 octets grâce à Leaky Nun
-11 octets grâce à Leaky Nun Ou, si nous sommes autorisés à prendre en entrée une liste de nombres complexes décodés de longueur:
Python 2 ,
8573 octetsEssayez-le en ligne!
-12 octets grâce à M. Xcoder / -9 octets grâce à Leaky Nun (fusionné en une seule modification)
Cela me semble trop long lol
la source
Gelée ,
1412 octetsC'est la première fois que je joue au golf à Jelly. Les suggestions sont les bienvenues.
L'entrée est un tableau de
[direction, distance]
paires, où la direction est donnée sous forme de nombre complexe.Explication:
la source
Rétine , 86 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Convertissez les nombres en unaire.
La longueur de course décode les lettres.
N111
doit se transformer enNNN
, donc un est soustrait de chaque nombre unaire, puis chaque 1 duplique la lettre précédente.Générez tous les préfixes (c'est-à-dire les points sur le chemin) en tant que lignes distinctes. Un espace est préfixé pour éviter les problèmes avec les lignes vides.
Triez toutes les lettres de chaque ligne dans l'ordre, puis supprimez les paires correspondantes. On se retrouve avec un code unique pour tout point donné sur la grille.
Vérifiez l'une des deux choses suivantes: a) le dernier point ne se termine pas dans un espace (c'est-à-dire que la boucle ne s'est pas fermée), ou deux points en double dans le chemin. Si le chemin est valide, toutes les vérifications échouent et le résultat est zéro.
Inversez le résultat.
la source
Perl, 140
Fonctionne avec une entrée de chaîne. Je peux peut-être raccourcir avec le tableau, mais j'en doute. Heureux pour toute autre aide au golf :)
la source