Votre objectif est d'écrire un programme qui crée une carte aléatoire 10 x 10 à l'aide de 0
, 1
et 2
, et trouve le chemin le plus court de haut en bas à bas à droite, en supposant que:
0 représente un champ d'herbe: n'importe qui peut marcher dessus;
1 représente un mur: vous ne pouvez pas le traverser;
2 représente un portail: lorsque vous entrez dans un portail, vous pouvez vous déplacer vers n'importe quel autre portail de la carte.
Spécifications:
- L'élément en haut à gauche et celui en bas à droite doivent être 0 ;
- Lors de la création de la carte aléatoire, chaque champ devrait avoir 60% de chances d'être un 0 , 30% d'être un 1 et 10% d'être un 2 ;
- Vous pouvez vous déplacer dans n'importe quel champ adjacent (même en diagonale);
- Votre programme doit afficher la carte et le nombre d'étapes du chemin le plus court;
- S'il n'y a pas de chemin valide menant au champ en bas à droite, votre programme doit sortir la carte uniquement;
- Vous pouvez utiliser n'importe quelle ressource que vous souhaitez;
- Le code le plus court gagne.
Calcul des étapes:
Une étape est un mouvement réel; chaque fois que vous changez de champ, vous incrémentez le compteur.
Production:
0000100200
0100100010
1000000111
0002001000
1111100020
0001111111
0001001000
0020001111
1100110000
0000020100
9
code-golf
path-finding
maze
Vereos
la source
la source
Réponses:
GolfScript, 182 caractères
Exemples:
la source
Mathematica (344)
Bonus: mise en évidence du chemin
Je crée le graphique de tous les films possibles aux sommets voisins et j'ajoute tous les "téléports" possibles.
la source
Mathematica,
208202 caractèresBase sur les solutions de David Carraher et d'Ybeltukov. Et merci à la suggestion d'Ybeltukov.
la source
n/n
au lieu den/10
:)〚 〛
pour les crochets (ce sont des symboles Unicode corrects)Norm[# - #2] & @@ # < 2 || # \[Union] u == u &
Norm[# - #2] & @@ # < 2
signifie que la distance entre deux points est inférieure à 2, ils doivent donc être adjacents.# ⋃ u == u
signifie que les deux points sont en u.Python 3, 279
Une variante de Dijkstra. Moche, mais j'ai joué au golf autant que j'ai pu ...
Sample Run
la source
Mathematica
316 279275L'objet de base est un tableau 10x10 avec environ 60 0, 30 1 et 10 2. Le tableau est utilisé pour modifier un 10x10
GridGraph
, avec tous les bords connectés. Les nœuds qui correspondent aux cellules contenant 1 dans le tableau sont supprimés du graphique. Ces nœuds "contenant 2" sont tous connectés les uns aux autres. Ensuite, le chemin le plus court est recherché entre le sommet 1 et le sommet 100. Si un tel chemin n'existe pas, la carte est renvoyée; si un tel chemin existe, la carte et la longueur de chemin la plus courte sont affichées.Exemple d'exécution :
la source
Python (1923)
Recherche de retour en arrièreCertes pas le plus court ou le plus efficace, bien qu'il y ait une certaine mémorisation présente.
la source
JavaScript (541)
La génération du graphique se produit dans les cinq premières lignes.
f
contient les champs,p
détient les portails. La recherche proprement dite est implémentée via BFS.Exemple de sortie:
la source
Python 3 (695)
Dijkstra!
Exemple de sortie:
la source
Python, 314
C'est une mise en œuvre dégoûtante de Bellman-Ford. Cet algorithme est O (n ^ 6)! (Ce qui est correct pour n = 10)
la source
print '\n'.join(map(str,a))
; Je l'ai faitprint a
pour le golf.r*10
a 100 éléments).