İyi bilinen bir varyantı vardır kraliçe ve şövalyeler içerir ve olduğu söylenir sorunu N-kraliçelerini "önemli ölçüde zor" 1 . Sorun ifadesi aşağıdaki gibidir:
Bir satranç tahtasına eşit sayıda şövalye ♞ ve kraliçe ♛ koymalısınız, öyle ki hiçbir parça başka bir parçaya saldırmaz. Tahtaya bu kadar yerleştirebileceğiniz maksimum parça sayısı nedir ve kaç farklı şekilde yapabilirsiniz?
Bu ise kod golf meydan, bir giriş verilecektir n (Diliniz için en uygun bir şekilde) 3 ile 32 arasında. Belirli bir n için yukarıdaki soruna sıfır veya daha fazla çözüm olabilir. Çözüm yoksa, hiçbir şey vermemelisiniz / döndürmelisiniz ( nil , boş dize , yanlış , ...). Aksi takdirde, iki sonuç vermelisiniz:
- Herhangi bir parça saldırı altında olmadan bir kraliçe veya şövalye satranç taşının eklenmesinin mümkün olmadığı n büyüklüğü için bir çözüm tahtası (aşağıya bakınız) . Eşit sayıda kraliçe ve şövalye olmalı .
- Hiçbir girdiyi kabul etmeyen ve (i) aynı boyutta n için aynı formatta başka bir çözüm (veya hiçbir şey ) ve aynı zamanda (ii) bir sonraki çözüm için başka bir program (ve benzeri ) veren çalıştırılacak bir programın kaynağı ...).
Bunu not et:
- Programların sırası, iki kez aynı tahta dönmek asla boy sorununa yönelik olası tüm çözümleri kapsamalıdır n ve sonunda sonlandırmalıdır (çıktı üretmeden).
- İki değeri döndürebilir, birini döndürebilir ve diğerini yazdırabilir veya iki dönüş değerini yazdırabilirsiniz.
- Ancak , hem kartı hem de sonraki programı yazdırırsanız, kart sonraki programın bir parçası olarak düşünülmemelidir (panoyu yorumda yazdırmanızı veya standart çıktı ve hata akışlarını kullanmanızı öneririm).
- Dönüş olarak bir program değeri, bir kapatma değil bir dize olmalıdır.
Tahta biçimi
- Bir tahta n büyüklüğünde bir karedir .
- Bir tahta hücresi boş, bir kraliçe veya bir şövalye olabilir.
- Her hücre türü için ayrı değerler seçmelisiniz (örneğin, kartı yazdırırken Q, N dışındaki simgeleri kullanabilirsiniz).
- Yaylı olmayan bir yazı tahtası döndürürseniz , n 2’nin sipariş verilen bir koleksiyonu olmalıdır. kurulu değerler (örn matris, vektör veya satır / sütun-majör sırayla liste, ...).
Tahtayı yazdırırsanız, kareyi ya da bir çizgi olarak yazdırabilirsiniz. Örneğin, 4 boyutunda bir çözüm kartı aşağıdaki şekilde basılabilir (boşluklar gerekli değildir; takdirinize bağlı semboller):
Q - - - - - - - - - - - - - N -
Eğer öyle hissediyorsanız, şunu da yazdırabilirsiniz:
♛ · · · · · · · · · · · · · ♞ ·
... ama bu yeterli:
Q-------------N-
Simetrik çözümler olduğundan, satır büyüklüğü veya sütun büyüklüğü düzenindeki hücreler arasında yineleme yapıp yapmamanız önemli değildir. Örneğin, n = 4 için çözümler şunlardır:
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
Ayrıca n = 5 çözümlerine matris olarak bakabilirsiniz ; panoları içeren #
, q
ve n
farklı türde boş hücreleri olan semboller, (benim cevap aşağıya bakınız). N = 6 için 2836 kartı sayıyorum Sleafar yanıtında olduğu gibi, (bayt sayısını azaltarak zaman bir hata tanıttı, ama şimdi sabittir).
Kodumda bir değil iki hata bulduğum için Sleafar'a çok teşekkürler.
Gol
Bayt cinsinden en kısa kod kazanır.
Biz ilk programın boyutunu kabul eden bir ölçü n .
1 . Roger ve KW Hui tarafından Queens ve Knights (dikkat! Bir çözüm içerir)
-------------------------N--------Q-
, daha fazla parça eklenebileceği için geçersiz :) Q--------N---------------N--------Q-
.