pengantar
Tulis sebuah solver untuk teka-teki Hitori menggunakan byte terkecil.
Tantangan
Tugas Anda adalah menulis sebuah pemecah untuk Hitori (ひ と り, kata untuk "sendirian" dalam bahasa Jepang; arti dari nama permainan adalah "Biarkan aku sendiri") teka-teki logis. Aturannya adalah sebagai berikut:
- Anda disajikan dengan grid sel n-by-n, setiap sel berisi bilangan bulat antara 1 dan n (inklusif).
- Tujuan Anda adalah untuk memastikan bahwa tidak ada angka yang muncul lebih dari satu kali di setiap baris dan setiap kolom grid, dengan menghapus angka dari grid yang diberikan, tunduk pada batasan yang ditunjukkan dalam dua aturan berikutnya,
- Anda tidak dapat menghapus dua angka dari dua sel yang berdekatan (horizontal atau vertikal).
- Sel-sel bernomor yang tersisa harus semuanya terhubung satu sama lain. Ini berarti bahwa setiap dua sel bernomor yang tersisa dapat dihubungkan dengan kurva yang hanya terdiri dari segmen-segmen yang menghubungkan angka-angka yang tersisa yang berdekatan (horizontal atau vertikal). (Terima kasih kepada @ user202729 untuk menunjukkan bahwa ini tidak ada)
Saya harap aturannya sudah jelas sekarang. Jika ada sesuatu yang tidak jelas tentang aturan tersebut, periksa halaman Wikipedia .
Uji Kasus
Sel-sel dari mana angka-angka dihapus diwakili dengan 0s.
Input -> Output
4
2 2 2 4 0 2 0 4
1 4 2 3 -> 1 4 2 3
2 3 2 1 2 3 0 1
3 4 1 2 3 0 1 2
4
4 2 4 3 0 2 4 3
4 1 1 2 -> 4 1 0 2
3 1 2 1 3 0 2 1
4 3 1 3 0 3 1 0
5
1 5 3 1 2 1 5 3 0 2
5 4 1 3 4 5 0 1 3 4
3 4 3 1 5 -> 3 4 0 1 5
4 4 2 3 3 4 0 2 0 3
2 1 5 4 4 2 1 5 4 0
8
4 8 1 6 3 2 5 7 0 8 0 6 3 2 0 7
3 6 7 2 1 6 5 4 3 6 7 2 1 0 5 4
2 3 4 8 2 8 6 1 0 3 4 0 2 8 6 1
4 1 6 5 7 7 3 5 -> 4 1 0 5 7 0 3 0
7 2 3 1 8 5 1 2 7 0 3 0 8 5 1 2
3 5 6 7 3 1 8 4 0 5 6 7 0 1 8 0
6 4 2 3 5 4 7 8 6 0 2 3 5 4 7 8
8 7 1 4 2 3 5 6 8 7 1 4 0 3 0 6
9
8 6 5 6 8 1 2 2 9 8 0 5 6 0 1 2 0 9
5 6 2 4 1 7 9 8 3 5 6 2 4 1 7 9 8 3
5 8 2 5 9 9 8 2 6 0 8 0 5 0 9 0 2 0
9 5 6 6 4 3 8 4 1 9 5 6 0 4 3 8 0 1
1 1 6 3 9 9 5 6 2 -> 0 1 0 3 9 0 5 6 2
1 1 4 7 3 8 3 8 6 1 0 4 7 0 8 3 0 6
3 7 4 1 2 6 4 5 5 3 7 0 1 2 6 4 5 0
3 3 1 9 8 7 7 4 5 0 3 1 9 8 0 7 4 5
2 9 7 5 3 5 9 1 3 2 9 7 0 3 5 0 1 0
Test case ini diambil dari Concept Is Puzzles , PuzzleBooks , Concept Is Puzzles , Wikipedia , dan Youtube .
Spesifikasi
Tidak perlu khawatir tentang penanganan pengecualian.
Anda dapat mengasumsikan bahwa input selalu berupa puzzle yang valid dengan solusi yang unik dan Anda dapat mengambil keuntungan dari ini dalam menulis kode Anda.
Ini adalah kode-golf , jumlah byte terendah yang menang.
4 <= n <= 9 (16 awalnya, diubah menjadi 9 mengikuti saran Stewie Griffin, juga menyimpan beberapa masalah di IO)
Anda dapat mengambil input dan memberikan output melalui formulir standar apa pun , dan Anda bebas memilih format.
Beberapa saran untuk format keluaran adalah (tetapi Anda tidak dibatasi untuk ini)
- Mengeluarkan kisi terakhir
- Mengeluarkan kisi-kisi berisi semua angka yang dihapus
- Keluarkan daftar koordinat salah satu di atas
Seperti biasa, celah default berlaku di sini.
Terkait (terinspirasi oleh tantangan ini): Periksa apakah Semua Elemen dalam Matriks Terhubung
Tantangan terakhir saya: Perpanjangan Game Sevens
4 <= n <= 16
, tapi test case terbesar adalah untukn=9
. Saya sarankan Anda mengirimn=16
test case, atau katakan4 <= n <= 9
. Omong-omong tantangannya :)Jawaban:
Haskell , 374 byte
Cobalah online!
sumber
APL (Dyalog Unicode) , 133 byte SBCS
Cobalah online!
Implementasi saya dari aturan # 4 (sel-sel harus membentuk satu komponen yang terhubung) agak boros, tapi tetap ini melewati semua tes dalam waktu sekitar 10 detik pada TIO.
Algoritma keseluruhan: Menyimpan dua matriks boolean
b
danw
untuk sel yang masing-masing menjadi hitam dan putih. Inisialisasib
sebagai all-zero. Inisialisasiw
sebagai 1 hanya untuk sel-sel yang bertetangga dengan tetangga yang cocok.Ulangi sampai
b
danw
menetap:tambahkan ke
b
sel yang berada di garis yang sama (horizontal atau vertikal) dan dengan nilai yang sama dengan sel diw
menambah
w
tetangga langsung dari semua sel dib
tambahkan ke
w
semua cutpoint - sel yang penghapusannya akan membagi grafik sel non-hitam menjadi beberapa komponen yang terhubungAkhirnya, output
not(b)
dikalikan dengan matriks asli.sumber
Jelly , 62 byte
Menggunakan tautan monadic isConnected user202729 dari pertanyaan lain.
Program lengkap mencetak representasi daftar daftar.
Bekerja dengan kekerasan dan sangat tidak efisien.
Cobalah online! - 3 oleh 3, karena terlalu tidak efisien untuk menjalankan bahkan ukuran 4 dalam batas TIO 60 detik!
Bagaimana?
sumber