Anda adalah gumpalan lendir. Tentu saja, menjadi lendir, Anda ingin merembes ke area sebanyak mungkin. Tetapi ada 3 slime lain yang ingin melakukan hal yang sama persis. Siapa yang akan menjadi lendir superior?
Deskripsi
Semua slimes akan dikumpulkan menjadi satu arena. Para juri (yaitu program kontrol) akan melalui daftar lengkap dari semua kemungkinan kombinasi 4-slime, menempatkannya di sudut-sudut sebuah tabel, dan mengamati untuk melihat slime mana yang mengalir keluar di sebagian besar area.
Lendir Anda dapat melakukan salah satu dari 3 tindakan setiap belokan: menyebar, melompat, atau menggabungkan. Deskripsi lebih lanjut tentang apa artinya ini akan diberikan di bagian Output .
Dewan / Arena
Arena akan menjadi papan persegi (saat ini 8x8, tetapi ini mungkin berubah di masa depan). Berikut adalah contoh arena permainan yang sedang berlangsung:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
Slime diwakili oleh angka 1 hingga 4 (pemain 1 hingga 4), dan ruang kosong diwakili oleh sebuah titik ( .
). Awalnya, papan dimulai sebagai semua ruang kosong kecuali untuk satu unit lendir pemain 1 di sudut kiri atas, pemain 2 di kanan atas, pemain 3 di kiri bawah, dan pemain 4 di kanan bawah.
Koordinat diwakili oleh indeks baris dan kolom berbasis 0, agar mudah dibaca dalam kode. Misalnya, koordinat (3, 6) mewakili kuadrat ke-7 di baris ke-4 (dalam contoh di atas, a 4
). (Ini membuatnya lebih mudah untuk mengakses kotak:. board[coords.x][coords.y]
) Berikut adalah ilustrasi visual:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Memasukkan
Input program Anda akan menjadi pemain mana Anda (1, 2, 3, atau 4), koma ( ,
), kemudian konten papan / arena (dengan baris baru diganti dengan koma). Misalnya, jika Anda adalah pemain 3 dalam skenario di atas, input Anda adalah:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Keluaran
Program Anda harus menghasilkan 4 bilangan bulat. Dua yang pertama adalah indeks baris dan kolom masing-masing dari lendir yang ingin Anda pindahkan, dan dua berikutnya adalah indeks baris dan kolom di mana Anda ingin memindahkannya.
Ada tiga pilihan yang Anda miliki di setiap belokan: Sebarkan, lompat, atau gabungkan.
Penyebaran
Untuk menyebar, koordinat target harus tepat satu kotak dari lendir yang dipindahkan, dan kotak pada koordinat target harus berupa ruang kosong. Saat menyebar, slime baru dibuat pada koordinat target dan slime lama tidak dihilangkan. Setelah lendir baru dibuat, semua lendir musuh dalam 8 kotak di sekitar lendir baru ini dikonversi menjadi pemain yang bergerak.
Sebagai contoh, dengan papan di Gambar. 1, jika pemain 1 adalah output
0 1 1 2
, hasilnya akan menjadi papan di Gambar. 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Melompat
Untuk melompat, koordinat target harus tepat dua kotak dari lendir yang dipindahkan, dan bujur sangkar pada koordinat target harus berupa ruang kosong. Saat jupming, lendir baru dibuat pada koordinat target dan lendir lama dihilangkan. Setelah lendir baru dibuat, semua lendir musuh dalam 8 kotak di sekitar lendir baru ini dikonversi menjadi pemain yang bergerak.
Sebagai contoh, dengan papan di Gambar. 1, jika pemain 1 adalah output
0 1 2 3
, hasilnya akan menjadi papan di Gambar. 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Menggabungkan
Untuk bergabung, koordinat target harus tepat satu kotak dari lendir yang dipindahkan, dan kotak di koordinat target harus lendir pemain yang sama. Saat penggabungan, lendir lama dihilangkan. Kemudian, semua ruang kosong dalam 8 kotak di sekitar slime target dikonversi ke pemain yang dipindahkan (tidak termasuk slime lama yang dipindahkan).
Sebagai contoh, dengan papan di Gambar. 1, jika pemain 1 adalah output
0 1 1 2
, hasilnya akan menjadi papan di Gambar. 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Anda juga dapat lulus, hanya dengan mengeluarkan koordinat yang tidak valid (mis. 0 0 0 0
).
Aturan dan batasan
Aturan tambahan adalah:
- Anda dapat membaca dan menulis file di dalam folder Anda sendiri untuk menyimpan data (pengiriman akan disimpan
players/YourBotName/yourBotName.language
), tetapi Anda tidak boleh memodifikasi atau mengakses hal lain di luarnya. Akses internet dilarang. - Kiriman Anda mungkin tidak diberi kode khusus untuk membantu atau melukai kiriman lainnya. (Anda mungkin memiliki banyak kiriman, tetapi mereka tidak boleh secara khusus berinteraksi satu sama lain dengan cara apa pun.)
- Kiriman Anda harus tidak lebih dari 0,1 detik per belokan. Jika kiriman Anda kadang-kadang membutuhkan waktu 0,105 detik, itu tidak masalah, tetapi mungkin tidak secara konsisten memakan waktu lebih lama dari batas waktu ini. (Ini terutama pemeriksaan kewarasan untuk menghindari pengujian yang memakan waktu terlalu lama.)
- Kiriman Anda tidak boleh merupakan duplikat yang tepat (yaitu menggunakan logika yang sama persis) dari yang lain, bahkan jika itu dalam bahasa yang berbeda.
- Kiriman Anda harus kiriman serius. Ini berdasarkan pendapat, tetapi jika kiriman Anda jelas tidak berusaha menyelesaikan tantangan (mis. Jika Anda melewati setiap belokan), itu akan didiskualifikasi.
Jika kiriman Anda melanggar salah satu dari aturan ini atau tidak mengikuti spesifikasi, itu akan didiskualifikasi, dihapus dari playerlist.txt
, dan game akan dimulai ulang dari awal. Jika kiriman Anda didiskualifikasi, saya akan meninggalkan komentar pada kiriman Anda yang menjelaskan alasannya. Jika tidak, kiriman Anda akan ditambahkan ke papan peringkat. (Jika Anda tidak melihat kiriman Anda di papan peringkat, tidak memiliki komentar yang jelas tentang kiriman Anda, dan memposting kiriman Anda sebelum waktu "Pembaruan terakhir" di bawah, tolong beri tahu saya! Saya mungkin secara tidak sengaja mengabaikannya.)
Dalam entri Anda, harap sertakan:
- Sebuah nama.
- Sebuah perintah shell untuk menjalankan program Anda (misalnya,
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
, dll).- Perhatikan bahwa input (pemain dan peta Anda) akan ditambahkan ke ini sebagai argumen baris perintah.
- Program akan diuji pada Ubuntu 14.04, jadi pastikan kode Anda dapat dijalankan (secara bebas) di atasnya.
- Nomor versi, jika kode Anda bekerja secara berbeda pada versi bahasa Anda yang berbeda.
- Kode bot Anda.
- Petunjuk tentang cara menyusun kode, jika perlu.
Kode pengontrol / pengujian, contoh bot
Kode pengontrol ditulis dalam C ++, dan dapat ditemukan di Github . Instruksi lebih lanjut tentang cara menjalankan dan menguji kode Anda dapat ditemukan di sana.
simplebot.rb
, bot yang sangat sederhana yang menyebar atau melompati lendir acak ke lokasi acak setiap belokan, juga dipasang di Github .
Penilaian dan papan peringkat
Ketika semua kotak di papan diisi, permainan berakhir dan skor dihitung. Skor akhir seorang pemain adalah jumlah kotak yang berisi lendir mereka di akhir pertandingan. Jika 2000 giliran telah berlalu (500 untuk setiap pemain) dan permainan masih belum berakhir, permainan akan tetap berakhir dan skor akan dilaporkan seolah-olah permainan telah berakhir.
Di akhir turnamen, skor dari semua pertandingan akan dirata-rata untuk menghitung skor akhir masing-masing pemain, yang akan diposting di papan peringkat. Tidak ada batas waktu pengiriman; Saya akan terus memperbarui leaderboard secara berkala saat kiriman baru masuk.
4 pengajuan diperlukan sampai leaderboard nyata muncul.
+--------------------------+-----------+--------------------+
| 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 |
+--------------------------+-----------+--------------------+
Terakhir diperbarui: 22 Jul 22:27 (UTC).