Alternatif isim: ChessMoveQ
Her biri 4 öğeden oluşan en fazla 32 öğeden oluşan bir liste ve 4 öğeden oluşan ikinci bir liste verildiğinde, ikinci girdide ayrıntılı olarak verilen hareketin geçerli bir satranç hareketi olup olmadığını belirleyin.
İlk liste tahtadaki 32 parçanın konumunu gösterir. Her element , beyaz kralın açık olduğunu gösteren ( normal bir satranç tahtasında) <colour>, <piece-name>, <x-coord>, <y-coord>
gibi yapıyı takip edecektir . İlk girişin tüm öğeleri benzersiz olacaktır. ve her zaman 1 ile 8 arasında olacaktır. Bir örnek:["W", "K", 5, 1]
5, 1
e1
<x-coord>
<y-coord>
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8],
["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7],
["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7],
["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3],
["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1],
["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2],
["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
yönetim kurulunu temsil eder:
İkinci girdi, birincinin alt listeleriyle aynı yapılardan oluşacaktır, ancak parçanın nerede olduğunu gösteren x ve y koordinatları yerine, nereye taşınmaya çalıştığını gösterirler.
Yukarıdaki örnek için geçerli bir hamle olabilir ["W", "B", 4, 3]
(piskopos bir kareyi ileri ve sola hareket ettirebilir) ["B", "R", 4, 1]
ve kale bir şövalyeden geçmek zorunda kalacağı için geçersiz bir hamle ve piyon kareye ulaşmak için olabilir. Hareket zaman zaman birden fazla parçaya atıfta bulunabileceğinden , belirtilen parçalardan herhangi birinin hareketi yapıp yapamayacağını test etmelisiniz , sadece bunlardan birini değil. Örneğin, ilk örnek yalnızca bir fil için geçerlidir, ancak yine de geçerli bir harekettir. Ancak, hiçbir siyah kale ikinci hareketi gerçekleştiremez, bu nedenle geçersizdir.
Göreviniz, ikinci girdide ayrıntılı hareketin geçerli bir satranç hamlesi olup olmadığını belirlemektir. Kuralın geçerliliği, taşınmaya çalışan parçaya bağlı olarak değişir (geçerli hareketlerin şeması için parçanın adına tıklayın):
- Herhangi bir parça : Bu kare diğer renkten bir parça tarafından işgal edilmedikçe, zaten işgal edilmiş bir kareye veya tahtadan hiçbir parça hareket edemez. Örneğin, beyaz bir parça siyah bir parça tarafından işgal edilen bir kareye doğru hareket edebilir, ancak beyaz bir parçaya değil. Ayrıca, Şövalyeler dışında hiçbir parça, başka bir parça tarafından doğrudan engellenen karelere taşınamaz.
- Bir parça tarafından bir hareket B kare için C parçası tarafından, "doğrudan engel" bir A ise bir arasında, bir düz (ortogonal veya çapraz) hattı içinde, doğrudan B ve C .
- Herhangi bir taş : Kralın pozisyonu bir taş hareketinin geçerliliğini de etkileyebilir. Bu iki koşuldan biri karşılanırsa, taşıma geçersizdir:
- Nesli tükenmekte olan kralla aynı tarafta bir parça hareket ettirerek kralı kontrol etmeye teşhir etmek. Bu, sadece kralı kontrol etmek için hareket eden karşıt bir parça yerine, karşıt olmayan bir parça hareket yaparsa geçerlidir.
- O bu durumda kontrol altında kral bırakarak vardır çek dışına taşımak için. Kral çek ve hareket dikte ise nedenle, başka bir parça taşır, geçersiz bir hamle olduğunu sürece diğer parça kontrolü engelliyor. Bir parça kontrolü iki yoldan biriyle önleyebilir: ya parça kontrol kontrolü yapar ya da parça kontrol kontrolü ve kral arasındaki yolu engeller.
- “Çek”, kralın rakibinin (hamle sırası ise) yasal olarak bir şahı o krala taşıyabildiği bir durumdur. Bu kural tekrarlı olarak uygulanmaz, yani rakibin o krala hamle kendi kralını kontrol altında bıraksa bile bir kral kontrol altındadır.
- Piyonlar : Bir piyon, bir kareyi boş bir kareye doğru (yani beyaz ise yukarı, siyah ise aşağı doğru) hareket ettirebilir. Ayrıca üç özel durum vardır:
- Piyon henüz hareket etmediyse (Y koordinatını kullanarak bunu belirleyebilirsiniz; Y koordinatları 2 ise beyaz piyonlar hareket etmedi, Y koordinatları 7 ise siyah piyonlar hareket etmedi), piyon iki kareyi boş bir kareye ilerletebilir.
- Piyonun önünde çapraz olarak bir rakibin parçası varsa (yani beyaz ise piyonun kuzey-batı veya kuzey-doğu ya da siyah ise güney-batı veya güney-doğudaki kare üzerinde), piyonun söz konusu işgal edilen kareye taşınmasına izin verilir.
- Bir piyon normal satranç kurallarında son Y koordinatına (beyaz için 8 veya siyah için 1) hareket ederse, aynı renkteki bir kraliçe, kale, şövalye veya piskoposa yükseltilmelidir. Bu sorunun amaçları doğrultusunda, terfi seçiminin hareketin geçerli olup olmadığı (ve girdi biçiminde ifade edilememesi) ile ilgisi yoktur, ancak terfi ile sonuçlanacak piyon hareketlerine izin verilmelidir.
- Piskoposlar : Piskoposlar, kesintisiz engelsiz kartlar arası (yani diyagonal) yol boyunca 1 ila 8 kare arasında hareket edebilir.
- Şövalyeler : Şövalyeler
L
, aşağıdaki (eşdeğer) hareketlerden birini içerenbirşekilde hareket edebilir:- Herhangi bir kardinal yönde tek bir kare, ardından 90/270 ° dönüş, ardından 2 kare ileri hareket.
- Herhangi bir kardinal yönde 2 kare, ardından 90/270 ° dönüş, ardından tek bir karenin ileri doğru son hareketi.
- Kale : Kale sürekli engelsiz kardinal yol boyunca 1 ile 8 kare arasında hareket edebilir.
- Kraliçeler : Kraliçeler, herhangi bir sürekli kardinal veya kartlararası (yani diyagonal) engellenmemiş yol boyunca 1 ila 8 kare arasında hareket edebilir.
- Krallar : Krallar kraliçe gibi hareket ederler, ancak her hamle başına sadece bir kare hareket etmekle sınırlıdırlar (yani bir kral sadece kardinal veya çapraz olarak bitişik karelere hareket edebilir). Hatırlatma olarak, kralınızı kontrol altında tutan bir hamle yapamazsınız; böylece kralınızı da kontrol altına alamazsınız.
Satranç kuralları "fırlatma" ve "pasif" olarak adlandırılan özel hamleler de içerir. Bununla birlikte, bu hamlelerin yasallığı sadece mevcut pozisyona değil, oyunun tarihine bağlı olduğundan (ve cast, aynı anda iki parçanın hareket etmesini gerektirdiğinden, giriş formatına uymayan), bu hamlelerin hiçbirini dikkate almamalısınız. var olmak (yani, patlayan veya geçen bir hareket yasadışı sayılmalıdır).
Bir taşınmanın geçerliliğini belirtmek için iki farklı sonuç çıktısı alabilirsiniz ve istediğiniz yöntemde girdi alabilirsiniz. İsterseniz konumlar için 1 dizinleme yerine 0 dizinini de seçebilirsiniz. Bu bir kod golf , bu yüzden en kısa kod kazanır!
Test senaryoları
Board
Move => Output (Reason)
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8], ["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7], ["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7], ["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3], ["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1], ["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2], ["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
["W", "R", 8, 2] => True (The rook on h1 can move forward one)
[['B', 'K', 6, 8], ['B', 'Q', 1, 7], ['B', 'N', 1, 3], ['B', 'N', 7, 1], ['B', 'B', 8, 8], ['B', 'B', 2, 5], ['B', 'R', 4, 3], ['B', 'R', 1, 5], ['B', 'P', 5, 5], ['B', 'P', 7, 2], ['B', 'P', 5, 7], ['B', 'P', 5, 6], ['B', 'P', 4, 4], ['W', 'K', 7, 3], ['W', 'Q', 3, 2], ['W', 'N', 4, 8], ['W', 'N', 7, 5], ['W', 'B', 1, 1], ['W', 'B', 8, 1], ['W', 'R', 1, 8], ['W', 'R', 3, 7], ['W', 'P', 8, 2], ['W', 'P', 6, 3], ['W', 'P', 4, 2], ['W', 'P', 1, 4], ['W', 'P', 8, 7]]
['W', 'N', 1, 5] => False (Neither knight to move to a5 from where they are)
[['B', 'K', 7, 3], ['B', 'Q', 2, 4], ['B', 'N', 5, 2], ['B', 'N', 1, 6], ['B', 'B', 7, 7], ['B', 'B', 1, 8], ['W', 'K', 7, 1], ['W', 'Q', 6, 1], ['W', 'N', 5, 6], ['W', 'N', 3, 3], ['W', 'B', 2, 2], ['W', 'B', 6, 5]]
['B', 'K', 8, 3] => False (The white bishop would put the king in check)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 5, 8] => False (The white queen currently has the king in check, and this move doesn't prevent that)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 7, 5] => True (The king is in check, and the knight blocks that)
[['B', 'K', 8, 3], ['B', 'Q', 6, 5], ['B', 'N', 7, 8], ['B', 'N', 3, 7], ['B', 'B', 4, 1], ['B', 'B', 1, 1], ['W', 'K', 7, 7], ['W', 'Q', 7, 1], ['W', 'N', 2, 2], ['W', 'N', 1, 3], ['W', 'B', 3, 5]]
['B', 'B', 2, 2] => True (takes the white knight)
[['B', 'K', 6, 1], ['B', 'Q', 6, 2], ['W', 'K', 8, 1]]
['B', 'Q', 7, 1] => True (Smallest checkmate possible, in terms of bounding box)
Bu meydan okuma korumalı . Herhangi bir açıklama yapmadan downvotes aldı, bu yüzden yine de göndermeye karar verdim