Dalam tantangan ini, Anda harus merancang spesies organisme bersel tunggal untuk bertarung sampai mati di arena cawan petri. Arena direpresentasikan sebagai kotak persegi panjang, di mana setiap sel menempati satu ruang:
.....x....
...x...o..
...x.c..o.
.......o..
Atribut
Setiap sel memiliki tiga atribut. Saat menentukan spesies sel Anda di awal permainan, Anda mengalokasikan 12 poin di antara atribut ini.
- Hit Points (HP): Jika HP sel jatuh ke nol, ia mati. Sel-sel baru memiliki HP penuh.
- Ketika sebuah sel mati, ia meninggalkan mayat yang bisa dimakan oleh sel-sel lain untuk energi.
- Sel tidak bisa mendapatkan kembali HP yang hilang, tetapi bisa membuat sel baru dengan HP penuh dengan membaginya.
- Energi : Sebagian besar tindakan yang dilakukan sel membutuhkan energi. Dengan beristirahat secara aktif, sel dapat memperoleh kembali energi yang hilang hingga maksimum spesiesnya.
- Spesies sel dengan energi kurang dari 5 cenderung gagal, karena tidak dapat membelah untuk membuat sel baru.
- Sel tidak bisa mendapatkan kembali energi di luar nilai maksimum spesiesnya.
- Sel yang baru dibuat memiliki nilai energi awal yang disalin dari induknya (dan nilai maksimum ditentukan oleh spesifikasi spesiesnya).
- Keasaman : Jika suatu sel memilih untuk meledak, tingkat keasaman sel digunakan dalam menghitung kerusakan sel-sel yang berdekatan.
Tindakan
Setiap belokan, setiap sel dapat mengambil satu tindakan:
Pindah: Sel bergerak satu ruang ke segala arah (N / S / E / W / NE / NW / SE / SW) dengan biaya 1 energi.
- Sel tidak bisa bergerak ke ruang yang ditempati sel hidup lain.
- Sel tidak bisa bergerak dari grid.
- Pindah ke mayat sel menghancurkan mayat.
Serangan: Sebuah sel menyerang sel yang berdekatan, menghasilkan 1 hingga 3 kerusakan, dengan mengeluarkan 1 hingga 3 poin energi.
- Sel dapat menyerang ke segala arah (N / S / E / W / NE / NW / SE / SW).
- Adalah legal untuk menyerang sel-sel yang bersahabat.
Membagi: Sel membelah dan menciptakan sel baru pada ruang yang berdekatan, dengan biaya 5 energi.
- Sebuah sel dapat membelah ke segala arah (N / S / E / W / NE / NW / SE / SW).
- Sel baru memiliki HP lengkap sesuai dengan spesifikasi sel asli Anda.
- Sel baru memiliki energi sebanyak yang dimiliki sel induknya setelah mengurangi biaya pembagian. (Misalnya, sel induk dengan 8 titik energi awal akan dikurangi menjadi 3 energi dan menghasilkan sel anak dengan 3 energi).
- Sel baru tidak dapat bertindak sampai giliran Anda berikutnya.
- Sel tidak dapat membelah menjadi ruang yang ditempati oleh sel hidup, tetapi dapat membelah menjadi ruang yang ditempati oleh mayat sel mati (ini menghancurkan mayat).
Makan: Sel memakan mayat sel yang berdekatan, mendapatkan 4 energi.
- Sel bisa makan ke segala arah (N / S / E / W / NE / NW / SE / SW).
Istirahat: Sel tidak melakukan apa-apa untuk satu putaran, mendapatkan kembali 2 energi.
Meledak: Ketika sebuah sel memiliki 3 atau lebih sedikit HP dan lebih banyak energi daripada HP, ia dapat memilih untuk meledak, memberikan kerusakan pada semua delapan sel yang berdekatan.
- Kerusakan pada setiap sel yang berdekatan adalah
(exploding cell HP) + (explodng cell acidity)
- Sel yang meledak mati dan meninggalkan mayat, seperti halnya sel yang terbunuh dalam ledakan.
- Kerusakan pada setiap sel yang berdekatan adalah
Protokol
Mendirikan
Program Anda akan berjalan dengan string yang BEGIN
disediakan di stdin. Program Anda harus menulis ke stdout daftar 3 bilangan bulat non-negatif yang dipisahkan oleh ruang, mewakili HP, energi, dan keasaman untuk spesies sel Anda: misalnya 5 6 1
,. Angka-angka harus berjumlah 12. Keasaman mungkin 0
, jika Anda inginkan. (Atribut lain mungkin juga nol, tetapi secara fungsional kehilangan permainan!)
Anda mulai dengan satu sel, di sudut barat laut atau tenggara, satu ruang dari kedua sisi. Sel awal memiliki HP dan energi penuh.
Setiap sel bertindak
Setiap belokan, program Anda akan dipanggil satu kali untuk setiap sel yang hidup di tim Anda (kecuali sel yang baru saja dibuat giliran ini) sehingga sel dapat bertindak. Program Anda dilengkapi dengan data tentang stdin yang mencakup status cawan petri dan informasi tentang sel khusus ini:
10 4
..........
..xx.c....
...c...o..
......o...
6 3 5 7
Dua angka pertama menunjukkan lebar dan tinggi arena: di sini, ada arena 10-oleh-4.
- The
o
sel adalah milikmu; yangx
sel adalah musuh Anda. (Ini selalu benar; setiap pemain selalu melihat sel mereka sendirio
.) - The
.
ruang kosong. - The
c
ruang mewakili mayat sel dimakan.
Angka-angka setelah baris kosong mewakili info tentang sel ini:
- Dua angka pertama adalah
x,y
koordinat, diindeks dari0,0
di kiri atas (jadi di6 3
sini mengacu padao
sel paling selatan ). - Angka ketiga adalah HP sel; angka keempat adalah energi sel.
Program Anda harus menampilkan (untuk stdout) suatu tindakan. Pada contoh di bawah ini, kami akan menggunakan N
sebagai arahan contoh, tetapi bisa berupa arahan apa pun yang sah untuk tindakan tersebut ( N
/ S
/ E
/ W
/ NE
/ NW
/ SE
/ SW
). Semua keluaran program tidak peka huruf besar-kecil, tetapi contoh akan menggunakan huruf besar. Setiap tindakan keluaran yang tidak valid (baik karena memiliki sintaks yang tidak valid atau upaya tindakan ilegal) diabaikan dan menghasilkan sel REST
(dan dengan demikian mendapatkan 2 energi).
MOVE N
DIVIDE N
EAT N
ATTACK N 2
- angka tersebut mewakili kekuatan serangan (1 - 3)REST
EXPLODE
Giliran tim Anda terdiri dari semua sel Anda diberi kesempatan untuk bertindak, satu per satu. Semua sel Anda bertindak sebelum sel lawan bertindak. Setelah semua sel Anda bertindak, giliran Anda berakhir, dan giliran lawan Anda dimulai. Setelah semua sel lawan Anda bertindak, giliran Anda mulai lagi. Dalam giliran Anda, setiap sel diberi prioritas untuk bertindak berdasarkan usianya: sel tertua di tim Anda bertindak terlebih dahulu sebelum sel yang lebih muda.
Contoh
Begini cara suatu program berperilaku. Input dari stdin dilambangkan di sini dengan >
panah utama (dipisahkan dari input aktual oleh ruang klarifikasi) dan output pada stdout memiliki <
panah.
> BEGIN
< 5 6 1
Kemudian, program dipanggil lagi:
> 10 4
> ..........
> .o........
> ........x.
> ..........
>
> 1 1 5 6
< DIVIDE SE
Setelah giliran lawan (yang memutuskan untuk DIVIDE W
menggunakan sel awal tunggal), program Anda dipanggil dua kali, satu kali untuk setiap sel:
> 10 4
> ..........
> .o........
> ..o....xx.
> ..........
>
> 1 1 5 1
< MOVE E
Untuk doa kedua giliran Anda:
> 10 4
> ..........
> ..o.......
> ..o....xx.
> ..........
>
> 2 2 5 1
< MOVE SE
Perhatikan sel kedua ini melihat status papan yang diperbarui berdasarkan gerakan sel lain sebelumnya pada giliran Anda. Juga perhatikan sel ini telah dibuat dengan 1 energi, karena sel induk memiliki 6 energi ketika melakukan pembelahan terakhir (jadi yang asli 6, dikurangi biaya pembagian 5-energi, menciptakan sel anak dengan 1 energi).
Sekarang giliranmu selesai dan giliran lawanmu dimulai. Dua sel yang berlawanan akan diberi kesempatan untuk bertindak, dan kemudian giliran Anda berikutnya dimulai.
Kemenangan
Anda bisa menang dengan:
- Menghancurkan semua sel yang berlawanan, atau
- Memiliki lebih banyak sel daripada lawan Anda setelah setiap pemain menyelesaikan 150 putaran
Penilaian akan didasarkan pada jumlah kemenangan dalam 100 pertandingan melawan satu sama lain pengajuan. Dalam setengah dari simulasi, program Anda akan diizinkan untuk pergi dulu.
Permainan seri (yaitu jumlah sel yang sama persis setelah 150 putaran, atau satu-satunya sel yang tersisa terbunuh bersama dalam ledakan) tidak dihitung dalam total kemenangan salah satu pemain.
Informasi lainnya
- Program Anda seharusnya tidak berusaha mempertahankan status (melampaui penggunaan cawan Petri): organisme monoseluler tidak memiliki ingatan yang sangat baik dan bereaksi terhadap dunia saat demi saat. Secara khusus, menulis ke file (atau penyimpanan data lainnya), berkomunikasi dengan server jarak jauh, atau mengatur variabel lingkungan tidak diizinkan secara eksplisit.
- Kiriman akan dijalankan / dikompilasi di Ubuntu 12.04.4.
- Spesifik dari 100 game penilaian belum dikonfirmasi, tetapi mereka kemungkinan akan melibatkan beberapa ukuran arena (misalnya, 50 berjalan di arena kecil dan 50 berjalan di arena yang lebih besar). Untuk arena yang lebih besar, saya dapat menambah hitungan turn turn untuk memastikan bahwa pertarungan yang tepat dapat terjadi.
Sumber daya
Berikut adalah kode driver yang menjalankan simulasi, ditulis untuk Node.js, dipanggil oleh node petri.js 'first program' 'second program'
. Misalnya, mengadu sel yang ditulis Python dengan sel yang ditulis Java mungkin terlihat seperti node petri.js 'python some_cell.py' 'java SomeCellClass'
.
Selain itu, saya mengerti bahwa membaca dan menguraikan banyak baris pada stdin bisa sangat menyebalkan, jadi saya telah menyusun beberapa sel sampel lengkap dalam berbagai bahasa yang Anda bebas untuk membangun, sepenuhnya merombak, atau mengabaikan sepenuhnya.
- Sel jawa
- Sel python
- Sel JavaScript (untuk digunakan dengan Node.js)
Tentu saja Anda bebas menulis sel dalam bahasa yang berbeda; ini hanya tiga bahasa yang saya putuskan untuk menulis kode boilerplate sebagai bantuan hemat waktu.
Jika Anda memiliki masalah dalam menjalankan driver, silakan ping saya di ruang obrolan yang saya buat untuk tantangan ini . Jika Anda tidak memiliki reputasi yang cukup untuk mengobrol, maka tinggalkan saja komentar.
'node c:/cell/cell_template.js'
untuk setiap argumen, sama seperti Anda harus menentukan'java CellTemplate'
untuk kode Java. Saya akan membuatnya lebih jelas dalam teks tantangan. Jika Anda masih mengalami masalah, kami (dan siapa pun yang memiliki masalah teknis) dapat melanjutkan diskusi ini di ruang obrolan yang baru saja saya buat .