Arka fon
Hex , K×K
altıgen fayans eşkenar dörtgen üzerinde oynanan iki kişilik soyut bir strateji oyunudur . Eşkenar dörtgen iki karşıt taraf beyaz renklidir ve diğer iki siyah ve iki oyuncu, siyah ve beyaz, boş bir kiremit üzerine renklerinin bir token yerleştirerek sırayla alırlar. Renklerinin karşı tarafları arasında bir yol inşa etmeyi başaran oyuncu kazanır. Oyunun berabere bitemeyeceği ve ilk oyuncunun tahta boyutundan bağımsız olarak kazanma stratejisine sahip olduğu bilinmektedir (ayrıntılar için Wikipedia sayfasına bakın).
Görev
Bu meydan okumada, tahta boyutunu sabitleriz ve kartı K = 4
aşağıdaki tablo olarak temsil ederiz . Kalın çizgiler bitişik karoları gösterir.
Göreviniz ilk oyuncu için siyah veya beyaz olmayı seçebileceğiniz bir kazanan strateji oluşturmaktır. Bu, rakip oyuncunun hangi yasal hamle yaparsa yapsın, oyunun bir zaferle sonuçlanması gerektiği anlamına gelir. Girişiniz bir oyun pozisyonudur (kartta jetonların düzenlenmesi) ve çıktınız aşağıda belirtilen biçimde yasal bir harekettir. Kendiniz kazanan bir strateji bulmak istiyorsanız, bu spoileri okumayın:
Birincisi, beyazın önce geldiğini varsayarak, olası bir kazanma stratejisinin ana hatlarını çizin. Önce 5'i seçin. Bundan sonra, 5'ten alt satıra giden bir yolunuz varsa VEYA siyah herhangi bir noktada 0 veya 1'i seçerse, 0 veya 1'den hangisinin boş olduğunu seçerek yanıt verin. Siyah 9 veya 13'ü seçerse, 10'u seçin ve 14 veya 15'ten hangisi boşsa. Siyah 9, 13 veya 14'ü seçmezse, 9'u ve sonraki 13 veya 14'ten hangisinin boş olduğunu seçin. Siyah 14'ü seçerse, 15'i seçerek yanıt verin. Ardından, boşsa 10'u seçin; siyah 10'u seçerse, 11 ile cevap verin. Eğer siyah 6'yı seçerse, 7 ile cevap verin ve bir sonraki 2 veya 3'ten hangisi boşsa. Siyah 6'yı seçmezse, onu seçin, böylece 5'ten alt satıra giden bir yolunuz vardır.
Giriş ve çıkış
WBE
Girişiniz, beyaz, siyah ve boş olan 16 karakterlik bir dizedir . Yukarıda sayıldığı gibi tahta karolarını temsil ederler. Aşağıdakilerden giriş yöntemini (çıkış yönteminizi de belirler) seçebilirsiniz:
- STDIN'den giriş, STDOUT'a çıkış.
- Bir komut satırı argümanı olarak giriş yapın, STDOUT'a çıkış yapın.
- 16 tek karakterlik komut satırı argümanı olarak giriş yapın, STDOUT'a çıkış yapın.
- Adlandırılmış işlevin bağımsız değişkeni olarak giriş, dönüş değeri olarak çıkış.
Çıktınız, sonraki sıranızı yerleştirdiğiniz döşemeyi temsil eder, çünkü taşıma sırası sizde olur. Aşağıdaki çıktı biçimleri arasından seçim yapabilirsiniz:
- Sıfır tabanlı bir dizin (yukarıdaki resimde kullanılan şekilde).
- Tek tabanlı bir dizin.
- Girdi dizesi,
E
hangisinin yerini alırsaW
veyaB
oynatıcınız için hangisini seçerseniz seçin.
kurallar
Stratejiniz deterministik olmalıdır. Stratejinizi kullanarak boş tahtadan erişilemeyen oyun pozisyonlarını veya her iki oyuncu için zaten kazanmış olan pozisyonları doğru bir şekilde ele almanız gerekmez ve bunlara çarpabilirsiniz. Tersine, stratejinizi kullanarak ulaşılabilen panolarda yasal bir hamle yapmalısınız.
Bu kod golf, bu yüzden en düşük bayt sayısı kazanır. Standart boşluklara izin verilmez.
Test yapmak
Girişleri doğrulamak için bir Python 3 denetleyicisi yazdım, çünkü elle yapmak çok sıkıcı olurdu. Burada bulabilirsiniz . İlk üç giriş biçimini ve Python 3 işlevlerini (diğer dillerdeki işlevlerin programlara sarılması gerekir), her üç çıkış biçimini ve her iki oynatıcıyı destekler. Eğer bir strateji kazanmıyorsa, bulduğu kaybedilen bir oyunu çıkarır, böylece programınızı değiştirebilirsiniz.
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
Uzun zaman önce kazanmış olmalıydım, yoksa yanılıyor muyum?