Dado um labirinto em stdin e um ponto de entrada, escreva um programa que imprima um caminho para a saída em stdout. Qualquer caminho é aceitável, desde que o seu programa não gere o caminho trivial (passando por todos os pontos do labirinto) para cada labirinto.
Na entrada, as paredes são marcadas por a #
e o ponto de entrada por a @
. Você pode usar qualquer caractere para desenhar o labirinto e o caminho na saída, desde que todos sejam distintos.
Você pode assumir que:
- Os pontos de entrada e saída estão nas bordas da entrada
- Cada linha da entrada tem o mesmo comprimento
- O labirinto é solucionável e não tem ciclos
- Existe apenas um ponto de saída
A solução mais curta por contagem de caracteres (Unicode) vence.
Exemplos
(observe que as entradas são preenchidas com espaços)
####
# #
@ #####
# #
#
#######
####
# #
@*#####
#* #
#******
#######
### ###################
### # #
## ######### # #
# ##### #
############### #@##
###*###################
###*********#*********#
## *#########* # *#
# *********** #####**#
############### #@##
code-golf
path-finding
maze
Lowjacker
fonte
fonte
Respostas:
Ruby 1.9, 244 caracteres
Saída para os dois exemplos:
Editar% s:
fonte
ANSI C (
384373368 caracteres)Aqui está a minha tentativa de C. Compilado e executado no Mac OS X.
Exemplo de saída para alguns testes:
Limitações: Funciona apenas para labirintos com até 1000 caracteres, mas isso pode ser facilmente aumentado. Acabei de escolher um número arbitrário em vez de me preocupar com malloc / remalloc.
Além disso, este é o código mais carregado de avisos que eu já escrevi. 19 avisos, embora pareça ainda mais com o destaque do código XCode. : D
EDITS: Editado e testado para eliminar int do main, usar ~ em vez de! = EOF e putchar em vez de printf. Obrigado pelos comentários!
fonte
int
" antesmain
e salve 4 caracteres. Também use emputchar(*(s-1))
vez deprintf("%c",*(s-1))
para economizar mais 4.0xA
por10
e!=
por^
.~
operador para verificar EOF:while(~(c=getchar())
Python, 339 caracteres
Gera um caminho mais curto através do labirinto.
Saída, por exemplo, labirintos:
fonte
Python -
510421 caracteresfonte
*
no canto inferior direito, no primeiro caso de teste (python 2.6.1). Alguma ideia?print b,r
eoprint (i,j)
, que eu presumo foram para depurar :)Python 3 , 275 bytes
Experimente online!
Porto da minha resposta para encontrar a rota mais curta em uma estrada ASCII .
Utiliza
'#'
para início,'*'
fim,'@'
parede e' '
espaço vazio. Neste, a funçãoq
é uma função auxiliar que retorna uma matriz unidimensional com o caminho mais curto no labirinto. A funçãof
pode ser reduzida em 4 bytes, não atribuindo a variávels
. Isso é incrivelmente ineficiente e provavelmente terá um tempo limite, pois chama a função de localização de caminho para cada personagem no labirinto.fonte