Hasil akhir tersedia
pengantar
Setelah KOTH saya sebelumnya dengan tema-tema berat ( perang fantasi , pandemi di seluruh dunia ...), saya kembali dengan permainan ringan baru. Kali ini, Anda berhadapan dalam situasi "seperti permainan papan". Setumpuk koin terbalik diletakkan di tengah meja yang sangat besar, dan Anda bertekad untuk mendapatkan bagian dari jarahan Anda!
Glosarium
Koin : Token yang dapat dibalik atau tidak terbalik.
Unflipped : Koin ditempatkan di atas meja dengan nilainya menunjuk ke bawah. Ini adalah kondisi default dari koin.
Terbalik : Koin ditempatkan di atas meja dengan nilainya mengarah ke atas.
Lokal : Mengacu pada tumpukan koin Anda.
Global : Mengacu pada tumpukan koin di tengah.
Prinsip
Di awal permainan, setiap pemain mulai dengan 0 poin dan 0 koin (terbalik atau tidak terbalik). Permainan ini berbasis giliran. Selama giliran mereka, pemain dapat mengambil hingga 3 tindakan berinteraksi baik dengan tumpukan koin di tengah meja, tumpukan koin mereka sendiri atau dengan pemain lain.
Play order didefinisikan secara acak pada awal permainan. Urutan para pemain dalam daftar argumen mewakili urutan giliran, dan ia bergerak dari kiri ke kanan dalam daftar itu. "Selanjutnya" dan "Sebelumnya" merujuk masing-masing ke "di sebelah kanan dalam daftar itu" dan "di sebelah kiri dalam daftar itu" dengan satu lingkaran jika Anda adalah yang terakhir dari kedua sisi.
Permainan ini berlangsung selama 50 putaran atau sampai ada 0 koin di tengah pada akhir giliran pemain (artinya Anda akan menyelesaikan 3 tindakan Anda bahkan jika tumpukan kosong setelah aksi pertama Anda, dan Anda dapat mengembalikan koin untuk membiarkannya permainan berlanjut). Jumlah awal koin global didefinisikan secara acak dengan rumus ini:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Setiap tindakan akan memberi Anda poin (atau membuat Anda kehilangan beberapa) dan pada akhir permainan, setiap koin yang Anda miliki akan ditambahkan ke poin Anda ( -1 untuk tidak terbalik, +2 untuk dibalik ). Pemain dengan skor tertinggi menang.
Kontroler memberi Anda input melalui argumen perintah, dan program Anda harus menampilkan melalui stdout.
Sintaksis
Memasukkan
Setiap kali program Anda dipanggil, ia akan menerima argumen dalam format ini:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
Babak 1-diindeks.
Contoh input
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Di sini, Anda melihat itu adalah ronde ke-6 dan Anda adalah pemain 2. Ada 52 koin di tumpukan pusat. Anda memiliki 12 poin, 1 koin terbalik dan 0 koin tidak terbalik. Poin bisa negatif.
Keluaran
Anda harus menampilkan tiga karakter (tanpa spasi, tanpa pemisah), yang masing-masing sesuai dengan satu tindakan yang akan Anda ambil giliran ini. Urutan karakter menentukan urutan tindakan. Anda dapat menampilkan tindakan yang sama beberapa kali. Jika tidak ada koin yang cukup untuk menyelesaikan tindakan Anda, koin akan menggunakan maksimum koin yang tersedia dan hanya menghitung poin untuk koin yang digunakan.
N
: Tidak Melakukan apa-apa
1
: Ambil 1 koin dari tumpukan pusat [Efek: +1 tidak berbintik lokal / -1 poin / -1 tidak berbelok global]
2
: Ambil 2 koin dari tumpukan pusat [Efek: +2 tidak berbintik lokal / -2 poin / -2 global unflipped]
3
: Ambil 3 koin dari tumpukan pusat [Efek: +3 local unflipped / -3 poin / -3 global unflipped]
A
: Masukkan kembali 1 koin dari tumpukan Anda [Efek: -1 local flflipped / +1 point / +1 global unflipped]
B
: Masukkan kembali 2 koin dari tumpukan Anda [Efek: -2 poin lokal tidak terbuka / +2 poin / +2 global poin membalikkan]
C
: Masukkan kembali 3 koin dari tumpukan Anda [Efek: -3 local poin tidak terbuka / +3 poin / +3 global unflipped]
X
: Hapus 1 koin dari tumpukan Anda[Efek: -1 local unflipped / 0 point]
Y
: Hapus 2 koin dari tumpukan Anda [Efek: -2 local unflipped / 0 point]
Z
: Hapus 3 koin dari tumpukan Anda [Efek: -3 local flflipped / 0 point]
R
: Putar koin ke pemain sebelumnya [Efek: -1 poin per unflipped diterima, +2 poin per flipped diterima / berlaku untuk semua pemain]
T
: Putar koin ke pemain berikutnya [Efek: -1 poin per unflipped diterima, +2 poin per flipped diterima / berlaku untuk semua pemain]
F
: Balik 1 koin [Efek: -1 local flflipped / +1 local flipped / +2 point]
U
: Unflip 1 coin [Efek: +1 local flflt / -1 local flipped / -2 point]
Contoh output
2FF
: Mengambil dua koin dan membalik dua koin, mencetak gol -2 + 2 + 2 = 2 points
Jika output Anda salah, controller akan menganggap NNN
.
Pengendali
Anda dapat menemukan pengontrol di GitHub . Ini juga mengandung dua samplebot, ditulis dalam Java. Untuk membuatnya berjalan, periksa proyek dan buka di Java IDE Anda. Titik masuk dalam main
metode kelas Game
. Diperlukan Java 8.
Untuk menambahkan bot, pertama Anda perlu versi kompilasi untuk Java (file .class) atau sumber untuk bahasa yang ditafsirkan. Tempatkan mereka di folder root proyek. Kemudian, buat kelas Java baru dalam players
paket (Anda dapat mengambil contoh pada bot yang sudah ada). Kelas ini harus menerapkan Player
untuk mengganti metode String getCmd()
. String yang dikembalikan adalah perintah shell untuk menjalankan bot Anda. Misalnya, Anda dapat membuat Ruby bot bekerja dengan perintah ini: return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Terakhir, tambahkan bot di larik pemain di bagian atas Game
kelas.
Aturan
- Bot tidak boleh ditulis untuk mengalahkan atau mendukung bot lain yang spesifik.
- Menulis ke file diperbolehkan. Silakan menulis ke "milikmu submisi.txt", folder akan dikosongkan sebelum permainan dimulai. Sumber daya eksternal lainnya tidak diizinkan.
- Kiriman Anda memiliki 1 detik untuk merespons.
- Berikan perintah untuk mengkompilasi dan menjalankan kiriman Anda.
Bahasa yang didukung
Saya akan mencoba dan mendukung setiap bahasa, tetapi harus tersedia online secara gratis. Harap berikan instruksi untuk pemasangan jika Anda tidak menggunakan bahasa "arus utama".
Sampai sekarang, saya dapat menjalankan: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Hasil akhir
Ini adalah hasil dari 100 pertandingan (poin ditambahkan):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
Hasil individual dari permainan tersedia di sini: http://pasted.co/63f1e924 (dengan koin awal dan jumlah putaran per game).
Hadiah 50 reputasi diberikan kepada pemenang: Bird In The Hand oleh Martin Büttner .
Terima kasih semua atas partisipasi Anda, sampai jumpa KOTH berikutnya ~