Ceci est un "labyrinthe de flèches":
v <
> v
> ^
> v
^ < *
Le *
marque l'endroit où vous finirez. Votre objectif est de trouver où commence le labyrinthe (d'où le labyrinthe inversé). Dans ce cas, c'est le premier >
sur la deuxième ligne.
v------<
S-+---v |
| >--^
>-+-------v
^ < *
Notez que toutes les flèches doivent être utilisées. Notez également que vous pouvez supposer que les lignes seront remplies d'espaces de longueur égale.
Votre programme doit entrer le labyrinthe de toute manière raisonnable (stdin, à partir d'un fichier, d'une boîte de message, etc.), mais le labyrinthe doit être complètement intact. Par exemple, vous ne pouvez pas saisir les lignes séparées par des virgules; l'entrée doit être exactement le labyrinthe.
Vous devez afficher le début du labyrinthe de toute manière raisonnable. Par exemple, vous pourriez
- sortir les coordonnées du début
- sortie du labyrinthe entier avec la flèche de début remplacée par un
S
- afficher le labyrinthe entier avec toutes les flèches sauf la flèche de début supprimée (espace intact!)
- etc.
Tant que vous pouvez dire par votre sortie quelle flèche est la flèche de début, alors ça va. Par exemple, une sortie de
"0"
"2"
est correct, indépendamment des nouvelles lignes et des guillemets, car vous pouvez toujours dire où était le début.
C'est le code-golf , donc le code le plus court en octets gagnera.
>v^
le>
pointe vers lev
, pas vers le^
. J'éditerai plus de choses quand je rentrerai chez moi aujourd'hui sur un ordinateur.Réponses:
GolfScript, 55 octets
Démo en ligne
Suppose que toutes les lignes d'entrée sont remplies d'espaces de la même longueur et séparées par des retours à la ligne. Sort le décalage d'octet de la flèche de départ depuis le début de la chaîne d'entrée (par exemple
12
pour l'exemple de labyrinthe dans le défi).Plus précisément, ce programme trouve les décalages d'octets de toutes les flèches qui n'ont aucune autre flèche pointant vers elles (en supposant que toutes les flèches pointent vers une flèche ou un objectif; un comportement étrange peut se produire si ce n'est pas vrai). Par défaut, s'il existe plusieurs de ces flèches (qui, par spécification, ne devraient pas être possibles en entrée valide), leurs décalages seront simplement concaténés dans la sortie. Si vous le souhaitez, vous pouvez ajouter
n*
au programme pour les séparer par des sauts de ligne à la place.Version dé-golfée avec commentaires:
la source
w
.z
pour&
éviter d'avoir besoin d'un espace supplémentaire. OTOH,?~.~)
fait un joli joli smiley. :-)GolfScript (
101100 octets)La sortie est sous la forme
[[x y]]
où les coordonnées sont toutes deux basées sur 0.Démo en ligne
Le traitement se déroule en deux phases: la première phase transforme le labyrinthe en un tableau de
[x y dx dy]
tuples; la deuxième phase associe chaque flèche / astérisque à la flèche / astérisque vers laquelle elle pointe. (Les astérisques sont considérés comme pointant vers eux-mêmes). Selon la définition du problème, il y a exactement une flèche qui n'est pas dans le résultat de cette carte, et c'est la solution.la source
;'STUFF'
simule la fournitureSTUFF
via stdin.Mathematica
491323Non golfé avec des commentaires
La procédure commence à l'arrivée ("*"), trouve la flèche qui pointe vers elle, et ainsi de suite jusqu'au départ.
La fonction, f [labyrinthe].
précurseur [{Flatten [{aboveMe [loc, a], belowMe [loc, a], rightOfMe [loc, a], leftOfMe [loc, a]}, 2], a, Prepend [list, loc]}]]
Golfé
Exemple
Le labyrinthe. Chaque paire ordonnée contient la ligne et la colonne d'une cellule. Par exemple, {2, 3} désigne la cellule de la ligne 2, colonne 3.
Contribution
Sortie : le chemin du début à la fin.
la source
Je pense que j'ai trouvé un bon moyen de résoudre ce problème, mais il m'est arrivé de craindre de jouer au golf. Je suppose que cela pourrait être BEAUCOUP plus court, donc je vais expliquer mon idée afin que les autres puissent l'utiliser s'ils la trouvent bonne.
Si chaque flèche doit être utilisée, alors toutes les flèches seront pointées par une autre flèche, sauf une, c'est notre solution.
Cela signifie que nous n'avons pas réellement à jouer le labyrinthe à l'envers, mais, en partant du coin supérieur gauche, nous avons juste besoin de vérifier la flèche pointable la plus proche pour chacun. C'est un vrai épargnant pour les grands labyrinthes (puisque vous n'avez pas à vérifier les quatre directions, mais une seule).
Voici ma solution:
PHP, 622 octets
Non golfé:
la source
PHP - 492 octets
Cette solution suppose que la carte peut être trouvée dans une variable locale
$m
. La méthode la plus courte que j'ai pour passer c'est via$_GET
:$m=$_GET['m'];
à 14 octets. Une version non golfée avec carte en variable est fournie ci-dessous pour plus de clarté de lecture.la source
K,
281277258Voici une version antérieure, non golfée
Renvoie le point de départ comme
x y
pour les index basés sur 0.la source
Python 422
L'entrée se trouve dans un fichier appelé
m.txt
. La sortie est(x, y)
mais si vous changez la dernière instruction d'impression enprint g
, la sortie sera une liste comme[(x, y), (x, y), ...]
avec toutes les étapes pour aller de la fin au début.la source