Sen bir sümük yerküresin. Doğal olarak, balçık olarak, mümkün olduğunca fazla alana sızmak istiyorsunuz. Ama aynı şeyi yapmak isteyen 3 tane daha ince var. Üstün balçık kim olacak?
Açıklama
Tüm inceltmeler tek bir arenada toplanacak. Yargıçlar (yani kontrol programı) tüm olası 4-balçık kombinasyonlarının kapsamlı bir listesinden geçecek, bunları bir masanın köşelerine yerleştirecek ve en çok alanda hangi balçık sızdığını görecektir.
İnceltmeleriniz her turda 3 işlemden birini yapabilir: yay, zıpla veya birleştir. Bu anlamların ne olduğu hakkında daha fazla bilgi Çıktı bölümünde sunulacaktır .
Yönetim Kurulu / Arena
Arena bir kare tahta olacak (şu anda 8x8, ancak bu gelecekte değişebilir). İşte devam eden bir oyunun örnek arenası:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
Balçık 1'den 4'e kadar sayılarla (1'den 4'e kadar oyuncular) temsil edilir ve boş alan bir nokta ( .
) ile temsil edilir . Başlangıçta kart, sol üst köşedeki tek bir oyuncu 1'in balçık, sağ üstteki oyuncu 2, sol altta oyuncu 3 ve sağ altta oyuncu 4 hariç tüm boş alan olarak başlar.
Koordinatlar, koddaki okunabilirlik için 0 tabanlı satır ve sütun dizini ile temsil edilir. Örneğin, koordinatlar (3, 6) 4. sıradaki 7. kareyi temsil eder (yukarıdaki örnekte a 4
). (Bu, karelere erişmeyi kolaylaştırır:) board[coords.x][coords.y]
İşte görsel bir örnek:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Giriş
Programınızın girdisi, hangi oyuncu olduğunuz (1, 2, 3 veya 4), bir virgül ( ,
), ardından tahta / arena içeriği (yeni satırlar virgülle değiştirilir) olacaktır. Örneğin, yukarıdaki senaryoda 3. oyuncu olsaydınız, girdiniz şöyle olur:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Çıktı
Programınızın 4 tamsayı çıkması gerekir. İlk ikisi sırasıyla taşımak istediğiniz balçıkın satır ve sütun dizinidir ve sonraki ikisi, taşımak istediğiniz yerin satır ve sütun dizinidir.
Her dönüşte üç seçeneğiniz vardır: Yaymak, atlamak veya birleştirmek.
Yayılmış
Yaymak için, hedef koordinatlar taşınan balçıktan tam olarak bir kare uzakta olmalı ve hedef koordinatlardaki kare boş alan olmalıdır. Yayma, yeni bir balçık hedef koordinatlarında oluşturulur ve eski balçık olduğu değil kaldırıldı. Yeni balçık oluşturulduktan sonra, bu yeni balçık etrafındaki 8 karedeki tüm düşman incelmeleri hareket eden oyuncuya dönüştürülür.
Örneğin, Şekil 1'deki kartla, eğer oyuncu 1 çıkarsa
0 1 1 2
, sonuç Şekil 2'deki kart olacaktır.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Atlama
Atlamak için hedef koordinatlar, taşınan balçıktan tam olarak iki kare uzakta olmalı ve hedef koordinatlardaki kare boş alan olmalıdır. Jüpming yaparken, hedef koordinatlarda yeni bir balçık oluşturulur ve eski balçık kaldırılır. Yeni balçık oluşturulduktan sonra, bu yeni balçanın etrafındaki 8 karedeki tüm düşman incelmeleri hareket eden oyuncuya dönüştürülür.
Örneğin, Şekil 1'deki kartla, eğer oyuncu 1 çıkarsa
0 1 2 3
, sonuç Şekil 2'deki kart olacaktır.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Birleştirmek
Birleştirmek için, hedef koordinatlar taşınan balçıktan tam olarak bir kare uzakta olmalı ve hedef koordinatlardaki kare aynı oyuncunun balçıkı olmalıdır. Birleştirme sırasında eski balçık kaldırılır. Ardından, hedef balçık etrafındaki 8 karedeki tüm boş alanlar, hareket eden oynatıcıya dönüştürülür (taşınan eski balçık dahil değil).
Örneğin, Şekil 1'deki kartla, eğer oyuncu 1 çıkarsa
0 1 1 2
, sonuç Şekil 2'deki kart olacaktır.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Ayrıca geçersiz koordinatları (ör. 0 0 0 0
) Çıkararak da geçebilirsiniz .
Kurallar ve kısıtlamalar
Ek kurallar:
- Verileri devam ettirmek için kendi klasörünüzdeki dosyaları okuyabilir ve yazabilirsiniz (gönderiler depolanır
players/YourBotName/yourBotName.language
), ancak bunun dışında başka bir şeyi değiştiremez veya bunlara erişemezsiniz. İnternet erişimi yasaktır. - Gönderiminiz başka bir gönderime yardımcı olmak veya zarar vermek için özel olarak kodlanamayabilir. (Birden fazla gönderiminiz olabilir, ancak birbirleriyle hiçbir şekilde etkileşime girmemeleri gerekir.)
- Gönderinizin tur başına 0,1 saniyeden fazla sürmemesi gerekir. Gönderiniz zaman zaman 0.105 saniye sürüyorsa, bu iyidir, ancak bu zaman sınırından tutarlı bir şekilde daha uzun sürmeyebilir. (Bu, testin aşırı uzun zaman almasını önlemek için temel olarak bir sağlık kontrolüdür.)
- Gönderiminiz farklı bir dilde olsa bile, bir başkasının tam kopyası olmamalıdır (yani tam olarak aynı mantığı kullanmalıdır).
- Sunmanız ciddi bir sunum olmalıdır. Bu görüşe dayalıdır, ancak başvurunuz açıkça meydan okumayı çözmeye çalışmazsa (örn. Her turdan geçerseniz), diskalifiye edilecektir.
Gönderiminiz bu kurallardan herhangi birini ihlal ederse veya spesifikasyona uymazsa, diskalifiye edilir, buradan kaldırılır playerlist.txt
ve oyun baştan başlar. Gönderiminiz diskalifiye edilirse, gönderinize nedenini açıklayan bir yorum bırakacağım. Aksi takdirde, gönderiminiz skor tablosuna eklenecektir. (Gönderinizi skor tablosunda görmüyorsanız, yayınınızla ilgili açıklayıcı bir yorumunuz yoksa ve gönderinizi aşağıdaki "Son güncelleme tarihi" saatinden önce yayınladıysanız, lütfen bana söyleyin! Yanlışlıkla göz ardı etmiş olabilirim.)
Girişinize lütfen şunları ekleyin:
- Bir isim.
- Bir kabuk komut (örneğin, programı çalıştırmak için
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
vb.)- Girişin (oynatıcınız ve haritanız) buna bir komut satırı argümanı olarak ekleneceğini unutmayın.
- Programlar Ubuntu 14.04 üzerinde test edilecektir, bu nedenle kodunuzun üzerinde (serbestçe) çalıştırılabildiğinden emin olun.
- Kodunuz dilinizin farklı sürümlerinde farklı çalışıyorsa, sürüm numarası.
- Botunuzun kodu.
- Gerekirse kodun nasıl derleneceğine ilişkin talimatlar.
Denetleyici kodu / testi, örnek bot
Denetleyici kodu C ++ ile yazılmıştır ve Github'da bulunabilir . Kodunuzun nasıl çalıştırılacağı ve test edileceği ile ilgili diğer talimatları burada bulabilirsiniz.
simplebot.rb
Github'a rastgele bir balçık rastgele bir konuma yayan veya atlayan çok basit bir bot da Github'da yayınlandı .
Puanlama ve skor tablosu
Tahtadaki tüm kareler dolduğunda oyun biter ve skorlar hesaplanır. Bir oyuncunun son skoru, oyunun sonunda balçıklarını içeren karelerdir. Eğer 2000 tur geçtiyse (her oyuncu için 500) ve oyun hala bitmediyse, oyun yine de sona erecek ve skorlar oyun bitmiş gibi rapor edilecektir.
Turnuvanın sonunda, tüm oyunlardan alınan puanların ortalaması, her bir oyuncunun skor tablosunda yayınlanacak final skorunu hesaplamak için alınır. Son başvuru tarihi yoktur; Yeni gönderimler geldikçe skor tablosunu düzenli olarak güncellemeye devam edeceğim.
Gerçek bir skor tablosu görünene kadar 4 gönderim gereklidir.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Son Güncelleştirme: 22 Tem 22:27 (UTC).