Hashiwokakero ("membangun jembatan" dalam bahasa Jepang) adalah teka-teki di mana Anda ditugaskan untuk menghubungkan sekelompok pulau dengan jembatan. Aturannya adalah:
- Jembatan harus berjalan baik secara vertikal maupun horizontal antara dua pulau.
- Jembatan mungkin tidak saling bersilangan.
- Sepasang pulau mungkin dihubungkan oleh paling banyak dua jembatan paralel.
- Setiap pulau ditandai dengan angka antara 1 dan 8, termasuk. Jumlah jembatan yang terhubung ke sebuah pulau harus cocok dengan nomor di pulau itu.
- Jembatan harus menghubungkan pulau-pulau menjadi satu kelompok yang terhubung.
Tugas Anda adalah menulis sebuah program yang akan menyelesaikan teka-teki Hashiwokakero.
Anda dapat mengasumsikan bahwa setiap teka-teki yang diberikan dapat dipecahkan dan hanya ada satu solusi.
Program harus cukup efisien. Misalnya, memecahkan teka-teki 25x25 di bawah ini seharusnya tidak perlu lebih dari 10 menit pada PC rata-rata dan tidak boleh menggunakan lebih dari satu gigabyte memori. Memecahkan puzzle yang lebih kecil seperti yang 7x7 akan membutuhkan waktu beberapa detik.
Memasukkan:
Teka-teki akan diberikan sebagai peta karakter 2D, dengan digit 1untuk 8mewakili pulau, dan ruang mewakili air. Garis-garis akan diisi dengan spasi jika perlu untuk membuat mereka semua memiliki panjang yang sama.
Pulau-pulau akan selalu dipisahkan secara horizontal dan vertikal dengan setidaknya satu kuadrat air sehingga ada ruang untuk menempatkan jembatan potensial di antara mereka. Akan selalu ada setidaknya dua pulau dalam teka-teki.
Program Anda sebaiknya membaca peta puzzle dari input standar, tetapi Anda dapat menentukan metode input alternatif jika bahasa pemrograman Anda membutuhkannya.
Keluaran:
Keluaran harus seperti input, kecuali dengan spasi diganti dengan jembatan yang diperlukan. Jembatan harus digambar menggunakan karakter menggambar kotak Unicode ─(U + 2500), │(U + 2502), ═(U + 2550) dan ║(U + 2551) untuk mewakili jembatan tunggal dan ganda horisontal dan vertikal.
Jika karakter Unicode yang masalah, Anda dapat menggunakan karakter ASCII -, |, =dan Hsebagai gantinya.
Kriteria menang:
Ini kode golf. Solusi terpendek yang benar dan cukup efisien menang.
Contoh:
Teka-teki (7x7):
2 2 1
1 4 3
3 2
4
3 2 3
1
3 4 2
Larutan:
2─2──1
│1──4─3
3──2║ ║
│ │4 ║
│3─2║ 3
1║ ║ │
3──4─2
Teka-teki (25x25):
2 2 2 2 1 1 2 2 2 2 2
1 3 5 4 4 2
2 2 4 5 5 4 2 2 1 3
2 1 1 3 3 2 2
3 4 4 4 4 5 4 3 2 3
2 4 5 4 2 3
2 1 4 2 4 3 1 1 2
2 1 3 1 1 6 4 2
3 2 4 3 6 3 2
2 2 3 3 2 5 2 4 3
2 1 1 2
1 3 3 3 3 5 8 7 6 5 4
2 3 1 1 2
1 1 5 1 4 5 6 3 1 2
1 1 2 2 3 4
3 5 4 4 3 3 8 7 5 1 2
2 3 1 2 2 1 1
2 2 2 2 5 7 6 3 3
3 3 6 3 5 3 2 2 2 3
2 1 2 3 2 2
3 4 6 4 5 5 3 3 5 1
2 1 2 2 1 1 3
2 1 1 2 3 6 5 2 2
2 3 4 4 4 2 1
2 2 2 2 2 2 2 1 1 3 2
Larutan:
2─2─2──2 1 1─2─2──2──2─2
│ │ │1─3═5══4══4─2│
2 2─4─5══5═4═2│2──1 │ │3
│ 2│ ║1│ 1─3═3─2│ │ 2║
│ ║3═4│4══4─4═5─4─3──2 │3
2 4═5─4│ │ │ ║ │ │2───3│
│2─1║ ║4─2│ 4─3 │ 1│ 1 │2
2│1─3 ║║ │1 ║1──6══4 │ 2│
│3─2──4║ 3══6─3 ║ │ │ │2
2│2═3 │3──2 │ ║ 5─2│ 4─3│
│2─1│ │ │ │ ║ ║ │1 ║ │2
│ 1─3─3─3─3─5═8═7═6──5═4│
2──3───1│1─2│ ║ │ ║ ││
1 │ 1──5─1││ 4─5─6─3─1│2
1│ │1──2║ │2 │ ║ ║ │3═4│
│3─5═4 │4──3│ 3═8═7═5│1│2
2│ │ ║ 3│ 1│2──2║ │ ║1│1│
│2 │ ║ ║2 │2──2│5═7═6─3─3
3│ 3─6─3│ 5═3 │2│ ║2│2─3│
║2 │ ║ │ ║ │ 1│2─3║2│ ║2
3│ 4═6──4─5─5──3─3─5││1║│
│2 │ │1 │ │2║2──1│ ║1││3│
2│ │ 1│ │ 1║2│3══6═5─2││2
│2─3──4═4──4─2│ │ │1│
2─2──2─2──2─2─2 1 1─3─2
1 1menjadi input?
1 1, yang merupakan puzzle yang valid dan harus ditangani dengan benar.