İşte geçen gün düşündüğüm ilginç bir sorun, sadece kodun sahip olduğu bir özellikte değil, diğer kod parçalarına karşı bir oyun oynayarak diğer kod parçalarına karşı rekabet eden kod parçalarını da içeriyor.
Göreviniz, bir Go panosunun geçerli durumunu alan ve hangi hareketin yapılacağını veya geçeceğini belirleyen bir program oluşturmaktır.
Programınız aşağıdakileri girdi olarak kabul edecektir:
Her biri 19 karakterden oluşan ve şu anda Go panosundaki parçaları temsil eden 19 satır. Karakterinin karakteri
0
boş bir kareyi temsil eder1
, siyahtır ve2
beyazdır.Her oyuncunun sahip olduğu mahkum taşlarının sayısını temsil eden iki sayı (siyah sonra beyaz).
Sırasının hareket etmesini temsil eden bir sayı (siyah veya beyaz). Yukarıdaki gibi,
1
siyahtır ve2
beyazdır.
ve aşağıdakilerden birini çıktılayın:
a b
Hareket ettirilecek koordinatları temsil eden bir çift koordinat .1 1
sol üst karedir ve birinci ve ikinci sayılar sırasıyla aşağı ve sağa hareket etmeyi temsil eder.pass
Geçmek için bir hareketi temsil eden dize .
Örneğin, program aşağıdaki girdiyi alabilir:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000000000000000000
0001210000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
0 0 1
ki bu sadece birkaç hamlenin oynandığı bir oyunu temsil eder.
Sonra program çıktı alabilir 6 5
, yani "üstten 6. ve soldan 5. noktaya siyah bir taş koyun". Bu beyaz taşı ele geçirirdi 7 5
. Bu durumda kurulun durumu şu şekilde değişir:
0000000000000000000
0000000000000000000
0000000000000000000
0001000000000002000
0000000000000000000
0000100000000000000
0001010000000000000
0000100000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0000000000000000000
0002000000000001000
0000000000000000000
0000000000000000000
0000000000000000000
1 0 2
(Beyaz bir taş ele geçirilse de, siyah için esir sayıldığını unutmayın.)
Kodunuz ayrıca aşağıdaki özellikleri de sağlamalıdır:
Programınıza aynı giriş durumu verilirse, her zaman aynı çıkışı üretmelidir. Go AI'nin determinizmi budur. Rastgele bir bileşeni olmamalıdır.
Hangi hareketin yapılacağını belirlemek için programınızın yaklaşık 60 saniyeden fazla sürmemesi gerekir. Bu kural, hesaplama gücündeki farklılıklar nedeniyle kesinlikle uygulanmayacaktır, ancak makul bir süre içinde hareket etmelidir.
Programınızın kaynak kodu toplam 1 megabaytı (1.048.576 baytı) geçmemelidir.
Programınız her zaman yasal adımlar atmalıdır. Programınız zaten bir taşın bulunduğu yerde hareket edemez ve bir grup kendi taşının yakalanmasıyla sonuçlanacak bir parça yerleştiremez. (Bu zorluğun amaçları için kuralların bir istisnası, bir programın başlangıçta orada olan bir pozisyon oluşturmasına izin verilmesidir - çünkü sadece bir tahtanın mevcut pozisyonu verildiğinden, hangi hareketlerin yapıldığını depolaması beklenemez. önce.)
Daha sonra gönderiminiz, diğer tüm gönderilere karşı tümüyle oynayabileceğiniz bir turnuvada, yönetim kurulu durumunun boş olarak başladığı bir Go oyununda oynayacak ve her program sırayla yönetim kurulu pozisyonunun beslenip bir hamle yapacaktır. .
Her başvuru çifti iki tur oynayacaktır - her tur siyah olacak şekilde bir tur. Bu problemdeki AI'lar tamamen deterministik olduğundan, birlikte oynayan aynı AI'lardan ikisi her zaman tam olarak aynı oyunun oynanmasına neden olacaktır.
Kazanma koşulları şöyledir:
Programınız oyunun sonuna kadar oynarsa, kazananı belirlemek için Go'nun Çin puanlama kuralları kullanılacaktır. Hiçbir komi uygulanmayacak.
Programınız daha önceki bir duruma ulaşıldığı ve sonsuz bir döngüye neden olduğu noktaya kadar oynarsa, iki programın bağlandığı bildirilir.
Gönderiminiz diğer gönderilere göre kaç puan aldığını gösterir. Bir galibiyet 1 puan ve bir kravat yarım puan değerindedir. En çok puana sahip olan başvuru genel kazanandır.
Bu, herkesin herhangi bir zamanda yeni bir giriş gönderebileceği ve sıralamalar gerçekleştiğinde periyodik olarak yeniden değerlendirilecek olan bir tepenin kralı mücadelesidir.