Intro
Mari bermain golf mini! Bola golf diwakili oleh a .
dan hole oleh a O
. Anda ingin membuat satu lubang di setiap lubang, tetapi Anda tidak pandai menempatkan. Bahkan, Anda menolak untuk mencoba menempatkan secara diagonal! Hanya naik, turun, dan ke kedua sisi.
Anda berencana untuk menipu dengan menempatkan bumper ekstra \
dan /
sehingga Anda dapat menempatkan bola dengan satu tembakan. Bola memantul dari bumper di sudut kanan, seperti yang ditunjukkan dalam gambar ini.
Ingatlah untuk memanggil tembakan Anda! Beri tahu kami arah yang Anda tuju.
Lubang
1: Lubang pertama itu mudah, tembakan lurus! Tidak perlu bumper di sini.
Memasukkan:
. O
Keluaran:
right
. O
2: Satu lagi dasar, giliran pendek. Bola dipukul bemper ke lubang.
Memasukkan:
.
O
Keluaran:
left
/ .
O
atau
down
.
O /
3: Beberapa lubang sudah punya bumper!
Memasukkan:
. \O
Keluaran:
right
. \O
\/
atau
right
/ \
. /\O
4: Beberapa lubang terlalu rumit!
Memasukkan:
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
\ / /
/\ \//\ \ /
/ \ / \ \ \/
\ /\ \ / \ \
\/ \ \/ \ O/ \
/ \/
Output: (satu solusi yang mungkin, lebih banyak ada)
down
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
/ \ / /
/\ \//\ \ /
\/ \ / \ \ \/
\ /\ \ / \ / \
\/ \ \/ \ O/ \
/ \ \/
\ /
Aturan
- The masukan adalah lubang mini-golf di
STDIN
. - The Output adalah arah Anda memukul bola dan lubang mini-golf dengan bumper baru ditempatkan pada
STDOUT
. - Bumper yang ada tidak dapat dipindahkan.
- Anda dapat menambahkan sejumlah bumper untuk memecahkan lubang.
- Asumsikan ada lokasi yang valid untuk bumper yang akan memungkinkan kursus diselesaikan dalam satu putt.
- Lubang yang dikeluarkan mungkin lebih besar dari input.
- Masukan mungkin diisi dengan spasi spasi, tetapi harap tentukan dalam jawaban Anda jika Anda melakukan ini.
- Outputnya harus terlihat benar, tetapi dapat memiliki ruang putih terdepan atau tertinggal.
- Program Anda harus bekerja untuk setiap lubang yang valid. Jangan ragu untuk memposting uji kasus Anda juga!
Mencetak gol
Ini adalah kode-golf . Skor Anda adalah jumlah karakter dalam program Anda. Menang skor terendah!
right
, # 3 contoh 1 seharusnyadown
, dan # 3 contoh 2 seharusnyaup
. Tantangan yang menarik!.
adalah bola yang Anda pukul danO
adalah lubangnya. Saya mengacaukan pada # 2 contoh 1 tetapi mereka harus baik sekarang.Jawaban:
Javascript (ES6) - 651 byte
Menciptakan fungsi
G
yang menerima string (lapangan golf) sebagai input dan mengembalikan solusi penempatan yang diminta. String input mungkin atau mungkin tidak memiliki garis depan, garis trailing, dan spasi spasi tambahan. Output tidak akan memiliki spasi spasi awal atau jejak.Kode yang diperluas adalah:
Solver beroperasi dengan premis bahwa jalur apa pun dari bola (lubang) akan baik
Kami melacak jejak bola di keempat arah. Jika kami menemukan kasus 3, masalahnya terpecahkan. Jika kami menemukan kasus 2, kami menandai lokasi keluar bola. Jika keempat arah menghasilkan kasus 1, kami mengonversi ruang non-bumper pertama di sepanjang lintasan apa pun menjadi bumper (jika masalahnya dapat dipecahkan, ruang seperti itu selalu dijamin ada) dan coba lagi. Bumper yang akan kita konversi memiliki tipe yang sama dengan bumper terakhir yang dilalui lintasan kita *. Jika bola masih tersangkut dalam satu lingkaran, kami mengulangi prosesnya sebanyak yang diperlukan. Jika masalahnya dapat dipecahkan, prosedur ini dijamin pada akhirnya mengarah ke hasil 2 atau 3.
(* Perhatikan bahwa jika kita hanya mengonversi ke bemper tetap [katakanlah,
\
], ada kasus yang sangat dibuat-buat tetapi kemungkinan ada solusi yang ada tetapi kita akan gagal menemukannya.)Kami melakukan jejak serupa dari lubang, yang mengarah ke hasil 2 atau hasil 3.
Jika kedua jejak bola dan jejak lubang menghasilkan hasil 2, kami menempatkan bumper pada pinggiran jalur yang menghubungkan dua titik keluar (pada kenyataannya, bumper pinggiran ini ditempatkan terlepas dari hasil jejak, untuk mempersingkat kode). Ini melengkapi solusi.
Uji Kasus dan Keluaran
Di
Di luar
Di
Di luar
Di
Di luar
sumber
"/\\/\\\n\\.//\n// \\\n\\/ \no \\/"