Tujuan dari tantangan ini adalah untuk menulis program atau fungsi yang mengembalikan jumlah serangan paling sedikit yang diperlukan untuk menyelesaikan kursus yang diberikan.
Memasukkan
- Tata letak kursus dapat diteruskan dengan cara dan format yang sesuai yang Anda inginkan. (baca dari konsol, diteruskan sebagai parameter input, baca dari file atau lainnya, multiline-string, array string, karakter dua dimensi / array byte).
- Posisi awal bola dan lubang bisa dilewati sebagai input juga, itu tidak harus diurai dari input. Dalam kasus uji mereka dimasukkan dalam kursus untuk memastikan tidak ada kebingungan tentang posisi sebenarnya.
- Anda dapat memetakan kembali karakter input ke sesuatu yang lain, selama mereka masih dapat dikenali sebagai karakter yang berbeda (mis. Karakter ASCII yang dapat dicetak).
Keluaran
- Program harus mengembalikan skor serendah mungkin (jumlah paling sedikit serangan yang diperlukan untuk mencapai lubang) untuk setiap kursus lulus sebagai input dalam format yang masuk akal (string, integer, float atau haiku yang menggambarkan hasil)
- Jika kursus tidak mungkin dikalahkan, kembalikan
-1
(atau nilai kepalsuan lain pilihan Anda yang tidak akan dikembalikan untuk kursus yang dapat dikalahkan ).
Contoh:
Dalam contoh ini posisi diberi notasi berbasis 0, X / Y, kiri-ke-kanan, atas-bawah - tetapi Anda dapat menggunakan format apa pun yang Anda suka karena hasilnya benar-benar bebas format.
Memasukkan:
###########
# ....#
# ...#
# ~ . #
# ~~~ . #
# ~~~~ #
# ~~~~ #
# ~~~~ o #
# ~~~~ #
#@~~~~ #
###########
Ball (Start-Position): 1/9
Hole (End-Position): 8/7
Keluaran:
8
Aturan dan bidang
Kursus ini dapat terdiri dari bidang-bidang berikut:
'@'
Ball - Awal kursus'o'
Hole - Tujuan dari kursus'#'
Wall - Ball akan berhenti ketika membentur dinding'~'
Air - Harus dihindari'.'
Pasir - Bola akan segera berhenti di pasir' '
Ice - Ball akan terus meluncur sampai menyentuh sesuatu
Aturan dasar dan batasan permainan:
- Bola tidak bisa bergerak secara diagonal, hanya kiri, kanan, atas dan bawah.
- Bola tidak akan berhenti di depan air, hanya di depan dinding, di atas pasir dan di dalam lubang.
- Tembakan ke dalam air tidak valid / tidak mungkin
- Bola akan tetap berada di dalam lubang, tidak melewatinya seperti di es
- Kursus selalu persegi panjang.
- Kursus ini selalu dibatasi oleh air atau dinding (tidak diperlukan pemeriksaan batas).
- Selalu ada tepat satu bola dan satu lubang.
- Tidak semua kursus mungkin untuk dikalahkan.
- Mungkin ada beberapa jalur yang menghasilkan skor (terendah) yang sama.
Celah dan Kondisi Kemenangan
- Celah standar dilarang
- Program harus diakhiri
- Anda tidak dapat membuat aturan tambahan (memukul bola begitu keras hingga melompati air, melambung dari dinding, melompati ladang pasir, kurva di sudut, dll.)
- Ini adalah kode-golf , jadi solusi dengan jumlah karakter paling sedikit menang.
- Solusi harus dapat menangani semua kasus uji yang disediakan, jika ini tidak mungkin karena pembatasan bahasa yang digunakan, harap sebutkan dalam jawaban Anda.
Uji kasus
Kursus # 1 (2 serangan)
####
# @#
#o~#
####
Kursus # 2 (tidak mungkin)
#####
#@ #
# o #
# #
#####
Kursus # 3 (3 pukulan)
~~~
~@~
~.~
~ ~
~ ~
~ ~
~ ~
~.~
~o~
~~~
Kursus # 4 (2 serangan)
#########
#~~~~~~~#
#~~~@~~~#
## . ##
#~ ~ ~ ~#
#~. o .~#
#~~~ ~~~#
#~~~~~~~#
#########
Kursus # 5 (tidak mungkin)
~~~~~~~
~... ~
~.@.~.~
~... ~
~ ~ ~.~
~ . .o~
~~~~~~~