Di Imperial China, peringkat dalam masyarakat tidak ditentukan oleh kelahiran atau kekayaan, tetapi oleh kemampuan seseorang untuk unggul dalam Pemeriksaan Imperial. Kaisar Giok, penguasa ilahi Surga, telah menyerukan agar semua rakyatnya diperiksa untuk menentukan nilainya, dan siapa yang selanjutnya memberikan Mandat Ilahi untuk memerintah Tiongkok.
Aturan Birokrasi:
- Birokrasi Ilahi terdiri dari peringkat bilangan bulat non-negatif, dimulai dengan 0. Setiap anggota (bot) birokrasi termasuk dalam satu peringkat. Setiap peringkat dapat menampung banyak anggota secara sewenang-wenang, tetapi tidak dapat kosong kecuali semua peringkat di atas kosong
- Di awal permainan, semua anggota memiliki peringkat 0
- Setiap belokan, setiap anggota birokrasi harus menjawab ujian. Ujian terdiri dari menebak dengan benar nilai boolean dari daftar. Panjang daftar adalah jumlah pangkat di atas anggota.
- Pertanyaan ujian disiapkan oleh anggota acak dari peringkat di atas. Anggota dari peringkat tertinggi mendapatkan pertanyaan mereka langsung dari
JadeEmperor
(lihat di bawah) - Seorang anggota yang mencetak setidaknya 50% pada ujian mereka memenuhi syarat untuk Promosi. Anggota yang mendapat skor kurang dari 50% pada ujian mereka memenuhi syarat untuk Demosi.
- Anggota yang memenuhi syarat untuk Demosi, peringkatnya akan berkurang satu hanya jika ada anggota yang memenuhi syarat untuk Promosi pada peringkat di bawah ini untuk menggantikannya.
- Semua anggota yang memenuhi syarat untuk Promosi memiliki peringkat mereka naik satu selama ini tidak meninggalkan peringkat kosong.
- Jika tidak semua anggota yang memenuhi syarat dapat Dipilih atau Dipromosikan, preferensi diberikan kepada yang terendah (untuk Demosi) resp. skor tertinggi (untuk Promosi). Ikatan rusak secara acak.
- Peringkat anggota hanya dapat berubah paling banyak 1 setiap giliran.
Aturan main:
- Setiap bot akan diberi ID secara acak pada awal permainan, yang tidak akan berubah seiring perjalanannya. Itu
JadeEmperor
memiliki ID -1, semua orang lain memiliki ID non-negatif berturut-turut, dimulai dengan 0. - Semua bot bersaing pada saat bersamaan
- Permainan berjalan untuk 100 putaran, skor bot adalah peringkat rata-rata yang dimilikinya selama waktu itu.
- Skor total diperoleh dengan menjalankan 1000 game dan rata-rata hasilnya.
- Setiap Bot adalah kelas Python 3 yang mengimplementasikan empat fungsi berikut:
ask(self,n,ID)
, yang membuat ujian dengan mengembalikan alist
dari Boolean dengan panjang n. ID adalah ID bot yang harus menebak daftar itu.ask()
dapat dipanggil berkali-kali selama satu putaran untuk bot apa pun, tetapi juga tidak sama sekali.answer(self,n,ID)
, yang merupakan upaya untuk menjawab ujian dengan mengembalikan alist
dari Boolean dengan panjang n. ID adalah ID bot yangask()
menghasilkan ujian.answer()
disebut tepat sekali per putaran untuk setiap bot.update(self,rankList,ownExam,otherExams)
dipanggil setelah Kontroler melakukan semua Pro dan Demosi. Argumennya adalah: Daftar bilangan bulat, daftar semua peringkat dengan ID semua bot; sebuah tuple, yang terdiri dari dua daftar, pertama pertanyaan ujian, lalu jawaban yang diberikan bot (jika lupa); kemudian daftar tupel, yang juga terdiri dari pasangan jawaban-ujian, kali ini untuk semua ujian yang dibagikan bot.__init__(self, ID, n)
melewati bot IDnya sendiri dan jumlah bot yang bersaing.
- Kelas diizinkan untuk mengimplementasikan fungsi lain untuk penggunaan pribadi
- Menentukan variabel lebih lanjut dan menggunakannya untuk menyimpan data tentang ujian sebelumnya diizinkan secara eksplisit.
- Pemrograman meta-efek dilarang, artinya setiap upaya untuk secara langsung mengakses kode bot lain, kode Pengendali, menyebabkan Pengecualian atau serupa. Ini adalah kontes strategi untuk ujian, bukan peretasan kode.
- Bot yang mencoba saling membantu diizinkan secara eksplisit, selama mereka tidak melakukannya melalui meta-efek, tetapi murni oleh informasi yang diteruskan
update()
- Bahasa lain hanya diizinkan jika bahasa itu dapat dengan mudah dikonversi ke Python 3.
- Perpustakaan numpy akan diimpor sebagai
np
. Versi 1.6.5, artinya menggunakan pustaka acak lama. Jika Anda memiliki numpy 1.7, fungsi-fungsi lama tersedianumpy.random.mtrand
untuk pengujian. Harap ingat untuk menghapus mtrand untuk pengiriman. - Jika bot menyebabkan Pengecualian selama runtime, itu didiskualifikasi. Setiap bot yang kodenya begitu dikaburkan sehingga tidak mungkin untuk mengetahui apakah ia menghasilkan daftar panjang n ketika
ask()
atauanswer()
dipanggil juga akan didiskualifikasi terlebih dahulu. Bot yang memaksa saya untuk menyalin dalam-dalam mendapat skor -1. - Nama kelas harus unik
- Beberapa bot per orang diperbolehkan, tetapi hanya versi terbaru yang akan diambil dari bot yang diperbarui secara berulang.
- Karena tampaknya ada beberapa kebingungan tentang kesamaan bot:
- Anda tidak diperbolehkan memposting salinan bot lain. Ini adalah satu-satunya Celah Standar yang benar-benar berlaku dalam tantangan ini.
- Anda diizinkan berbagi kode dengan bot lain, termasuk bot orang lain.
- Anda tidak diperbolehkan mengirimkan bot yang berbeda dari yang lain hanya dengan perubahan sepele pada strategi (seperti perubahan pada seed untuk generasi pertanyaan) kecuali Anda dapat membuktikan bahwa jumlah bot salinan karbon tersebut adalah minimum yang diperlukan untuk berhasil berlakunya strategi mereka (Itu biasanya akan menjadi dua bot untuk kerjasama).
Contoh Bot:
Itu JadeEmperor
selalu menjadi bagian dari permainan, tetapi tidak bersaing; dia berfungsi sebagai generator untuk ujian bot peringkat tertinggi. Ujiannya acak, tetapi tidak seragam, untuk memungkinkan bot pintar cara untuk maju.
class JadeEmperor:
def __init__(self):
pass
def ask(self,n,ID):
num=min(np.random.exponential(scale=np.sqrt(np.power(2,n))),np.power(2,n)-1)
bi=list(np.binary_repr(int(num),width=n))
return [x=='0' for x in bi]
The pemabuk menghasilkan ujian dan jawaban benar-benar acak. Dia akan menjadi bagian dari permainan.
class Drunkard:
def __init__(self,ID,n):
pass
def ask(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def answer(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def update(self,rankList,ownExam,otherExams):
pass #out
The plagiator hanya salinan ujian sebelumnya. Dia juga akan menjadi bagian dari permainan.
class Plagiarist:
def __init__(self,ID,n):
self.exam=[True]
def ask(self,n,ID):
return (self.exam*n)[0:n]
def answer(self,n,ID):
return (self.exam*n)[0:n]
def update(self,rankList,ownExam,otherExams):
self.exam=ownExam[0]
Kode pengontrol tersedia di sini . Untuk pengujian, Anda bisa memasukkan kelas Anda sendiri ke file Contestants.py di folder yang sama, dan mereka akan diimpor.
Ruang obrolan dapat ditemukan di sini .
Ujian dimulai!
Skor saat ini, dalam presisi lebih tinggi (10000 berjalan) untuk Oct20:
Kontes akan dijalankan dengan setiap entri baru untuk masa yang akan datang.
ID, n
tetapi argumen metode lain n, ID
?