Étant donné un labyrinthe sur stdin et un point d'entrée, écrivez un programme qui imprime un chemin d'accès à la sortie sur stdout. Tout chemin est acceptable, tant que votre programme ne génère pas le chemin trivial (passant par chaque point du labyrinthe) pour chaque labyrinthe.
Dans l'entrée, les murs sont marqués par un #
et le point d'entrée par un @
. Vous pouvez utiliser n'importe quel caractère pour dessiner le labyrinthe et le chemin dans la sortie, tant qu'ils sont tous distincts.
Vous pouvez supposer que:
- Les points d'entrée et de sortie sont sur les bords de l'entrée
- Chaque ligne de l'entrée a la même longueur
- Le labyrinthe est soluble et n'a pas de cycles
- Il n'y a qu'un seul point de sortie
La solution la plus courte par le nombre de caractères (Unicode) gagne.
Exemples
(notez que les entrées sont remplies d'espaces)
####
# #
@ #####
# #
#
#######
####
# #
@*#####
#* #
#******
#######
### ###################
### # #
## ######### # #
# ##### #
############### #@##
###*###################
###*********#*********#
## *#########* # *#
# *********** #####**#
############### #@##
code-golf
path-finding
maze
Lowjacker
la source
la source
Réponses:
Ruby 1.9, 244 caractères
Sortie pour les deux exemples:
Modifications:
la source
ANSI C (
384373368 caractères)Voici ma tentative C. Compilé et exécuté sur Mac OS X.
Exemple de sortie pour quelques tests:
Limitations: ne fonctionne que pour les labyrinthes jusqu'à 1 000 caractères, mais cela peut facilement être augmenté. Je viens de choisir un nombre arbitraire plutôt que de prendre la peine de malloc / remalloc.
En outre, c'est le code le plus chargé d'avertissements que j'ai jamais écrit. 19 avertissements, bien que cela ressemble encore plus à la mise en évidence du code XCode. :RÉ
EDITS: édité et testé pour supprimer int de main, pour utiliser ~ au lieu de! = EOF et putchar au lieu de printf. Merci pour les commentaires!
la source
int
" avantmain
et enregistrez 4 caractères. Utilisez égalementputchar(*(s-1))
au lieu deprintf("%c",*(s-1))
pour économiser 4 de plus.0xA
par10
et!=
par^
.~
opérateur pour vérifier l'EOF:while(~(c=getchar())
Python, 339 caractères
Génère un chemin le plus court à travers le labyrinthe.
Sortie par exemple des labyrinthes:
la source
Python -
510421 caractèresla source
*
dans le coin inférieur droit, sur le premier cas de test (python 2.6.1). Des pensées?print b,r
et leprint (i,j)
, que je suppose être pour le débogage :)Python 3 , 275 octets
Essayez-le en ligne!
Port de ma réponse à Trouver l'itinéraire le plus court sur une route ASCII .
Utilise
'#'
pour le début,'*'
pour la fin,'@'
pour le mur et' '
pour l'espace vide. En cela, la fonctionq
est une fonction d'aide qui renvoie un tableau unidimensionnel avec le chemin le plus court dans le labyrinthe. La fonctionf
peut être raccourcie de 4 octets en n'affectant pas la variables
. Ceci est incroyablement inefficace et expirera probablement, car il appelle la fonction de recherche de chemin pour chaque personnage du labyrinthe.la source