Gambaran
Mutiara (atau Masyu) adalah permainan logika yang dimainkan di atas kisi-kisi. Ada mutiara hitam dan putih yang diletakkan di grid. Tujuannya adalah untuk membentuk satu loop tertutup yang berjalan melalui setiap mutiara hanya menggunakan segmen garis lurus dan sudut kanan.
Ada beberapa aturan yang mengatur bagaimana loop berinteraksi dengan mutiara:
- Mutiara putih harus dilalui langsung , tetapi loop harus berputar di sel sebelumnya dan / atau berikutnya di jalurnya.
- Mutiara hitam harus dihidupkan , tetapi loop harus berjalan lurus melalui sel berikutnya dan sebelumnya di jalurnya.
- Lingkaran tidak boleh melewati atau memotong sendiri. Semua sel memiliki persis nol atau dua loop masuk / keluar.
Contoh teka-teki dari Wikipedia (dan solusinya):
Tujuan Anda adalah untuk memecahkan teka-teki yang diberikan. Jika ada beberapa solusi yang mungkin, tidak masalah yang mana yang Anda berikan.
Memasukkan
Input akan berupa kotak persegi yang tidak terpecahkan . Contoh yang ditunjukkan di atas akan terlihat seperti ini:
..w.w.....
....w...b.
..b.b.w...
...w..w...
b....w...w
..w....w..
..b...w...
w...b....w
......ww..
..b......b
w
adalah mutiara putih, b
adalah mutiara hitam, dan .
merupakan sel kosong.
Asumsikan input valid. Ini berarti itu terbentuk dengan baik, dan setidaknya satu solusi mungkin. Semua puzzle yang valid setidaknya 3x3, dan mengandung setidaknya satu mutiara.
Keluaran
Output adalah serangkaian koordinat yang mewakili path. Sudut kiri atas grid adalah 0 0
, kanan atas adalah n-1 0
, di mana n adalah lebar grid.
Path hanyalah serangkaian koordinat yang diurutkan:
x1 y1 x2 y2 x3 y3 ...
Jalur diasumsikan ditutup, jadi Anda tidak perlu mengulang koordinat pertama di akhir, tetapi tidak ada penalti untuk melakukannya.
Output harus terdiri dari setidaknya semua sudut di jalan. Anda tidak harus mengeluarkan setiap sel di jalur jika tidak ada belokan. Misalnya, output untuk contoh dapat dimulai dengan:
1 0 5 0 5 1 ...
atau
1 0 2 0 3 0 4 0 5 0 5 1 ...
Keluaran seharusnya tidak mengandung sel yang tidak ada di jalur. Anda bisa mulai dari sel mana saja di jalur.
Potongan
Berikut cuplikan yang dapat Anda gunakan untuk memvisualisasikan solusi Anda. Cukup tempelkan di kisi yang sedang Anda kerjakan dan jalur yang Anda hasilkan. Saya sadar bahwa melihat kode saya itu menyakitkan, jadi saya sarankan Anda tidak;)
Uji Kasus
Kasing uji ini menunjukkan satu kemungkinan keluaran untuk setiap input (kecuali yang terakhir, yang ditunjukkan belum terpecahkan). Mungkin ada jalur lain yang valid, Anda mungkin pergi CW atau CCW atau mulai pada titik yang berbeda, dll. Solusi harus dapat menyelesaikan kasus uji dalam detik / menit / jam, bukan hari / minggu / ribuan tahun.
...
w..
..b
0 0 1 0 2 0 2 1 2 2 1 2 0 2 0 1
.wb..b
......
..b...
w.ww..
......
b....b
0 0 2 0 2 2 4 2 4 1 3 1 3 0 5 0 5 5 3 5 3 4 4 4 4 3 1 3 1 4 2 4 2 5 0 5 0 2 1 2 1 1 0 1
.....w.b.w..
ww..b...b...
.w.....b....
...wbww..b.b
....b.......
w.w.........
..w......b.b
.....bb.....
.....b.....w
w.ww..b.....
...w......w.
b..w.....b..