Ada varian dari masalah N-ratu yang terkenal yang melibatkan ratu dan ksatria dan dikatakan "jauh lebih sulit" 1 . Pernyataan masalah adalah sebagai berikut:
Anda harus menempatkan jumlah ksatria yang sama que dan ratu ♛ di papan catur sehingga tidak ada bagian yang menyerang bagian lainnya. Berapa jumlah maksimum potongan yang bisa Anda letakkan di papan tulis, dan berapa banyak cara berbeda yang bisa Anda lakukan?
Dalam tantangan kode-golf ini , Anda akan diberikan input n antara 3 dan 32 (dengan cara yang paling cocok untuk bahasa Anda). Untuk n yang diberikan , mungkin ada nol atau lebih solusi untuk masalah di atas. Jika tidak ada solusi, Anda harus mengeluarkan / mengembalikan apa-apa ( nihil , string kosong , false , ...). Jika tidak, Anda harus memberikan dua hasil:
- Papan solusi (lihat di bawah) untuk ukuran dan di mana tidak mungkin untuk menambahkan ratu atau bidak catur ksatria tanpa ada bagian yang sedang diserang. Harus ada jumlah ratu dan ksatria yang sama .
- Sumber program yang akan dijalankan yang tidak menerima input dan memberikan (i) solusi lain (atau tidak sama sekali ) untuk ukuran yang sama n , dalam format yang sama, serta (ii) program lain untuk solusi berikutnya (dan seterusnya). ...).
Perhatikan bahwa:
- Urutan program tidak boleh mengembalikan papan yang sama dua kali, harus mencakup semua solusi yang mungkin untuk masalah ukuran n dan akhirnya harus diakhiri (tidak menghasilkan output).
- Anda bisa mengembalikan dua nilai, mengembalikan satu dan mencetak yang lain, atau mencetak dua nilai kembali.
- Namun , jika Anda mencetak papan dan program berikutnya, papan tersebut tidak boleh dianggap sebagai bagian dari program berikutnya (saya akan merekomendasikan mencetak papan dalam komentar, atau menggunakan keluaran standar dan aliran kesalahan).
- Program-as-a-return-value harus berupa string, bukan penutupan.
Format papan
- Papan adalah ukuran persegi n .
- Sel papan bisa kosong, ratu atau ksatria.
- Anda harus memilih nilai yang berbeda untuk setiap jenis sel (yaitu Anda dapat menggunakan simbol selain Q, N saat mencetak papan).
- Jika Anda kembali papan non-string, itu harus menjadi memerintahkan koleksi n 2 nilai dewan (misalnya matriks, vektor atau daftar di baris / kolom-besar pesanan, ...).
Jika Anda mencetak papan, Anda dapat mencetaknya dengan kuadrat, atau sebagai garis. Misalnya, papan solusi ukuran 4 dapat dicetak sebagai berikut (spasi tidak diperlukan; simbol sesuai kebijaksanaan Anda):
Q - - - - - - - - - - - - - N -
Jika Anda merasa demikian, Anda juga dapat menampilkan:
♛ · · · · · · · · · · · · · ♞ ·
... tapi ini sudah cukup:
Q-------------N-
Tidak masalah jika Anda beralih melalui sel dalam urutan baris-mayor atau kolom-mayor, karena ada solusi simetris. Sebagai contoh, solusi untuk n = 4 adalah:
Q------N-------- Q----------N---- Q------------N-- Q-------------N- -Q----------N--- -Q------------N- -Q-------------N --Q---------N--- --Q----------N-- --Q------------N ---QN----------- ---Q----N------- ---Q---------N-- ---Q----------N- ---NQ----------- ----Q------N---- ----Q----------N N------Q-------- -------QN------- -------Q----N--- ---N----Q------- -------NQ------- --------Q------N N----------Q---- ----N------Q---- -----------QN--- -N----------Q--- --N---------Q--- -------N----Q--- -----------NQ--- N------------Q-- --N----------Q-- ---N---------Q-- N-------------Q- -N------------Q- ---N----------Q- -N-------------Q --N------------Q ----N----------Q --------N------Q
Anda juga dapat melihat solusi untuk n = 5 sebagai matriks ; papan berisi #
, q
dan n
simbol, yang merupakan sel kosong dari berbagai jenis (lihat jawaban saya di bawah). Saya menghitung 2836 papan untuk n = 6 , seperti pada jawaban Sleafar (saya memperkenalkan bug ketika mengurangi jumlah byte, tetapi sudah diperbaiki sekarang).
Terima kasih banyak kepada Sleafar karena menemukan bukan hanya satu tetapi dua bug dalam kode saya.
Skor
Kode terpendek dalam byte menang.
Kami mengukur ukuran program pertama, yang menerima n .
1 . Ratu dan Ksatria , oleh Roger KW Hui (waspadalah! Mengandung solusi)
-------------------------N--------Q-
tidak valid karena lebih banyak bagian dapat ditambahkan :) Q--------N---------------N--------Q-
.