Мета цього завдання - написати програму або функцію, яка повертає найменшу кількість ударів, необхідних для виконання заданого курсу.
Вхідні дані
- Макет курсу можна передати будь-яким підходящим способом та форматом. (зчитування з консолі, передане як вхідний параметр, зчитування з файлу чи будь-якого іншого, багаторядковий, рядковий масив, двовимірний масив символів / байтів).
- Початкове положення кулі та отвір також можна передавати як вхід, його не потрібно розбирати з входу. У тестових випадках вони включаються в курс, щоб переконатися, що немає плутанини щодо фактичної позиції.
- Ви можете перезаписати введені символи на щось інше, якщо вони все ще розпізнаються як окремі символи (наприклад, символи для друку ASCII).
Вихідні дані
- Програма повинна повернути найменший можливий бал (найменший обсяг ударів, необхідний для досягнення отвору) за будь-який курс, пройдений як вхід у розумному форматі (рядок, ціле число, флоат або хайку, що описують результат)
- Якщо курс неможливо перемогти, поверніться
-1
(або будь-яке інше фальшиве значення на ваш вибір, яке не повернеться за переможний курс).
Приклад:
У цьому прикладі позиції позначаються на основі 0, X / Y, зліва направо, зверху вниз - але ви можете використовувати будь-який формат, який вам подобається, оскільки результат у будь-якому випадку повністю не залежить від формату.
Вхід:
###########
# ....#
# ...#
# ~ . #
# ~~~ . #
# ~~~~ #
# ~~~~ #
# ~~~~ o #
# ~~~~ #
#@~~~~ #
###########
Ball (Start-Position): 1/9
Hole (End-Position): 8/7
Вихід:
8
Правила та поля
Курс може складатися з таких полів:
'@'
М'яч - початок курсу'o'
Діра - мета курсу'#'
Стіна - Куля зупиниться, коли вдариться про стіну'~'
Вода - Слід уникати'.'
Пісок - Куля зупиниться на піску негайно' '
Ice - Куля продовжуватиме ковзати, поки щось не вдарить
Основні правила та обмеження гри:
- М'яч не може рухатися по діагоналі, лише вліво, вправо, вгору і вниз.
- Куля не зупиниться перед водою, лише перед стінами, на піску та в норі.
- Постріли у воду недійсні / неможливі
- М'яч буде залишатися в норі, а не пропускати її так, як на льоду
- Хід завжди прямокутний.
- Курс завжди межує з водою або стінами (не потрібно проводити граничних перевірок).
- Завжди рівно один куля і одна дірка.
- Не всі курси можна обіграти.
- Можливо, існує кілька шляхів, які призводять до одного (найнижчого) балу.
Лазівки та виграшні умови
- Стандартні лазівки заборонені
- Програми мають припинитись
- Ви не можете скласти додаткові правила (настільки сильно вдаряючись по м'ячу, що він проскакує над водою, відскокує від стіни, стрибає через піщані поля, криві кути тощо)
- Це код-гольф , тому рішення з найменшою кількістю символів виграє.
- Рішення повинні мати можливість обробляти всі надані тестові випадки, якщо це неможливо через обмеження використовуваної мови, будь ласка, вкажіть це у своїй відповіді.
Тестові справи
Курс №1 (2 удари)
####
# @#
#o~#
####
Курс №2 (неможливо)
#####
#@ #
# o #
# #
#####
Курс №3 (3 удари)
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~
Курс №4 (2 удари)
#########
#~~~~~~~#
#~~~@~~~#
## . ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########
Курс №5 (не можливо)
~~~~~~~
~... ~
~.@.~.~
~... ~
~ ~ ~.~
~ . .o~
~~~~~~~