O objetivo deste desafio é escrever um programa ou função que retorne a menor quantidade de greves necessárias para concluir um determinado curso.
Entrada
- O layout do curso pode ser aprovado da maneira e formato adequados que você preferir. (leitura do console, transmitida como parâmetro de entrada, leitura de um arquivo ou de qualquer outra sequência multilinha, matriz de strings, matriz bidimensional de caracteres / bytes).
- A posição inicial da bola e do buraco também podem ser passados como entrada, não precisa ser analisada a partir da entrada. Nos casos de teste, eles são incluídos no curso para garantir que não haja confusão sobre a posição real.
- Você pode remapear os caracteres de entrada para outra coisa, desde que ainda sejam reconhecíveis como caracteres distintos (por exemplo, caracteres ASCII imprimíveis).
Saída
- O programa deve retornar a menor pontuação possível (menor quantidade de golpes necessários para alcançar o buraco) para qualquer curso aprovado como entrada em um formato sensato (string, número inteiro, float ou haiku que descreve o resultado)
- Se for impossível vencer o percurso, retorne
-1
(ou qualquer outro valor falso de sua escolha que não seja retornado para um percurso vencível).
Exemplo:
Neste exemplo, as posições são notadas com base em 0, X / Y, da esquerda para a direita, de cima para baixo - mas você pode usar qualquer formato que desejar, pois o resultado é totalmente independente do formato.
Entrada:
###########
# ....#
# ...#
# ~ . #
# ~~~ . #
# ~~~~ #
# ~~~~ #
# ~~~~ o #
# ~~~~ #
#@~~~~ #
###########
Ball (Start-Position): 1/9
Hole (End-Position): 8/7
Saída:
8
Regras e campos
O curso pode consistir nos seguintes campos:
'@'
Ball - O início do curso'o'
Hole - O objetivo do percurso'#'
Parede - A bola pára quando bate em uma parede'~'
Água - deve ser evitado'.'
Areia - A bola para na areia imediatamente' '
Ice - Ball continuará a deslizar até atingir algo
As regras e restrições básicas do jogo:
- A bola não pode se mover na diagonal, apenas esquerda, direita, para cima e para baixo.
- A bola não para na frente da água, apenas na frente das paredes, na areia e no buraco.
- Tiros na água são inválidos / impossíveis
- A bola ficará no buraco, não a pulará como faria no gelo
- O percurso é sempre retangular.
- O percurso é sempre delimitado por água ou paredes (não são necessárias verificações de limites).
- Sempre há exatamente uma bola e um buraco.
- Nem todos os cursos são possíveis de vencer.
- Pode haver vários caminhos que resultam na mesma pontuação (mais baixa).
Lacunas e condições vencedoras
- As brechas padrão são proibidas
- Os programas devem terminar
- Você não pode criar regras adicionais (bater na bola com tanta força que pula sobre a água, bate em uma parede, pula sobre campos de areia, curvas nos cantos etc.)
- Isso é código-golfe , então a solução com a menor quantidade de caracteres vence.
- As soluções devem poder lidar com todos os casos de teste fornecidos, se isso for impossível devido a restrições do idioma usado, especifique isso em sua resposta.
Casos de teste
Curso # 1 (2 advertências)
####
# @#
#o~#
####
Curso # 2 (não é possível)
#####
#@ #
# o #
# #
#####
Curso # 3 (3 advertências)
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~
Curso # 4 (2 advertências)
#########
#~~~~~~~#
#~~~@~~~#
## . ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########
Curso # 5 (não é possível)
~~~~~~~
~... ~
~.@.~.~
~... ~
~ ~ ~.~
~ . .o~
~~~~~~~