Di masa depan ketika Time Travel (disingkat TT) akan menjadi hal yang umum, melempar koin akan menjadi olahraga pikiran yang serius. Untuk mempersiapkan masa depan, kami membuat kompetisi untuk program-program di mana perjalanan waktu akan benar-benar terjadi dari sudut pandang entri.
Kompetisi adalah gaya round-robin King of the Hill yang terdiri dari pertandingan lempar koin antara kelas-kelas Jawa.
Aturan pertandingan melempar koin
- Ada dua pemain dan 100 putaran.
- Di setiap putaran, koin dilemparkan dan berdasarkan hasil, salah satu pemain mendapat 1 poin. Setiap pemain memiliki peluang 50% untuk mencetak poin.
- Setelah lemparan kedua pemain memiliki kesempatan untuk mengontrol waktu dengan menarik tuas.
- Jika Anda menarik tuas biru (kembalikan stopper) tidak ada TT yang mungkin untuk putaran tuas digunakan atau putaran sebelumnya lagi. Upaya TT untuk pergi ke putaran ini tidak akan berpengaruh.
- Jika Anda menarik tuas merah (reverter) Anda mencoba mengembalikan waktu kembali ke babak sebelumnya. Jika berhasil , memori lawan akan dikembalikan ke memorinya sebelum putaran yang dipilih dan hasil lemparan koin mulai dari putaran yang dipilih juga akan dihapus . Satu-satunya tanda yang mungkin untuk lawan Anda tentang TT adalah jumlah tuas yang tidak digunakan yang tidak akan dikembalikan kembali.
- Setiap pemain memiliki 5 tuas biru dan 20 tuas merah yang tidak digunakan pada awal pertandingan. Tuas ini tidak terpengaruh oleh TT.
- Jika tidak ada TT yang terjadi pada akhir ronde ke-100 permainan berakhir dan pemain dengan skor yang lebih tinggi menang.
Detail
- Babak memiliki pengindeksan berbasis 1 (bentuk 1 hingga 100).
- Sebelum putaran
x
Anda diberikan jumlah tuas biru dan merah yang tersedia, koin melemparkan hasil sampai gilirannyax
(inklusif) dan memorix-1
putaran terakhir (terakhir) Anda . - Menarik tuas biru di putaran
x
menghentikan setiap TT yang memiliki tujuan di putaranx
atau sebelumnya (itu memblokir TT jika itu terjadi pada putaran yang sama persis juga). - Mengembalikan ke putaran
x
berarti bahwa putaran berikutnya akan bulatx
. - Jika kedua pemain memilih untuk kembali di akhir putaran waktu dikembalikan ke tujuan sebelumnya yang tidak diblokir. Pemain yang mencoba untuk kembali ke waktu ini akan menyimpan ingatan mereka.
Rincian teknis
- Anda harus menulis kelas Java yang mengimplementasikan antarmuka Bot yang disediakan.
- Tambahkan bot Anda ke proyek.
- Tambahkan instance Bot Anda ke
Bot
dalam fileController.java
. - Kelas Anda tidak boleh menyimpan informasi di antara panggilan . (Dalam kebanyakan kasus hanya memiliki
final
variabel di luar fungsi memenuhi persyaratan ini.) - Anda dapat memberikan informasi kepada pengontrol di
memory
bidangAction
objek yang dikembalikan . Ini akan diberikan kembali kepada Anda di giliran berikutnya jika tidak ada TT terjadi. Jika TT terjadi, Anda akan menerima memori Anda sebelumnya yang sesuai. - Anda bisa menggunakan
totalScore()
metodeGame
kelas untuk mendapatkan skor string sejarah.
Protokol
Pada setiap kesempatan,
takeTurn(...)
metode Anda dipanggil dengan 5 argumen:- jumlah tuas biru yang tidak digunakan
- jumlah tuas merah yang tidak digunakan
- koin melempar sejarah, string yang terdiri dari 1 dan 0 menandai kemenangan dan kerugian Anda di babak sebelumnya. Karakter pertama sesuai dengan lemparan koin pertama. (Di babak pertama panjang tali akan
1
.) - sebuah string, memori Anda yang tersimpan dari babak sebelumnya
- indeks berbasis 1 dari babak ini
Di setiap belokan, metode Anda mengembalikan
Action
objek yang berisibilangan bulat di
move
bidang yang menggambarkan tindakan Anda:0
tanpa tindakan-1
untuk menarik tuas biru dan memblokir TT melalui putaran ini- bilangan bulat positif
x
, tidak lebih besar dari putaran saat ini, untuk menarik tuas merah dan mencoba untuk kembali ke putaranx
- Bilangan bulat tidak valid dianggap sebagai
0
.
string yang berisi ingatan Anda dari babak ini yang ingin Anda pertahankan. Perhatikan bahwa menyimpan memori bukan bagian penting dari tantangan . Anda dapat membuat entri yang bagus tanpa menyimpan data yang berguna dalam string. Pada putaran pertama string akan menjadi string kosong.
Metode Anda harus rata-rata tidak lebih dari 10 ms per putaran dalam suatu pertandingan.
- Kegagalan batas waktu secara teratur menyebabkan diskualifikasi.
Mencetak gol
- Memenangkan pertandingan menghasilkan 2 poin dan hasil seri menghasilkan 1 poin untuk kedua pemain. Kerugian tidak menghasilkan poin.
- Skor bot adalah jumlah total poin yang dikumpulkannya.
- Jumlah pertandingan yang dimainkan antara setiap pasangan kontestan akan tergantung pada jumlah entri dan kecepatan mereka.
Dua contoh bot sederhana diposting sebagai jawaban.
Kontroler dan Bot pasangan pertama tersedia di sini .
Hasil tes dengan bot diajukan hingga 3 November .:
Skor Total:
Oldschool: 3163
Random: 5871
RegretBot: 5269
Nostalgia: 8601
Little Ten: 8772
Analyzer: 17746
NoRegretsBot: 5833
Oracle: 15539
Deja Vu: 5491
Bad Loser: 13715
(Pengontrol didasarkan pada pengontrol tantangan penangkap Cat . Terima kasih atas @ flawr yang menjadikannya sebagai basis untuk yang ini.)
Bonus: film 6 menit yang bagus berdasarkan konsep serupa.
sumber
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.
Apa yang "melalui putaran"?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.
Jawaban:
Penganalisa
Ini menganalisis masa lalu untuk membuat prediksi terbaik untuk masa depan.
SUNTING: Menghindari waktu tuas biru. Menggunakan tuas biru secara efektif. Menggunakan tuas merah lebih efektif. Menambah kelangkaan untuk musim Halloween.
EDIT: Diatasi oleh 1 kesalahan.
EDIT: Peningkatan
computeWinningProbability
fungsi. Sekarang gunakan tuas merah dan tuas biru lebih agresif.Skor (sejak 2 November):
sumber
Nostalgia
Tidak diuji, hanya tikaman cepat dalam mencoba membuat bot yang sulit untuk diblokir (karena memutuskan kapan harus menarik tuas merah kebanyakan secara acak) tetapi itu membuat keputusan yang layak.
Sunting: Saya melewatkan aturan ini:
Itu sepertinya alasan yang baik untuk menggunakan memori - jika Anda ingat mencoba TT ke putaran tertentu, Anda mungkin gagal, jadi Anda tidak harus mencoba TT ke putaran itu lagi. Mengedit bot saya untuk mencoba menghindari ini.
sumber
Peramal
Saya tanpa malu-malu menyalin beberapa kode dari Analyzer (untuk mengurai memori). Kiriman ini mencoba menarik tuas biru lebih awal dan kemudian perlahan-lahan membangun keunggulannya. Saya pikir kinerja bot ini menebus kode jelek :)
sumber
RegretBot
Pada akhir
hidup kitapertandingan, kami menyesal kegagalan masa lalu kita, dan berusaha untuk kembali dan memperbaikinya.sumber
Sepuluh kecil
Little Ten melakukan banyak perkalian dan pembagian dengan 10, menggunakan angka yang merupakan kelipatan dari 10, dan kembali ke putaran yang merupakan kelipatan dari 10.
Sunting: Mengubah mekanika sedikit sekarang sehingga penjelasan tentang apa yang terjadi ketika tuas biru ditarik lebih jelas. Juga melakukan sedikit penyeimbangan kembali.
sumber
Acak
Strategi Random adalah sebagai berikut:
sumber
NoRegretsBot
sumber
Pecundang Buruk
Bot ini tidak menggunakan memori dan ternyata bagus (tetapi tidak mengalahkan Analyzer atau Oracle).
sumber
Oldschool
Bot ini tidak pernah melakukan tindakan apa pun karena Oldschool tidak percaya pada waktu bepergian.
sumber
Deja Vu Bot
Bot ini mencoba melacak ketika menarik biru untuk menghindari tarikan merah ke wilayah itu. Hanya akan menarik pengungkit merah ketika secara signifikan tertinggal dalam skor.
sumber