pengantar
Anda terdampar di pulau terpencil dengan beberapa pelayan dan sedang berburu harta karun. Semakin lama pencarian, semakin banyak harta yang ditemukan. Semakin sedikit orang yang mencari, semakin banyak setiap orang menemukan.
Karena persediaan terbatas, pemimpin telah memutuskan bahwa beberapa orang, hingga seperempat dari kelompok, harus dibiarkan mati setiap malam. Dia telah memutuskan untuk tidak memberi tahu siapa pun dengan pasti berapa banyak orang yang akan mati pada hari tertentu sebelumnya.
Anda mengendalikan sekelompok kecil 5 orang, yang akan keluar dari kamp untuk menemukan harta karun untuk Anda.
Objektif
Tujuan dari kompetisi ini adalah untuk mengumpulkan harta sebanyak mungkin. Setiap belokan yang pelayan Anda tidak berusaha kembali ke kemah, mereka akan menemukan sejumlah harta karun. Hamba Anda dapat kembali ke kemah pada waktu yang berbeda.
Setiap belokan yang ditinggalkan seorang pekerja untuk mencari harta karun, pekerja menemukan 1+R
potongan-potongan harta, di mana R
jumlah pekerja (dari semua bot) sudah kembali ke kamp. Bot mati tidak memperhitungkan perhitungan ini.
Di awal setiap hari, nomor acak ( n
) dari 2
ke max(3, floor(num_live_players/4))
akan dipilih. (Untuk 10 pemain pada hari 1, ini adalah 2
untuk max(3,50/4)=12
. Untuk 20 pemain pada hari 1, ini adalah 2
untuk max(3,100/4)=25
.) Angka ini mewakili jumlah pemain yang akan dibiarkan mati untuk hari itu, dan tidak akan diberikan ke program Anda .
Jika seorang pelayan adalah salah satu dari orang terakhir yang n
kembali, dia akan mati dan tidak dapat memindahkan harta yang dia temukan kepada milikmu. Selain itu, pelayan tidak akan dapat berpartisipasi dalam perburuan harta karun selama sisa petualangan.
Skor akhir Anda adalah jumlah rata-rata harta yang Anda peroleh per petualangan (run of the controller).
Jika lebih banyak orang berusaha untuk kembali ke kemah pada giliran yang sama daripada yang ada slot terbuka, angka acak akan menentukan siapa yang masuk dan siapa yang mati.
Sehari di pulau ini dari matahari terbit hingga terbenam berlangsung selama 30 putaran. Karena ada banyak hewan berbahaya di malam hari, kegagalan untuk kembali saat matahari terbenam berarti Anda tidak akan diizinkan masuk ke kamp.
Input output
Program Anda harus dijalankan untuk keseluruhan simulasi.
Di awal simulasi, INDEX I
akan dimasukkan, di mana I
indeks bot Anda (indeks ini dihitung dari 1 ke atas).
Pada awal setiap hari, START_DAY D/N
akan dimasukkan ke program Anda, di mana D
nomor hari (mulai dari 1
), dan N
sama dengan max(3, floor(num_live_players/4))
, yang merupakan jumlah maksimum orang yang mungkin mati pada hari tertentu.
Pada awal setiap belokan, START_TURN T
akan dimasukkan ke program Anda, di mana T
nomor belokan (mulai dari 1
).
Setelah program Anda menerima ini, itu harus merespons dengan daftar gerakan pelayan Anda, masing-masing dipisahkan oleh koma.
Bergerak yang valid adalah:
R
: Cobalah untuk kembali ke kemah.S
: Tetap mencari harta karun.N
: Hamba sudah mati atau di kamp.
Memasuki langkah yang tidak valid akan diartikan seolah- S
olah bot itu hidup dan tidak di kamp, dan N
sebaliknya.
Pada akhir setiap belokan, sebuah string akan diteruskan ke program Anda:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
di mana setiap gerakan pelayan bot dipisahkan oleh koma.
Bergerak ini akan menjadi salah satu dari yang berikut:
R
: Berhasil kembali ke kemah itu.r
: Gagal kembali ke kemah yang berbelok.S
: Masih mencari harta karun.D
: Meninggal pada giliran sebelumnya.N
: Sudah kembali di kemah.
Bot dan pelayan tetap dalam urutan yang sama di seluruh simulasi.
Sebagai contoh:
INDEX 2
....
END_TURN 8 N,N,N,N,N r,r,r,r,D D,D,D,N,R S,D,D,N,D
Di sini, Anda adalah bot kedua ( r,r,r,r,r
), yang mencoba mengembalikan keempat pelayan yang masih hidup (dan sayangnya gagal pada keempatnya). Para pelayan Bot 1 semuanya kembali ke kemah. Bot 3 memiliki tiga pelayan yang mati, satu lagi di kamp, dan seorang pelayan kelima yang berhasil kembali. Bot 4 memiliki satu pelayan yang tetap (dan akan mati, karena ini adalah pergantian terakhir dalam sehari), satu pelayan di kemah, dan tiga pelayan yang mati.
Setelah masing-masing string ini, kecuali string yang menandakan akhir hari juga telah dikeluarkan (lihat di bawah), program Anda adalah untuk menampilkan gerakan pelayan Anda berikutnya, dipisahkan dengan koma. Semua pelayan harus diperhitungkan (dengan N
jika sudah di kamp, dan D
jika sudah mati). Perpindahan yang tidak valid akan diperlakukan seolah- S
olah pelayan belum berada di kemah / mati. Contoh:
N,N,S,S,R
yang berarti:
Servant # | Action
1 | Do nothing.
2 | Do nothing.
3 | Stay put (keep looking for treasure).
4 | Stay put (keep looking for treasure).
5 | Try to return to camp.
Pada akhir hari, string berikut harus dilewatkan setelah END
string belokan terakhir , memberi tahu semua orang tentang siapa yang hidup:
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
di mana statusnya adalah daftar yang dipisahkan koma baik A
(hidup) atau D
(mati). Hari berikutnya dimulai segera setelahnya.
Simulasi berakhir ketika ada kurang dari 6 pelayan hidup. Program Anda akan menerima input berikut di akhir simulasi:
EXIT
Aturan / Detail
- Hanya secara bergantian di mana tindakan
S
Anda akan Anda menemukan harta karun. - Jumlah simulasi yang dijalankan: 1000 kali
- Program Anda tidak boleh lebih dari 1 detik untuk menentukan gerakan.
- Program Anda tidak boleh keluar lebih awal; itu akan dimulai tepat sekali.
- Pastikan buffer output (jika ada) memerah setelah setiap output.
- File dapat ditulis ke dalam folder bot Anda (
./players/BotName/
). Nama bot Anda adalah apa pun yang Anda beri nama bot Anda, dengan semua karakter non-alfanumerik dihapus dan ditulis dalam CamelCase. Entri dapat menyimpan data di antara run dari controller, karena run dilakukan secara berurutan. - Program Anda harus keluar setelah menerima
EXIT
. - Program yang gagal menyusun atau melempar kesalahan atau menghasilkan teks yang tidak valid (tidak dalam format 5 karakter yang dipisahkan oleh koma) dapat dikecualikan dari kompetisi. Baris baru harus mengikuti setiap output.
- Pengontrol dapat ditemukan di GitHub .
Harap sertakan nama bot, bahasa + versi, kode, dan perintah untuk dikompilasi (jika ada) dan jalankan bot Anda.
Contoh
Teks yang dihasilkan oleh program diawali di sini dengan a >
. Program Anda seharusnya tidak menampilkan karakter ini.
INDEX 2
START_DAY 1/3
START_TURN 1
>S,S,S,S,S
END_TURN 1 S,R,S,S,S S,S,S,S,S
START_TURN 2
>S,S,S,S,S
END_TURN 2 S,N,S,R,S S,S,S,S,S
START_TURN 3
>R,R,S,S,S
END_TURN 3 R,N,R,N,R R,R,S,S,S
START_TURN 4
>N,N,S,S,S
END_TURN 4 N,N,N,N,N N,N,S,S,S
START_TURN 5
>N,N,R,R,R
END_TURN 5 N,N,N,N,N N,N,r,r,R
END_DAY 1 A,A,A,A,A A,A,D,D,A
START_DAY 2/3
START_TURN 1
>S,S,N,S,N
END_TURN 1 R,R,R,R,R S,S,D,D,N
END_DAY 2 A,A,A,A,A D,D,D,D,D
EXIT
Skor untuk contoh di atas adalah:
Bot# Day 1 Day 2 Total
1 10 0 10
S1 1+2 0 3
S2 0 0 0
S3 1+2 0 3
S4 1 0 1
S5 1+2 0 3
2 20 0 20
S1 1+2 0 3
S2 1+2 0 3
S3 0 0 0
S4 0 0 0
S5 1+2+3+8 0 14
Karena itu pemenangnya adalah pemain, bot 2. Perhatikan bahwa pemenang tidak harus bertahan sampai akhir mutlak. (Juga perhatikan bahwa pemain bisa tetap sampai 30 pada hari 1, karena kamp tidak akan penuh sampai pemain mengirim satu bot lagi).
Skor
Bot Score
Bob 2939.422
Statisticians 2905.833
Morning Birds 1652.325
Evolved 1578.285
Slow Returners 1224.318
Wandering Fools 1065.908
Randomizers 735.313
Drunkards 0
Plague 0
Log tersedia di GitHub . Hasil per setiap percobaan tersedia di google spreadsheet ini .
sumber
Jawaban:
Bob - C ++
Untuk Mengkompilasi:
Untuk berlari:
sumber
Ahli statistik, Python 3
Para ahli statistik selalu bekerja bersama. Pada belokan pertama, mereka kembali ke kamp ketika dua pertiga dari lawan mereka melakukannya. Pada belokan berikutnya, mereka mengandalkan data yang telah mereka kumpulkan dari belokan sebelumnya untuk memprediksi kebiasaan para pelayan lainnya, dan mencoba untuk kembali ke kamp pada saat aman terakhir.
Program
Seperti yang Anda lihat, saya tanpa malu-malu mencuri struktur program dari @ Mike Sweeney.
Perintah
EDIT: Memperbaiki bug di cek untuk kembali ke rumah. Mereka seharusnya tampil agak lebih baik sekarang.
EDIT 2: Para ahli statistik sekarang lebih pintar dari sebelumnya: mereka melacak para pelayan yang telah kembali ke kamp pada hari ini, dan menyesuaikan prediksi mereka sesuai dengan itu. Juga, mereka mengambil lebih banyak risiko, kembali ke kamp ketika 3/4 dari jumlah maksimum pelayan yang sekarat tetap ada. Ini mendorong mereka kembali ke atas (nyaris saja; Bob telah menjadi sangat berbahaya).
sumber
Pemabuk, Perl 5
Terlalu banyak alkohol dan mereka tidak akan pernah menemukan jalan kembali ke kemah.
Entri ini terutama merupakan contoh, tetapi akan berpartisipasi.
Program
Perintah
sumber
$status[$i] eq 'A' ? 'S' : 'D';
menjadi$status[$i] eq 'A' ? 'S' : 'N';
untuk memenuhi spec?Burung Pagi
Burung awal menangkap cacing !!!
Sunting: Dibuat agar siapa pun dapat dengan mudah mensubklasifikasikan. Tetapkan ulang
doMove(int playerNumber)
untuk bot Anda sendiri. Saya telah menambahkan beberapa bidang dan metode yang bermanfaat. Saya sudah banyak mengujinya. Itu tidak menyimpan status dari simulasi sebelumnya. Tolong beritahu saya jika ada masalah.Kompilasi dengan:
javac ./players/MorningBirds/MorningBirds.java
Jalankan dengan:
java players.MorningBirds.MorningBirds
sumber
R
) pada hari tertentu akan selalu mati pada hari itu.Pengacak - Ruby
Hanya untuk mengacaukan statistik yang digerakkan oleh bot, pengacak cukup tidak dapat diprediksi. Semua dari mereka kembali sekaligus, secara acak dalam upaya untuk menelantarkan orang lain.
(Tidak dipengaruhi oleh pemain lain.)
sumber
Mengembara Bodoh, Python 2
Ini adalah bot Python sederhana yang mengirimkan para pelayan sampai waktu "goback" yang telah ditentukan tercapai, kemudian mereka mencoba memasuki perkemahan dan tinggal sampai hari berikutnya.
Ini juga merupakan kerangka dasar untuk bot yang lebih kompleks yang mungkin ingin digunakan orang lain. Namun, mesin ini tidak diuji dengan mesin juri, jadi beri tahu saya jika saya membuat kesalahan.
Program
Perintah
Sunting: Mengubah tindakan memutuskan kode setelah klarifikasi aturan.
sumber
Berkembang
Saya menggunakan Pemrograman Genetik (melalui JGAP) untuk membuat bot ini. Itu muncul dengan jawaban sederhana yang mengalahkan semua yang lain (nyaris).
Kompilasi dengan:
javac players/Evolved/Evolved.java
Jalankan dengan:
java players.Evolved.Evolved
Sunting: Grrr ... Bob mengacaukan saya !!!
Sunting: Yay !!! Bob, terbunuh oleh wabah jahat !!!
sumber
SlowReturners - Ruby
Mengirim satu pelayan kembali setiap 5 putaran.
sumber
Wabah
Wabah adalah penyakit. Itu tidak rasional. Bisa ditebak. Penyakit tidak bisa mengumpulkan harta, juga tidak peduli harta. Wabah membuat pemain lain sakit. Orang bijak tinggal di rumah dan melupakan harta. Orang-orang bodoh selalu bodoh dan tidak akan pernah mendapatkan banyak harta. Evolved (untungnya) kebal terhadap Wabah. Ia juga bijaksana. Dia pergi dan mengumpulkan harta, dan tidak mati.
Kompilasi dengan:
javac players/Plague/Plague.java
Jalankan dengan:
java players.Plague.Plague
Bob dan Statistik sekarang tahan terhadap wabah.
sumber