Scriptbot Warz!
Hasilnya sudah tiba dan Assassin adalah juara kami, memenangkan 2 dari 3 pertandingan! Terima kasih kepada semua orang yang mengirimkan Scriptbots mereka! Terima kasih khusus kepada klakson untuk BestOpportunityBot yang menampilkan lintasan luar biasa dan memanfaatkan sepenuhnya semua opsi tindakan.
Peta 1
Assassin mengeluarkan BestOpportunityBot sejak awal, dan sisa pertandingan itu cukup membosankan. Rinci play-by-play di sini.
- Pembunuh: 10 HP, 10 Damage Dealt, 3 Damage Diambil
- The Avoider v3: 10 HP, 0 Damage Dealt, 0 Damage Diambil
- Harus Selesai Makan: 10 HP, 0 Damage Dealt, 0 Damage Diambil
- BestOpportunityBot: 0 HP, 3 Damage Dealt, 10 Damage Diambil
Peta 2
BestOpportunityBot melakukan sebagian besar pekerjaan pada pertandingan ini, tetapi Assassin mampu membawanya keluar pada akhirnya. Rinci play-by-play di sini.
- Pembunuh: 2 HP, 10 Damage Dealt, 9 Damage Diambil
- BestOpportunityBot: 0 HP, 32 Damage Dealt, 10 Damage Diambil
- The Avoider v3: 0 HP, 0 Damage Dealt, 12 Damage Diambil
- Harus Selesai Makan: 0 HP, 0 Damage Dealt, 11 Damage Diambil
Peta 3
BestOpportunityBot mendorong semua orang ke jebakan pada pertandingan ini. Sangat keren. Rinci play-by-play di sini.
- BestOpportunityBot: 10 HP, 30 Damage Dealt, 0 Damage Diambil
- Pembunuh: 0 HP, 0 Damage Dealt, 0 Damage Diambil
- Harus Selesai Makan: 0 HP, 0 Damage Dealt, 0 Damage Diambil
- The Avoider v3: 0 HP, 0 Damage Dealt, 0 Damage Diambil
Terima kasih atas jawaban Anda! Karena hanya ada 4 Scriptbots, kami meninggalkan rencana turnamen untuk tiga pertandingan gratis untuk semua, satu di setiap peta di bawah ini. Scripbbot dengan catatan kemenangan tertinggi menang. Dalam hal seri, kita akan masuk ke dalam kematian mendadak dimana scriptbot yang memecahkan dasi pertama menang.
Tugas Anda, jika Anda memilih untuk menerimanya, adalah membuat kode Scriptbot yang dapat melintasi peta ASCII dan menghancurkan lawan-lawannya. Setiap pertempuran akan mengambil bentuk permainan berbasis giliran mulai urutan acak di mana setiap Scriptbot memiliki kesempatan untuk menghabiskan poin energi mereka (EP) untuk mengambil tindakan. Skrip GameMaster akan memasukkan input ke, dan menginterpretasikan output dari setiap Scriptbot.
Lingkungan Hidup
Setiap Scriptbot terdapat dalam direktori sendiri di mana ia dapat membaca dari map
dan stats
file dan membaca / menulis ke data
file. The data
file dapat digunakan untuk menyimpan informasi yang gigih Anda mungkin menemukan berguna.
File statistik
The stats
file berisi informasi tentang lawan Anda dan diformat sebagai berikut. Setiap pemain diwakili pada baris terpisah. Kolom pertama adalah ID pemain ( @
berarti Anda). Kolom kedua adalah kesehatan pemain itu.
1,9HP
@,10HP
3,9HP
4,2HP
File peta
The map
File mungkin terlihat seperti ini ...
####################
# # # #
# 1 # # 2 #
# #
### ###
# #
# # #
# # ! #
# # #
# !#### #
# ####! #
# # #
# ! # #
# # #
# #
### ###
# #
# 3 # # @ #
# # # #
####################
... atau ini...
######################################
# # 1 # @ #
# # # #! #
# # # #### #
# # # # # !#! #
# # # # # ##### #
# ### # #### # # #
# # #! ### # #
# ###### # # # ##### #
# #! # ###### # !# #
# ### # # # #
# # 2 # # 4 # #
######################################
... atau ini...
###################
###!!!!!!#!!!!!!###
##! !##
#! 1 ! 2 !#
#! ! !#
#! !#
#! !#
#! !!! !#
## !! !!! !! ##
#! !!! !#
#! !#
#! !#
#! ! !#
#! 3 ! @ !#
##! !##
###!!!!!!#!!!!!!###
###################
... atau mungkin terlihat sama sekali berbeda. Bagaimanapun, karakter yang digunakan dan artinya akan tetap sama:
#
Dinding, tidak bisa dilewati dan tidak bisa ditembus.1
,2
,3
... Sebuah angka yang mewakili pemain musuh. Angka-angka ini sesuai dengan ID pemain dalamstats
file.!
Sebuah jebakan. Scriptbots yang pindah ke lokasi ini akan langsung mati.@
Lokasi Scriptbot Anda.Buka ruang tempat Anda bebas bergerak.
Gameplay
Skrip GameMaster akan menetapkan urutan awal acak ke Scriptbots. Scriptbots kemudian dipanggil dalam urutan ini saat mereka masih hidup. Scriptbots memiliki 10 Health Points (HP), dan mulai dengan 10 Energy Points (EP) setiap belokan, yang dapat mereka gunakan untuk bergerak atau menyerang. Pada awal setiap belokan, Scriptbot akan sembuh untuk satu HP, atau diberikan satu EP tambahan jika sudah mencapai 10 HP (dengan demikian menjalankan mungkin merupakan strategi yang layak di kali).
Pertempuran berakhir ketika hanya satu Scriptbot yang selamat atau ketika 100 putaran telah berlalu. Jika beberapa Scriptbots hidup di akhir pertempuran, tempat mereka ditentukan berdasarkan kriteria berikut:
- Sebagian besar kesehatan.
- Sebagian besar kerusakan ditangani.
- Kerusakan paling besar terjadi.
Input Scriptbot
GameMaster akan mencetak peta pertempuran ke file bernama map
yang Scriptbot akan memiliki akses untuk membaca. Peta itu bisa berupa apa saja, jadi penting bahwa Scriptbot dapat menafsirkannya. Scriptbot Anda akan dipanggil dengan satu parameter yang menunjukkan EP. Sebagai contoh...
:> example_scriptbot.py 3
Scriptbot akan dipanggil sampai menghabiskan semua EP atau maksimum 10 11 kali. File peta dan statistik diperbarui sebelum setiap doa.
Output Scriptbot
Scriptbots harus menampilkan aksi mereka menjadi gagah. Daftar tindakan yang mungkin adalah sebagai berikut:
MOVE <DIRECTION> <DISTANCE>
Biaya 1 EP per
DISTANCE
. TheMOVE
perintah bergerak Scriptbot Anda di sekitar peta. Jika ada sesuatu seperti tembok atau Scriptbot lain, GameMaster akan memindahkan Scriptbot Anda sejauh mungkin. JikaDISTANCE
EP yang lebih besar dari sisa Scriptbot diberikan, GameMaster akan memindahkan Scriptbot sampai EP-nya habis.DIRECTION
mungkin setiap arah kompas dariN
,E
,S
, atauW
.PUSH <DIRECTION> <DISTANCE>
Biaya 1 EP per
DISTANCE
. ThePUSH
perintah memungkinkan Scriptbot untuk bergerak Scriptbot lain. Scriptbot yang mengeluarkan perintah harus langsung di sebelah Scriptbot yang sedang didorong. Kedua Scriptbot akan bergerak ke arah yang ditunjukkan jika tidak ada objek yang menghalangi Scriptbot yang didorong.DIRECTION
danDISTANCE
sama seperti untukMOVE
perintah.ATTACK <DIRECTION>
Biaya satu EP. The
ATTACK
perintah Penawaran 1 kerusakan Scriptbot apapun secara langsung di sebelah Scriptbot mengeluarkan dan dalam arah yang ditentukan.DIRECTION
sama seperti untukMOVE
perintah.PASS
Berakhir giliran Anda.
Bahasa yang didukung
Agar ini masuk akal bagi saya, saya akan menerima bahasa berikut:
- Jawa
- Node.js
- Python
- PHP
Anda terbatas pada perpustakaan yang biasanya dikemas dengan bahasa Anda di luar kotak. Tolong jangan membuat saya menemukan perpustakaan yang tidak jelas untuk membuat kode Anda berfungsi.
Pengajuan dan Penilaian
Posting kode sumber Scriptbot Anda di bawah ini dan berikan nama yang keren! Harap cantumkan juga versi bahasa yang Anda gunakan. Semua Scriptbots akan ditinjau untuk tindakan gila-gilaan jadi silakan komentar dengan baik dan jangan mengaburkan kode Anda.
Anda dapat mengirimkan lebih dari satu entri, tetapi harap buat entri yang benar-benar unik, dan bukan versi entri yang sama. Misalnya, Anda mungkin ingin kode bot Zerg Rush dan bot Gorilla Warfare. Tidak apa-apa. Jangan memposting Zerg Rush v1, Zerg Rush v2, dll.
Pada 7 November saya akan mengumpulkan semua jawaban dan jawaban yang lolos ulasan awal akan ditambahkan ke braket turnamen. Sang juara mendapat jawaban yang diterima. Braket ideal ditunjukkan di bawah ini. Karena kemungkinan tidak ada persis 16 entri, beberapa tanda kurung mungkin berakhir hanya tiga atau bahkan dua bot. Saya akan mencoba membuat braket seadil mungkin. Favoritisme apa pun yang diperlukan (dalam hal diperlukan waktu seminggu, misalnya) akan diberikan kepada bot yang diserahkan terlebih dahulu.
BOT01_
BOT02_|
BOT03_|____
BOT04_| |
|
BOT05_ |
BOT06_|___ |
BOT07_| | |
BOT08_| | |_BOT ?_
|___BOT ?_|
BOT09_ ___BOT ?_|___CHAMPION!
BOT10_| | _BOT ?_|
BOT11_|__| |
BOT12_| |
|
BOT13_ |
BOT14_|____|
BOT15_|
BOT16_|
T&J
Saya yakin saya melewatkan beberapa detail, jadi jangan ragu untuk bertanya!
Bolehkah kami percaya bahwa file peta selalu dikelilingi # simbol? Jika tidak, apa yang terjadi jika bot mencoba keluar dari peta? - BrainSteel
Ya peta akan selalu dibatasi oleh # dan Scriptbot Anda akan mulai di dalam batas-batas ini.
Jika tidak ada bot yang ada di arah yang ditentukan dalam perintah PUSH, bagaimana fungsinya? - BrainSteel
GameMaster tidak akan melakukan apa-apa, nol EP akan dihabiskan, dan Scriptbot akan dipanggil lagi.
Apakah EP yang tidak terpakai menumpuk? - feersum
Tidak. Setiap Scriptbot akan memulai putaran / putaran dengan 10 EP. EP mana pun yang tidak dihabiskan akan sia-sia.
Saya pikir saya sudah mendapatkannya, tetapi hanya untuk mengklarifikasi: dengan bot A dan B, adalah urutan acara A @ 10EP-> MOVE MAP_UPDATE B @ 10EP-> PUSH MAP_UPDATE A @ 9EP-> ATTACK MAP_UPDATE B @ 9EP-> ATTACK ..., atau A @ 10EP-> MOVE A @ 9EP-> ATTACK ... MAP_UPDATE B @ 10EP-> PUSH B @ 9EP-> ATTACK ... MAP_UPDATE? Dengan kata lain, apakah semua aksi dalam satu atomic loop controller-bot query? Jika demikian, mengapa loop? Mengapa tidak mengembalikan satu file dengan semua tindakan yang harus diselesaikan? Kalau tidak, bot harus menulis file negara mereka sendiri untuk melacak urutan multi-tindakan. File peta / statistik hanya akan valid sebelum tindakan pertama. - COTO
Contoh kedua Anda dekat, tetapi tidak tepat. Selama belokan, Scriptbot dipanggil berulang kali hingga EP mereka habis, atau maksimal 11 kali. File peta dan statistik diperbarui sebelum setiap doa. Loop ini berguna jika bot memberikan output yang tidak valid. GameMaster akan berurusan dengan output yang tidak valid dan melibatkan bot lagi, memberi bot kesempatan untuk memperbaiki kesalahan itu.
Apakah Anda akan merilis skrip GameMaster untuk pengujian? - IchBinKeinBaum
Skrip GameMaster tidak akan dirilis. Saya mendorong Anda untuk membuat file peta dan statistik untuk menguji perilaku bot Anda.
Jika robotA mendorong robotB ke dalam perangkap, apakah robotA dikreditkan dengan poin "Damage Dealt" sama dengan kesehatan robotB saat ini? - Mike Sweeney
Ya, itu ide yang bagus. Bot akan diberikan poin kerusakan yang setara dengan kesehatan bot apa pun yang didorongnya ke dalam perangkap.
sumber
map
file selalu dikelilingi oleh#
simbol? Jika tidak, apa yang terjadi jika bot mencoba keluar dari peta?#
dan Scriptbot Anda akan mulai di dalam batas-batas ini.Jawaban:
Assassin (Jawa 1.7)
Berusaha membunuh musuh jika memungkinkan, jika tidak bergerak satu bidang. Cukup bagus dalam menemukan jalan ke musuh, tetapi tidak melakukan apa pun untuk bersembunyi dari bot lain.
sumber
The Avoider v3
Bot berpikiran sederhana. Ia takut dengan robot dan perangkap lainnya. Itu tidak akan menyerang. Itu mengabaikan file statistik dan tidak berpikir ke depan sama sekali.
Ini terutama merupakan ujian untuk melihat bagaimana aturan akan bekerja, dan sebagai lawan yang bodoh bagi pesaing lain.
Sunting: Sekarang akan LULUS ketika tidak ada MOVE yang lebih baik.
Sunting2: Robot bisa '1234' bukan '123'
Kode Python:
sumber
elif ch in '123':
Anda ingin mencari setidaknya 1234. Jika Anda bot 3, daftar lawannya adalah 124.BestOpportunityBot
Ini akhirnya menjadi sedikit lebih lama dari yang saya maksudkan ... dan saya tidak yakin apakah saya memahami aturan untuk belokan sepenuhnya, jadi kita akan lihat bagaimana ini terjadi.
sumber
Harus Selesai Makan
Python:
sumber
import sys
?