Anda mungkin tahu Permainan Kehidupan Conway , robot seluler terkenal yang ditemukan oleh ahli matematika John Conway. Hidup adalah seperangkat aturan yang, bersama-sama, memungkinkan Anda untuk mensimulasikan papan sel dua dimensi. Aturan memutuskan sel mana di papan hidup dan mana yang mati. Dengan beberapa imajinasi, Anda dapat mengatakan bahwa Life adalah game tanpa pemain: permainan dengan tujuan untuk menemukan pola dengan perilaku yang menarik, seperti peluncur yang terkenal.
Gim nol pemain ... Hingga hari ini. Anda harus menulis sebuah program yang memainkan Game of Life - dan memainkannya untuk menang, gaya King of the Hill. Lawan Anda (tunggal) tentu saja mencoba melakukan hal yang sama. Pemenangnya adalah bot terakhir dengan sel hidup apa pun, atau pemain dengan sel terbanyak setelah 10.000 generasi.
Aturan gim
Aturannya hampir sama dengan kehidupan normal (B3 / S23):
- Sel hidup dengan kurang dari dua tetangga yang ramah mati karena kelaparan.
- Sel hidup dengan dua atau tiga tetangga yang ramah selamat.
- Sel hidup dengan lebih dari tiga tetangga yang ramah mati karena kelebihan populasi.
- Sel mati dengan tepat tiga tetangga dari pemain yang sama menjadi hidup untuk bertarung demi pemain itu asalkan tidak ada tetangga musuh .
... tetapi setelah setiap generasi, baik Anda dan lawan Anda mendapatkan kesempatan untuk campur tangan. Anda dapat bangun hingga maksimal 30 sel untuk memperjuangkan Anda. (Siapa yang duluan diputuskan oleh server.)
Papan adalah sel (x, y) sel. Semua kotak awalnya mati. Perbatasan tidak membungkus (ini bukan dunia yang berbentuk torus) dan mati secara permanen.
Ini adalah kontes dalam semangat Battlebots dan Core Wars . Ada server pusat yang akan menjalankan bot dan dapat ditemukan di sini
Protokol
Server arena berbicara protokol JSON sederhana yang dikomunikasikan melalui argv
Di mana Nilai adalah string yang dikodekan JSON
y_size
: maksimum y tegel ubin sebelum hilangx_size
: maksimum x coords ubin sebelum hilangtick_id
: nomor centang saat iniboard
: kamus dengan kunci dalam formulir '(y, x)' dan nilai-nilai dalam bentukbot_id
(int)bot_id
: ubin di papan dengan id ini adalah milikmu
Contoh:
{"y_size":2000,"x_size":2000,"board":{},"bot_id":1,"tick_id":1}
Memberitahu server pilihan Anda:
- Kirim server daftar ubin untuk beralih ke warna Anda.
- Hanya yang kosong yang akan diubah
- Format daftar koordinat bersarang
[[0,0], [0,1], [100,22]...]
CATATAN: Bot Anda tidak perlu memperbarui ubin sama sekali - server melakukan pembaruan itu sendiri
Aturan persaingan
- Jika implementasi Anda gagal mengikuti protokol, gilirannya itu akan hangus; Server akan menganggap tidak ada perubahan dalam status
- Anda tidak diizinkan mengambil keuntungan dari kesalahan di server arena.
- Mintalah AI Anda memutuskan untuk bergerak dalam waktu yang waras. Silakan kirim langkah Anda berikutnya secepat mungkin.
- Akhirnya, mohon bersikap baik pada server. Itu ada untuk kesenangan Anda.
- Tidak mengikuti aturan-aturan ini dapat menyebabkan diskualifikasi.
- Dalam hal seri, kedua pemain memiliki 1 kemenangan ditambahkan ke total mereka
Menjalankan pengontrol sendiri
Sumber untuk pengontrol dapat ditemukan di sini . Ada 2 cara menjalankan pengontrol:
- Mode kompetisi (terminal)
- Setup dengan
python3 get_answers.py
- Jalankan semua kompetisi semua dengan bot masing-masing mengadu domba satu sama lain.
- Setup dengan
- Mode pengujian (GUI)
- Lari
python3 nice_gui.py
- Klik
Pull Answers
- Jika Anda ingin menambahkan jawaban Anda sendiri untuk mencobanya sebelum memposting, klik
File -> Add manual answer
dan temukan file dan pilih bahasa yang digunakan untuk menuliskannya. - Jika bahasa Anda tidak hadir, ping saya dan saya akan mencoba untuk menginstalnya di server saya akan menjalankannya (instalasi dan menjalankan instruksi juga akan bagus!)
- Pilih 2 bot untuk diadu satu sama lain
- Klik
Run
- Tonton pertandingan ...
- Lari
- Instalasi
- Membutuhkan python3
- get_answers membutuhkan bs4 dan html5lib
- controller memerlukan cara menjalankan file .sh (MinGW di windows)
Mencetak gol
Bot dengan kemenangan terbanyak mulai dari 12/07/2016
(12 Juli)14/07/2016
(14 Juli, tidak bisa mengetahui cara menjalankan bot) menang.
Bantuan dengan controller / gui dapat ditanyakan di ruang obrolan ini
Pertanyaan ini telah dikembangkan sejak 2014 dan merupakan pertanyaan yang paling banyak dipilih di kotak pasir. Terima kasih khusus kepada Wander Nauta (penulis asli dan konsep), Obrolan PPCG (komentar dan bantuan) dan siapa saja yang berkomentar di posting sandbox (lebih banyak komentar).
Jawaban:
Python 3, Exploder
Letakkan peledak kecil di sekitar tempat itu, tanpa memperhatikan apakah sudah ada blok di sana.
sumber
Ruby, InterruptingBlockMaker
Alih-alih menginisialisasi glider seperti TrainingBot, ia mencoba untuk membuat mesin saklar blok 5x5 seperti yang disebutkan di Wikipedia pada titik acak di labirin. Kemudian, dengan aktivasi yang tersisa, itu hanya menemukan titik musuh dan mencoba untuk membumbui area terdekat dengan sel-sel Anda dalam upaya untuk mengganggu mereka dari tumbuh dan mungkin mengacaukan pola mereka. Sel-sel Anda akan mati pada generasi berikutnya, tetapi mungkin mereka juga menghentikan pertumbuhan untuk memperlambat lawan Anda!
v2: Dioptimalkan sedikit (?) untuk mencoba meminimalkan waktu habis.
v3: Dioptimalkan kode gangguan untuk pra-sampel sekelompok blok aktif sebelum menolak lokasi sel kita sendiri, untuk mencegah timeout lebih lanjut dengan biaya beberapa efektivitas dalam serangan sel interupsi.
sumber
bot_score
menunjukkan berapa banyak kemenangan masing-masing bot terhadap bot lainnyaPython 2, TrainingBot
Karena semua orang membutuhkan ini!
sumber
Java, Troll Bot
Troll Bot telah memikirkannya, dan dia menyadari bahwa dia TIDAK peduli dengan musuh. Bahkan dia hanya membohongi pabrik-pabrik ini untuk menghasilkan lebih banyak anak buahnya secara acak di seluruh peta. Setelah beberapa saat ia menyadari bahwa sel tambahan apa pun paling baik digunakan dalam rumpun. Blok empat sel ini akan bersatu dan menghentikan glider di jalurnya! Dia tidak berpikir dia hanya berkelahi. Juga dia adalah pendukung besar pemrograman berorientasi objek verbose. Troll itu juga berasumsi bahwa coords berada dalam format y, x, dan dia meminta untuk diuji. Masukkan saja dia ke dalam file bernama "TrollBot.java", dan dia akan siap!
sumber
Python 3, RandomBot
Bot ini kesulitan membuat keputusan yang cerdas, tetapi setidaknya tahu untuk tidak mencoba menempatkan hal-hal di atas hal-hal lain. Itu akan secara acak membuat glider, kapal, C / 2 Orthagonal , dan blok 2x2 dengan berbagai orientasi, memastikan bahwa ketika mereka ditempatkan mereka tidak tumpang tindih dengan sesuatu yang lain, sekutu atau musuh.
Bot ini tidak diuji, karena saya menerima semua jenis kesalahan ketika saya mencoba menjalankan GUI. Juga, saya menggunakan TrainingBot sebagai basis dan hanya mengedit, jadi ada kesamaan dalam kode mungkin karena itu.
sumber
print(sys.argv[1])
jalur 3 Anda, yang mengacaukan output (simulator hanya mengharapkan deretan koordinat yang ingin Anda bangun). Juga, baris terakhir program Anda tidak memiliki paren penutup.html5lib
, kemudian tidak menemukan folder yang berisi semua bot (saya harus mengubah kode untuk kedua hal ini), dan sejak saat itu pengoperasian kedua bot Python telah menghasilkan kode pengembalian non-0 1.Python, GuyWithAGun
Dia seorang pria, dia punya pistol; dia marah. Dia hanya melemparkan senjata glider ke mana-mana tanpa memperhatikan apa yang dilakukan orang lain
sumber
Python 3, SquareBot
Menempatkan kotak di mana-mana - mungkin
Kotak adalah objek statis di Life - mereka tidak bergerak. Jadi jika saya menempatkan cukup objek lembam di sekitar tempat itu, glider dan ledakan yang dibuat orang lain mungkin akan diblokir, atau setidaknya dibasahi.
-Diadaptasi dari TrainingBot
Meskipun saya mengalami kesulitan mengujinya
sumber