Les serpents ressemblent à ceci:
>>>v
@ ^ v
^ >>>^ v
^ v
^<<<<<<<<<
Le serpent peut se croiser comme dans ce cas:
@
^
>^>v
^<<
Pour qu'un crossover soit valide, les personnages de chaque côté doivent se déplacer dans la même direction. L'affaire de
@
>^v
^<
peut être considéré comme peu clair et invalide.
La sortie est une chaîne de WASD
représentation allant de la tête à la queue ( @
).
Étant donné un serpent qui ne revient pas en arrière et n'est pas ambigu, pouvez-vous écrire un programme qui produira la chaîne de mouvements que le serpent prend?
C'est le golf de code, donc la réponse la plus courte l'emporte!
Cas de test:
(Remarque: le @
peut être remplacé par n'importe quel caractère absent v^<>
)
Contribution:
>>>>v
v
v<< @
v ^
>>>>>^
Production: ddddssaassdddddww
Contribution:
@>>v
^ v
^ v
^<<<
Production: dddsssaaawww
Contribution:
>>>v
v @
v ^
>>>>v ^
>>>>^
Production: dddsssddddsddddwww
Contribution:
@<< v
^ v
v<^<<
v ^
>>^
Production: ssaaaassddwwwwaa
Contribution:
@v<v
^v^v
^v^<
^<
Production: ssawwasssawww
Réponses:
Java,
626539536529 octets-87 octets en enregistrant quelques-uns dans beaucoup d'endroits. Merci à M. Public de l'avoir signalé.
-3 octets car je n'arrive pas à supprimer tous les espaces du premier coup (merci mbomb007)
+8 octets à corriger pour ce cas:
-15 octets par déclaration de variable à chargement frontal
Version lisible:
Prend une chaîne comme
v @\n>>>^
. Crée un chemin commençant à chaque coordonnée, puis renvoie le plus long. L'anticipation requise pour les chemins qui se chevauchent était la partie la plus difficile.la source
Rubis, 217
Cela commence à
@
et recule, à la recherche de voisins qui pointent vers la position actuelle (z
). Afin de choisir la bonne voie aux intersections à 4 voies, il privilégie les voisins pointant dans la même direction (max_by{...}
). Si aucun voisin immédiat n'est trouvé, il suppose qu'il doit y avoir eu un croisement et atteint un niveau à la fois jusqu'à ce qu'il en trouve un (until n
etc+=1
). Ce processus se répète pour le nombre de segments du corps (sans la tête) (.scan(/\w/){...}
).Le cas de test que j'ai ajouté au puzzle ne cessait de me faire trébucher, alors je suis passé de 182 caractères à 218. Ces personnages supplémentaires faisaient tous en sorte que mes mouvements horizontaux n'entrent pas dans les lignes suivantes / précédentes. Je me demande si je peux mieux gérer cela.
Non golfé:
la source