Dado un laberinto en stdin y un punto de entrada, escriba un programa que imprima una ruta a la salida en stdout. Cualquier ruta es aceptable, siempre que su programa no genere la ruta trivial (pasando por cada punto del laberinto) para cada laberinto.
En la entrada, las paredes están marcadas por a #
y el punto de entrada por a @
. Puedes usar cualquier personaje para dibujar el laberinto y la ruta en la salida, siempre que sean distintos.
Puede suponer que:
- Los puntos de entrada y salida están en los bordes de la entrada.
- Cada línea de la entrada tiene la misma longitud
- El laberinto es solucionable y no tiene ciclos.
- Solo hay un punto de salida
La solución más corta por recuento de caracteres (Unicode) gana.
Ejemplos
(tenga en cuenta que las entradas están rellenadas con espacios)
####
# #
@ #####
# #
#
#######
####
# #
@*#####
#* #
#******
#######
### ###################
### # #
## ######### # #
# ##### #
############### #@##
###*###################
###*********#*********#
## *#########* # *#
# *********** #####**#
############### #@##
code-golf
path-finding
maze
Lowjacker
fuente
fuente
Respuestas:
Ruby 1.9, 244 caracteres
Salida para los dos ejemplos:
Ediciones:
fuente
ANSI C (
384373368 caracteres)Aquí está mi intento de C. Compilado y ejecutado en Mac OS X.
Salida de muestra para un par de pruebas:
Limitaciones: solo funciona para laberintos de hasta 1000 caracteres, pero esto se puede aumentar fácilmente. Acabo de elegir un número arbitrario en lugar de molestarme con malloc / remalloc.
Además, este es el código más cargado de advertencia que he escrito. 19 advertencias, aunque parece aún más con el resaltado del código XCode. :RE
EDITOS: Editado y probado para soltar int desde main, para usar ~ en lugar de! = EOF y putchar en lugar de printf. ! Gracias por los comentarios!
fuente
int
" anteriormain
y guarde 4 caracteres. Utilice también enputchar(*(s-1))
lugar deprintf("%c",*(s-1))
guardar 4 más.0xA
por10
y!=
por^
.~
operador para verificar EOF:while(~(c=getchar())
Python, 339 caracteres
Genera un camino más corto a través del laberinto.
Salida, por ejemplo, laberintos:
fuente
Python -
510421 caracteresfuente
*
en la esquina inferior derecha, en el primer caso de prueba (python 2.6.1). ¿Alguna idea?print b,r
y elprint (i,j)
, que supongo que fueron para la depuración :)Python 3 , 275 bytes
Pruébalo en línea!
Puerto de mi respuesta para encontrar la ruta más corta en una carretera ASCII .
Usos
'#'
para inicio,'*'
fin,'@'
pared y' '
espacio vacío. En esto, la funciónq
es una función auxiliar que devuelve una matriz unidimensional con la ruta más corta en el laberinto. La funciónf
se puede acortar 4 bytes al no asignar la variables
. Esto es increíblemente ineficiente y probablemente superará el tiempo de espera, ya que llama a la función de búsqueda de ruta para cada personaje en el laberinto.fuente