Gelecekte Time Travel (TT olarak kısaltılır) yaygın olacağı zaman, bozuk para atma ciddi bir zihin sporu haline gelecektir. Geleceğe hazırlanmak için, zaman yolculuğunun girişlerin bakış açısından gerçekten gerçekleşeceği programlar için bir yarışma yaratıyoruz.
Yarışma, Java sınıfları arasında madeni para savurma maçlarından oluşan yuvarlak-robin tarzı bir King of the Hill'dir.
Jeton savurma maçının kuralları
- İki oyuncu ve 100 mermi var.
- Her turda bir para atılır ve sonuca göre oyunculardan biri 1 puan alır. Her oyuncunun bir puan kazanma şansı% 50'dir.
- Savurmadan sonra her iki oyuncunun da kolları çekerek zamanı kontrol etme şansı vardır.
- Mavi bir kolu çekerseniz (geri durdurucu) , kolun kullanıldığı turda veya artık herhangi bir turda TT mümkün değildir. TT'nin bu turlara gitmeye çalışmasının hiçbir etkisi olmayacaktır.
- Eğer bir çekersen kırmızı kolu (Reverter) Bir önceki turda zamanı geri dönmek için deneyin. Başarılı olursa, rakibin hafızası seçilen turdan önce hafızasına döndürülecek ve seçilen turdan başlayan jeton atma sonuçları da silinecektir . Rakibiniz için TT ile ilgili tek olası işaret, geri alınmayacak olan kullanılmamış kollarının sayısı olacaktır.
- Her oyuncunun maçın başında 5 mavi ve 20 kırmızı kullanılmamış kolu vardır. Bu kollar TT'lerden etkilenmez.
- 100. turun sonunda TT olmazsa oyun sona erer ve en yüksek puana sahip oyuncu kazanır.
ayrıntılar
- Mermilerin 1 tabanlı bir dizini vardır (form 1 ila 100).
- Turdan önce
x
size mevcut mavi ve kırmızı kolların sayısı, jeton dönüşex
(dahil) ve (son)x-1
turunuzun hafızasına kadar sonuçları verir . - Mavi bir kolu yuvarlak olarak
x
çekmek, turdax
veya daha önce bir varış yeri olan TT'leri durdurur (aynı turda da bir TT'yi engeller). - Tura geri dönmek
x
, bir sonraki turun yuvarlak olacağı anlamına gelirx
. - Her iki oyuncu da bir raundun sonunda geri dönmeyi seçerse, zaman engellenmeyen önceki hedefe geri döner. Bu zamana geri dönmeye çalışan oyuncular hafızalarını koruyacak.
Teknik detaylar
- Sağlanan Bot arabirimini uygulayan bir Java sınıfı yazmalısınız.
- Botunuzu projeye ekleyin.
Bot
Dosyaya Bot'unuzun bir örneğini ekleyinController.java
.- Sınıfınız aramalar arasında bilgi bulundurmamalıdır . (Çoğu durumda yalnızca
final
işlevlerin dışında değişkenler olması bu gereksinimi karşılar.) memory
DöndürülenAction
nesnenizin alanındaki denetleyiciye bilgi verebilirsiniz . TT olmazsa, bir sonraki dönüşte size geri verilecektir. Bir TT gerçekleşirse, daha önceki ilgili belleğinizi alırsınız.- Bir geçmiş dizesinin puanını almak için sınıf
totalScore()
yöntemini kullanabilirsinizGame
.
Protokol
Her dönüşte
takeTurn(...)
yönteminiz 5 argümanla çağrılır:- kullanılmayan mavi kaldıraç sayısı
- kullanılmayan kırmızı kol sayısı
- jeton savurma geçmişi, önceki turlarda kazancınızı ve kayıplarınızı gösteren 1 ve 0'lardan oluşan bir dize. İlk karakter ilk madeni paraya karşılık gelir. (İlk turda dize uzunluğu olacaktır
1
.) - bir dizge, önceki turda depolanan belleğiniz
- bu turun 1 tabanlı endeksi
Her dönüşte yönteminiz aşağıdakileri
Action
içeren bir nesne döndürür:move
alandaki işleminizi açıklayan bir tam sayı :0
eylemsiz-1
mavi bir kolu çekmek ve TT'nin bu turdan geçmesini engellemek içinx
kırmızı bir kolu çekmek ve tekrar tura geri dönmek için geçerli turdan daha büyük olmayan pozitif bir tam sayıx
- Geçersiz tamsayılar olarak kabul edilir
0
.
bu turdan korumak istediğiniz hafızanızı içeren bir dize. Bellek depolamanın zorluğun önemli bir parçası olmadığını unutmayın . Dizede yararlı herhangi bir veri saklamadan iyi girişler yapabilirsiniz. İlk turda dize boş bir dize olacaktır.
Metodunuz bir maçta ortalama tur başına 10 ms'den fazla zaman almamalıdır.
- Zaman sınırının düzenli olarak başarısız olması diskalifiye ile sonuçlanır.
puanlama
- Maçı kazanmak 2 puan, beraberlik her iki oyuncu için 1 puan kazanır. Kayıp puan kazanmaz.
- Bir botun puanı topladığı toplam puan sayısı olacaktır.
- Her bir yarışmacı çifti arasında oynanan maç sayısı, giriş sayısına ve hızlarına bağlı olacaktır.
İki basit örnek bot yanıt olarak gönderilir.
Denetleyici ve ilk çift Bot burada bulunabilir .
Botların 3 Kasım'a kadar gönderildiği test sonuçları:
Toplam Puanlar:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(Denetleyici, Cat avcısı meydan okumasının denetleyicisine dayanır . @Flawr için bunun için bir temel oluşturduğu için teşekkürler.)
Bonus: Benzer bir konsepte dayanan güzel bir 6 dakikalık film .
If you pull a blue lever (revert stopper) no TT is possible to the round the lever was used or any earlier round anymore. TT's attempting to go to these rounds will have no effect.
If you pull a blue lever (revert stopper) no TT is possible through that round anymore. TT's attempting to go through the round will have no effect.
"Bir raunttan geçmek" nedir?