- krisis dan kemartiran
(itu subtitle karena subtitle keren)
Dalam tantangan king-of-the-hill dengan python (ya; Anda tidak perlu pergi lebih jauh untuk mengetahui bahwa Anda tidak boleh mengirimkan di java), Anda perlu membuat bot yang memainkan permainan yang sangat mirip untuk menyambut ke ruang bawah tanah.
Aturan Game
(perhatikan bahwa ini bukan game asli)
Ada setumpuk, set item, dan beberapa kartu hadiah dan kartu kematian. Base HP adalah 3. Dek terdiri dari 13 kartu monster bernomor 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
untuk menunjukkan kekuatan mereka.
Daftar Barang
Pakta iblis: Kalahkan iblis (kekuatan 7 monster), dan monster di bawahnya di tumpukan penjara bawah tanah. - (hanya mengalahkan iblis jika iblis adalah yang terakhir di penjara bawah tanah)
Ramuan kesehatan: Saat kamu jatuh ke 0 HP, kalahkan monster itu dan kembali ke 3 HP.
Holy grail: Kalahkan monster dengan kekuatan genap (dalam game, ini adalah undead). Jika monster bilangan genap terjadi setelah pakta iblis digunakan, itu akan bertindak terlebih dahulu, dan kamu tidak akan mendapatkan kill pakta ekstra setelah monster ini.
Belati Vorpal: Pilih satu monster sebelum memasuki ruang bawah tanah; jenis monster ini dikalahkan. Jika monster yang ditargetkan terjadi setelah pakta iblis digunakan, itu bertindak terlebih dahulu, dan kamu tidak akan mendapatkan pakta ekstra setelah monster ini.
Shield: Tambahkan 3 ke total HP sebelum spelunking. Ini tidak mempengaruhi penggunaan ramuan kesehatan, yang akan selalu mengembalikan kesehatan ke 3.
Armor: Tambahkan 5 ke total HP sebelum spelunking. Ini tidak mempengaruhi penggunaan ramuan kesehatan, yang akan selalu mengembalikan kesehatan ke 3.
Kartu hadiah digunakan untuk melacak siapa yang telah berhasil di ruang bawah tanah. Kartu kematian melacak siapa yang gagal di ruang bawah tanah.
Fase Menggambar
Sebelum fase menggambar dimulai, semua kartu monster dikembalikan ke geladak, kedua pemain dikembalikan ke 3 HP, dan semua barang yang dibuang dikembalikan sehingga ada masing-masing.
Pemain pertama memutuskan apakah akan mengambil kartu dari dek, menyembunyikannya dari pemain lain. Jika demikian, mereka harus memilih untuk meletakkannya di atas tumpukan bawah tanah atau membuangnya bersama dengan item pilihan mereka. Item dan kartu yang dibuang akan tidak tersedia untuk salah satu pemain hingga ronde berikutnya.
Setelah pemain satu bergiliran, pemain dua melakukan hal yang sama. Para pemain secara bergantian memutuskan apakah akan menggambar dan apa yang harus dilakukan dengan kartu yang ditarik, sampai seseorang memutuskan untuk tidak menggambar atau seorang pemain mengambil kartu terakhir dari geladak. Jika seorang pemain memutuskan untuk tidak menggambar, atau menggambar kartu terakhir, fase menggambar berakhir dan pemain lain sekarang harus memasuki ruang bawah tanah dan mulai spelunking.
Fase spelunking
Jika belati Vorpal belum dibuang, pemain spelunking sekarang harus memutuskan kartu yang akan digunakan. Tidak ada keputusan aktif yang harus dibuat untuk sisa fase ini.
Pemain pertama mengambil kartu teratas; yaitu, kartu terakhir yang ditempatkan di ruang bawah tanah, dan lihat nomor kekuatannya. Jika pakta iblis aktif dari belokan sebelumnya, kartu yang ditarik dibuang. Jika tidak, item pemain akan diperiksa dalam urutan 'pakta iblis', 'cawan suci', 'belati Vorpal'. Item un-discarded pertama yang mampu mengalahkan kartu yang ditarik kemudian akan digunakan, dan kartu tersebut dibuang. Jika pakta iblis digunakan, sekarang akan aktif untuk kartu berikutnya. Item yang digunakan tidak dibuang.
Jika tidak ada item yang berlaku tersedia, kekuatan kartu dikurangi dari kesehatan pemain. Jika kesehatan mereka tidak lagi positif, mereka akan dikembalikan ke 3 HP dan ramuan dibuang jika tersedia, jika penjelajahan bawah tanah berakhir dan mereka mengambil kartu kematian.
Sementara pemain tidak dikalahkan dan ada kartu yang tersisa di ruang bawah tanah, proses menggambar kartu teratas diulang. Setelah berhasil mengalahkan semua kartu di ruang bawah tanah, penjelajahan ruang bawah tanah berakhir dan pemain spelunking mengumpulkan kartu hadiah.
Deskripsi Game Lengkap
Sebuah permainan terdiri dari serangkaian putaran, masing-masing memiliki fase menggambar dan kemudian fase spelunking. Pada akhir setiap putaran satu pemain akan mengumpulkan kartu kematian atau kartu hadiah; setelah seorang pemain menumpuk 5 dari kedua jenis permainan berakhir. Jika mereka memiliki 5 kartu kematian, mereka kalah. Jika mereka memiliki 5 kartu hadiah, mereka menang. Either way, pemain lain menerima hasil sebaliknya. Jika tidak ada pemain yang memiliki 5 kartu dari satu jenis, permainan berlanjut ke babak berikutnya dan pemain yang menempati posisi kedua di babak sebelumnya sekarang menjadi yang pertama dan sebaliknya.
Rincian KOTH
Setiap bot akan memainkan 400 pertandingan melawan setiap bot lainnya sesuai dengan aturan yang dijelaskan di atas. Bot mana yang merupakan pemain satu (dan seterusnya di babak pertama) bergantian setiap pertandingan, dan semua negara disetel ulang di antara permainan.
Ini barangnya lagi:
Pakta iblis: Kalahkan iblis (kekuatan 7 monster), dan monster di bawahnya di tumpukan penjara bawah tanah. - (hanya mengalahkan iblis jika iblis adalah yang terakhir di penjara bawah tanah)
Ramuan kesehatan: Saat kamu jatuh ke 0 HP, kalahkan monster itu dan kembali ke 3 HP.
Holy grail: Kalahkan monster dengan kekuatan genap (dalam game, ini adalah undead). Jika monster bilangan genap terjadi setelah pakta iblis digunakan, itu akan bertindak terlebih dahulu, dan kamu tidak akan mendapatkan kill pakta ekstra setelah monster ini.
Belati Vorpal: Pilih satu monster sebelum memasuki ruang bawah tanah; jenis monster ini dikalahkan. Jika monster yang ditargetkan terjadi setelah pakta iblis digunakan, itu bertindak terlebih dahulu, dan kamu tidak akan mendapatkan pakta ekstra setelah monster ini.
Shield: Tambahkan 3 ke total HP sebelum spelunking. Ini tidak mempengaruhi penggunaan ramuan kesehatan, yang akan selalu mengembalikan kesehatan ke 3.
Armor: Tambahkan 5 ke total HP sebelum spelunking. Ini tidak mempengaruhi penggunaan ramuan kesehatan, yang akan selalu mengembalikan kesehatan ke 3.
dan dek: 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 9
.
Anda harus mengimplementasikan kelas bot yang tidak menggunakan variabel kelas, berasal dari kelas dasar berikut:
class BasePlayer:
def start_turn(self, last_turn):
raise NotImplementedError
def play(self, card):
raise NotImplementedError
def vorpal_choice(self, last_turn):
raise NotImplementedError
def result(self, bot, result, dungeon, vorped):
raise NotImplementedError
Kelas dasar ini menunjukkan metode yang perlu diterapkan oleh kelas Anda, dan jumlah argumen yang diambil oleh masing-masing.
Deskripsi Metode Argumen
last_turn
invorpal_choice
danstart_turn
merupakan integer atau nilai None. Nilai 0 hingga 5 menunjukkan bahwa musuh membuang kartu yang ditarik bersama dengan item yang ditunjukkan oleh nilai itu (lihat daftar item di atas). Nilai 6 menunjukkan bahwa musuh meletakkan kartu di penjara bawah tanah. Nilai Tidak ada menunjukkan bahwa bot bermain pertama di babak ini (tidak mungkin untukvorpal_choice
). Dalamvorpal_choice
last_turn cenderung 7, menunjukkan bahwa mereka melewati belokan itu. Satu-satunya keadaan di mana itu bukan 7 adalah ketika musuh menarik kartu terakhir.card
adalah angka yang mewakili kekuatan salah satu kartu dari dek seperti yang disebutkan di atas.
Sekarang, argumen result
untuknya sedikit lebih kompleks:
bot
menunjukkan bot yang memasuki ruang bawah tanah. 0 menunjukkan memasuki ruang bawah tanah, dan 1 menunjukkan bahwa musuh memasuki ruang bawah tanah.result
menunjukkan keberhasilan perjalanan. Salah menunjukkan bot spelunking berhasil, sementara True menunjukkan mereka gagal.dungeon
adalah daftar kartu / int yang mewakili kartu yang ada di ruang bawah tanah. Penjara bawah tanah dipesan berdasarkan pesanan; kartu pertama yang ditempatkan di ruang bawah tanah adalah yang pertama dalam daftar, dan kartu terakhir yang ditempatkan adalah di akhir. Anda tidak akan menerima info apa pun tentang kartu yang dibuang; mereka rahasia dari bot lain.vorped
adalah integer yang mewakilivorpal_choice
bot spelunking. Jikabot==0
, Anda sudah tahu ini, tetapi jikabot==1
, ini bisa menjadi informasi yang berguna.
Saya akan jujur, saya tidak sepenuhnya ingat mengapa saya membuat hasil kemenangan False, tapi saya pikir itu ide yang bagus saat itu.
Nilai Pengembalian
start_turn
: Kembali 1 untuk menggambar kartu, atau 0 untuk lulus.play
: Kembalikan 0 hingga 5 untuk membuang item yang sesuai dan kartu yang ditarik, atau 6 untuk menempatkan kartu di penjara bawah tanah (konsisten dengan input last_turn, kecuali untuk passing, yang dilakukan selama start_turn).vorpal_choice
: Kembalikan jumlah kartu yang ingin Anda hilangkan dengan belati Vorpal (1 untuk menghilangkan 1s, 5 untuk menghilangkan 5s). Memilih kartu yang tidak ada akan membunuh Anda (8 ilegal, 10 ilegal, 0 ilegal).result
: Anda dapat mengembalikan apa pun, karena ini adalah fungsi menginformasikan untuk memperbarui data bot.
Anda dapat memeriksa pengontrol di sini
Klarifikasi tambahan, atau hanya mengulangi beberapa detail kecil yang mungkin Anda lewatkan dan mungkin ingin Anda ketahui dengan cepat:
Bot memainkan 400 game dengan satu sama bot lainnya.
Tidak ada variabel kelas
Tidak ada penargetan bot khusus lainnya
Tidak mendukung bot lainnya
Tidak ada hal-hal refleksi seperti memodifikasi modul acak atau bot lainnya.
Maksimal 6 bot (per orang), kecuali jika jelas bahwa semua bot bernilai termasuk dalam KOTH (tapi masih mungkin jangan membuat banyak bot)
Tidak ada waktu akhir yang spesifik untuk KOTH ini, kecuali akhir dari hadiah untuk apa yang bernilai. Cobalah untuk menang setiap saat.
Hasil sejauh ini (maaf karena agak malas dengan orang-orang ini: P)
1 GrailThief 2732 0.98
2 Steve 2399 0.86
3 DevilWorshipper 1854 0.66
4 RunAway 1336 0.48
5 BoringPlayer 1190 0.42
6 SlapAndFlap 783 0.28
7 DareDevilDumDum 750 0.27
8 RandomMandom 156 0.06
Grailthief "mencuri" hadiah itu. tidak juga, karena ia mendapatkannya. Kerja bagus, Sleafar!
sumber
2. place the item in the dungeon. The item goes in the dungeon (duh)
tampaknya salah ketik; tidak ada item yang disebutkan pada saat itu (Anda baru menggambar kartu dari rakasa monster). Aturan mungkin harus diklarifikasi sedikit.or any information known only to one player.
apakah saya tidak jelas lagi? penjara hanya terungkap di akhir, jadi kartu yang ditarik oleh bot hanya diketahui oleh satu bot. sebagai bonus, kartu yang dibuang tidak pernah terungkap. jika Anda berpikir "oh well maka ada strategi terbaik probabilistik", prediksi lawan masih sangat penting sehingga ini juga tidak validJawaban:
GrailThief
Perayap bawah tanah yang lama dan berpengalaman. Dia tahu bahwa sebagian besar yang lain berharap, bahwa cawan suci menyelamatkan mereka, oleh karena itu dia memastikan itu lenyap.
sumber
DevilWorshipper
Upaya pertama saya pada tantangan KOTH:
Pada dasarnya, kita menyingkirkan pakta dan belati vorpal, menunggu iblis masuk ke geladak, dan berlalu. Setiap putaran lawan mungkin telah menggambar iblis, itu memiliki% peluang bahwa kartu terakhir yang digambar lawan adalah iblis untuk mengasumsikan mereka sudah memainkan iblis itu.
Beri tahu saya jika ada kesalahan saya; Saya belum pernah mengacaukan python, ini KOTH pertama saya, dan ini jam 2 pagi, jadi pasti ada sesuatu.
EDIT:
Menghilangkan keacakan ternyata sangat membantu. Dengan keacakan itu sangat bodoh. Juga, seperti yang dikatakan di komentar di bawah, ia mencoba memanggil iblis atau naga.
Steve
Steve mencoba menebak apakah ruang bawah tanah itu mematikan atau tidak. Jika dia pikir itu benar, dia lewat. Selain itu, saya mencoba membuatnya menyingkirkan barang dengan cerdas. Dia biasa menyesuaikan ambang LULUS nya tergantung pada apakah dia mati di penjara bawah tanah atau lawan hidup, tapi itu akhirnya membuatnya banyak bodoh jadi aku menyingkirkannya.
Dia masih belum mengalahkan GrailThief di mesin saya, tapi setidaknya semakin dekat.
sumber
SlapAndFlap
Pertama kali di KOTH, jadi tampar aku keras karena kesalahan.
Simpleton yang satu ini selalu berusaha untuk menghapus semua item bagus dengan monster kekuatan rendah, sambil tetap mempertahankan yang kuat dan kemudian hanya memaksa lawan untuk bermain.
Ini mengalahkan RunAway dan DumDum setidaknya: D
bot saya yang lain dalam jawaban yang dihapus untuk beberapa waktu, saya perlu memperbaikinya oleh besok
sumber
RandomMandom
Bot acak wajib. Secara tepat, ia kalah keras dari bot default, yang bagus, karena itu berarti permainan memiliki setidaknya beberapa strategi.
sumber
DareDevilDumDum
agak jelas. tidak pernah mundur. satu-satunya cara Anda dapat (secara konsisten; RunAway kadang-kadang kehilangan tetapi masih mengalahkan ini sebagian besar waktu) kehilangan bot ini adalah jika Anda tidak menghapus item apa pun atau pengecut super. anggap bot ini sebagai pengingat untuk menghapus item, jika tidak, bahkan ini bisa menang.
Dan
Melarikan diri
cukup banyak mereka melepas baju besi dan kemudian melarikan diri beberapa saat sebelum akhir. sebagai daredevildumdum, tidak ingat apa-apa, kecuali untuk jumlah kartu di dek (yang tbh tidak akan diingat dalam permainan yang sebenarnya (Anda baru saja memeriksa)) dan apakah seseorang melepaskan baju besi (kebanyakan sama seperti sebelumnya ).
Juga karena saya poster tantangan khusus, bot ini tidak dihitung terhadap jumlah bot saya, karena mereka adalah contoh bot yang bodoh
sumber
BoringPlayer
Kebalikan dari RandomMandom, BoringPlayer selalu membuat pilihan yang sama. Masalahnya adalah tampaknya terlalu sukses untuk bot sederhana. Skor 3800+ dalam tes lokal saya.
sumber