Oh tidak! Nemo, ikan badut kecil kita hilang di samudera ASCII ini dan ayahnya Marlin berusaha menemukannya.
Tugas Anda adalah membawa Marlin ke Nemo dengan aman. Tapi berhati-hatilah, kita punya Bruce yang hiruk pikuk, jadi lebih baik hindari dia!
Detail
Anda diberi kotak laut ASCII persegi panjang yang hanya berisi huruf kecil a-z
. Samudra ini akan memiliki nemo
, marlin
dan bruce
di dalamnya dalam bentuk polyomino terus menerus, selalu dimulai dari sel paling atas di kolom pertama polyomino. Jadi misalnya, dari semua tetromino yang mungkin, yang valid tercantum dalam cuplikan di bawah ini
Tetapi formulir seperti ini tidak valid dan tidak akan ada di input:
omen
ne
mo
nem
o
o
m
en
nem
o
n
eo
m
Terakhir, tugas Anda adalah menemukan jalur dari marlin
ubin polyomino ke nemo
ubin polyomino memastikan bahwa setiap sel di jalur Anda tidak berdekatan dengan bruce
ubin polyomino. Output Anda harus mengganti semua huruf yang bukan bagian dari marlin
ubin, nemo
ubin dan jalur yang menghubungkan keduanya dengan karakter dari rentang ASCII yang dapat dicetak (termasuk spasi) selain huruf kecil a-z
.
Contoh
Jika lautan input adalah sebagai berikut:
oxknvvolacycxg
xmliuzsxpdzkpw
warukpyhcldlgu
tucpzymenmoyhk
qnvtbsalyfrlyn
cicjrucejhiaeb
bzqfnfwqtrzqbp
ywvjanjdtzcoyh
xsjeyemojwtyhi
mcefvugvqabqtt
oihfadeihvzakk
pjuicqduvnwscv
(dengan 3 polyominos adalah:
...n..........
.mli..........
.ar...........
..............
....b.........
....ruce......
..............
.....n........
.....emo......
..............
..............
..............
)
Maka solusi yang valid mungkin terlihat seperti:
...n..........
.mli..........
.ar...........
.u............
.n............
.i............
.z............
.wvjan........
.....emo......
..............
..............
..............
Cuplikan di bawah ini berisi beberapa contoh lagi:
Catatan
- Kotak akan selalu menjadi kotak yang sempurna dan hanya akan berisi satu ubin polyomino
nemo
,marlin
danbruce
. - Jalur Anda tidak boleh melalui
bruce
atau salah satu dari 4 sel yang berdekatan (atas, bawah, kiri dan kanan) dari sel mana pun dibruce
ubin. - Selalu dijamin bahwa akan ada setidaknya satu jalur yang valid dari
marlin
kenemo
. - Tidak ada persyaratan jalur terpendek di sini, jadi pergilah!
- Meskipun Anda tidak harus menemukan jalur terpendek, setiap sel di jalur (jalur yang tidak termasuk marlin atau nemo) tidak dapat berdekatan dengan lebih dari dua sel lain di jalur.
- Jalan itu tidak harus pergi melalui
marlin
ataunemo
ubin, karena kemudian akan membingungkan ikan kecil dalam memilih arah. - Seperti biasa, Anda dapat menulis program atau fungsi, mengambil input melalui STDIN (atau setara terdekat), argumen baris perintah atau parameter fungsi, dan menghasilkan output melalui STDOUT (atau setara terdekat), mengembalikan nilai atau parameter function (out).
- Jika input multi-line tidak memungkinkan, maka Anda dapat mengasumsikan bahwa grid digabungkan dengan
|
karakter, bukan\n
. Anda juga dapat mengambil input sebagai larik baris kisi.
Ini adalah kode golf sehingga entri terpendek dalam byte menang.
sumber
k
atasl
dalam marlin terlihat? (membuat jalan dari n in marlin ke nemo)Jawaban:
Matlab 560
560 byte saat menghapus semua ruang yang tidak perlu, semua titik koma, dan semua komentar. Bisa bermain golf lebih banyak tetapi saya lelah sekarang (mungkin besok ...) Selamat malam semuanya.
PS: Saya berasumsi bahwa jalan harus memiliki keterhubungan 4 lingkungan ('+').
Fungsi panggilan: (baris baru tidak perlu)
Keluaran:
Bagaimana itu bekerja
Mengekstrak nama
Bagian pertama adalah mengekstraksi nama-nama misalnya
nemo
, yang dilakukan oleh fungsiq()
. Fungsi pertama menandai segala sesuatu sebagai 0, kemudian kemunculan huruf pertama dari nama sebagai1
, kemudian huruf kedua seolah-2
olah ada1
di lingkungan, lalu yang ketiga dan seterusnya. Setelah itu seharusnyanemo
hanya ada satu4
. Dari sana kita mundur sampai kita menemukan1
lagi dan kemudian menghapus semua angka lain yang lebih besar itu, jadi kita mendapatkan kembali topeng yang bagus di mana hurufnemo
- hurufnya ditutup. Kami melakukan ini untuk ketiga nama, dan kemudian dapat melanjutkan untuk menemukan jalan.Menemukan jalan
Kami mulai dari posisi Marlins dan mengirimkan gelombang kejut ke lubang 'gambar' langkah demi langkah. Di setiap langkah kami menambah penghitung jarak dan menandai 'piksel' di bawah muka gelombang dengan jarak saat ini. (Seperti biasanya dilakukan dengan algoritma jalur terpendek.) Gelombang muka ini jelas akan diblokir oleh area Bruce, oleh karena itu akan mengalir di sekitarnya. Langkah ini diulang sampai batas atas tercapai. Batas atas (yang diakui sangat longgar) ini sekarang adalah keliling 'gambar' (jalur terpendek akan jauh lebih pendek dalam hal apa pun). Dalam test case terlihat seperti ini:
Sekarang mulailah pada
nemo
piksel dan kurangi penghitung jarak di setiap langkah dan tambahkan tetangga dengan jarak lebih rendah berikutnya (sesuai dengan peta jarak yang kami hitung sebelumnya) ke jalur kami.sumber
Python 2 - 658
Sangat sangat tidak efisien baik dalam waktu maupun memori. Fungsi untuk mengidentifikasi pola adalah fungsi rekursif S, dan fungsi untuk menemukan jalur adalah C, yang pada dasarnya merupakan implementasi A * yang sangat tidak efisien.
Untuk pengujian gunakan ini (sangat sedikit) yang kurang golf (yang menghitung lintasan sekali sebagai gantinya untuk setiap ubin)
sumber