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.
sumber
ID, n
tetapi argumen metode lainn, ID
?Jawaban:
Santayana
Mereka yang tidak dapat mengingat masa lalu dikutuk untuk mengulanginya. Jadi kami membuat keputusan berdasarkan pada tindakan orang lain di masa lalu, menjawab berdasarkan jawaban yang biasanya diharapkan oleh penanya dari kami pada indeks yang diberikan, dan meminta jawaban yang paling jarang mereka berikan pada indeks yang diberikan. .
sumber
Bot Belajar
Bot ini mempelajari tes! Mencoba untuk menemukan pola dalam tes yang diberikan oleh berbagai bot dan bertindak sesuai.
Sejauh ini, sejauh ini, bot ini mengungguli semua bot lain yang bisa saya kerjakan di komputer saya kecuali dari Alpha, Beta dan Gamma (yang telah diprogram untuk bekerja bersama). Bot tidak memanfaatkan fakta bahwa kerjasama tim diperbolehkan karena saya merasa itu agak seperti curang dan sedikit kotor. Melihat lebih dari itu, bekerja sama tampaknya cukup efektif.
Bot mencoba mengenali kapan jawaban untuk tes acak dan dalam tanggapan cocok dengan yang diharapkan rata-rata 50% pada tes.
Bot juga mencoba mengenali ketika bot hanya membalikkan jawaban untuk membuang bot lain yang ingin memprediksi perilaku mereka, namun saya belum memprogramnya untuk secara khusus bertindak atas hal ini.
Saya telah mencatat kode dengan beberapa komentar untuk membuatnya lebih mudah dibaca
sumber
Hitung Oracle
Bot ini menggunakan algoritma yang rata-rata ujian dari semua bot kerja lainnya, (mengingat angka bulat dan beberapa heuristik mengerikan) untuk memutuskan apa yang akan ditetapkan masing-masing bot lain sebagai ujian.
Count meminta ujian menggunakan hash MD5. Karena itu baik pertanyaan maupun jawabannya adalah deterministik. Itu mengabaikan sebagian besar input, menanyakan dan menjawab urutan boolean, hujan atau cerah yang sama persis, termasuk terhadap Jade Emporer.
sumber
Yin Yang
Menjawab semua
True
atau semuaFalse
, kecuali satu indeks yang dipilih secara acak sebagai kebalikannya. Tanyakan kebalikan dari apa yang dijawabnya. Bertukar secara acak untuk membuang lawan.Wi Qe Lu (Switcheroo)
Menjawab dan bertanya secara acak di babak pertama. Setelah itu, ia menggunakan jawaban dari ujian sebelumnya, dan mengubah pertanyaan jika jumlah rata-rata pesaing di atas benar.
sumber
Satu bot milik saya:
Thomas
Seorang musafir dari negeri yang jauh, memiliki beberapa ide berbahaya tentang hasil masa lalu yang mengindikasikan kinerja masa depan. Dia menggunakan itu untuk menjaga bot lain turun, kecuali jika itu menghambat kemajuannya sendiri.
sumber
Alfa
Baca obrolan sebelum downvoting. Bot ini tidak melanggar aturan apa pun. OP bahkan mendorong bot yang bekerja sama.
Alpha membentuk tim bersama Beta. Keduanya menggunakan satu set ujian yang telah ditentukan untuk membantu satu sama lain naik peringkat. Keduanya juga memanfaatkan bot menggunakan ujian yang sama berulang-ulang.
sumber
Equalizer
Setiap orang harus setara (dengan tidak ada omong kosong kaisar konyol ini), jadi sediakan mobilitas sosial sebanyak mungkin. Buat pertanyaan itu sangat mudah (jawabannya selalu Benar) sehingga orang bisa sukses.
sumber
Beta
Baca obrolan sebelum downvoting. Bot ini tidak melanggar aturan apa pun. OP bahkan mendorong bot yang bekerja sama.
Beta membentuk tim bersama dengan Alpha. Keduanya menggunakan satu set ujian yang telah ditentukan untuk membantu satu sama lain naik peringkat. Keduanya juga memanfaatkan bot menggunakan ujian yang sama berulang-ulang.
sumber
Gamma
Baca obrolan sebelum downvoting. Bot ini tidak melanggar aturan apa pun. OP bahkan mendorong bot yang bekerja sama.
Gamma telah menemukan rencana Alpha dan Beta dan mencoba untuk mengambil keuntungan dari keduanya dengan menyamar sebagai salah satu dari mereka.
sumber
TitForTat
Mengajukan pertanyaan mudah jika Anda mengajukan pertanyaan mudah di masa lalu. Jika Anda belum pernah memberikan ujian, ujian ini default untuk pertanyaan mudah.
Selain itu, tidak mempercayai siapa pun yang mengajukan pertanyaan sulit, dan akan memberi mereka jawaban yang tidak terduga.
Bot ini berfungsi dengan baik jika bot lain bekerja sama dengannya. Saat ini hanya Equalizer yang bekerja sama, tetapi semoga ini cukup.
sumber
list
objek setiap saat. Selain itu, di bawah aturan lama dan yang diperbarui, salinan bot yang sempurna bukan kiriman yang valid, sehingga jumlah mesin bot yang diizinkan yang diizinkan adalah 1.Kebalikan
Kaisar Giok selalu benar, sehingga ia mengimplementasikan fungsi permintaan Kaisar Giok sebagai fungsi jawabannya sendiri ketika ia membutuhkan lebih dari 2 jawaban. Hanya 1 yang menjawabnya
true
(kemungkinan yang tepat untuk benar) dan untuk 2 menjawabnyatrue,false
( ini melewati "setidaknya setengah" dari pertanyaan tiga dari empat kemungkinan kuis, lebih baik daripada memilih secara acak).Menggunakan logika yang sama dalam Pembaruannya sehubungan dengan bagaimana ia mengubah pola permintaannya, tetapi logika permintaannya serupa dengan Kaisar Giok, hanya dengan bobot yang berbeda. Berfluktuasi antara nilai yang lebih tinggi
true
dengan nilai yang lebih tinggifalse
ketika terlalu banyak kandidat mendapat skor yang cukup tinggi untuk lulus.sumber
true, false
gagal jika ujiannyafalse, true
?answer
memiliki kesalahan sintaksis dan nama -true
danfalse
seharusnyaTrue
danFalse
, danif
s hilang:
pada akhirnyaupdate
.pass
adalah perintah NOP, Anda dapat menghapusnya. (Komentar di baliknya hanyalah pelesetan untuk Drunkard yang Anda salin.) Juga, Anda secara implisit menggunakanmath
danrandom
modul tetapi tidak menyatakan Anda mengimpornya. Saya telah menulis ulang dalam file kontes sayanp.copysign
dannp.random.uniform
itu harus melakukan hal yang sama.Marx
Ini adalah bot Marx. Dia percaya bahwa, alih-alih birokrasi, kita harus memiliki sistem komunis. Untuk membantu mencapai tujuan ini, itu memberikan kuis yang lebih sulit ke bot peringkat yang lebih tinggi. Ini juga memberikan jawaban yang lebih acak untuk kuis dari bot yang lebih tinggi, karena mereka mungkin lebih pintar, karena mereka lebih tinggi.
sumber