ในจักรวรรดิจีนการจัดอันดับในสังคมไม่ได้เกิดจากการตัดสินใจหรือความมั่งคั่ง แต่เกิดจากความสามารถของบุคคลในการสอบจักรวรรดิ จักรพรรดิหยกผู้ปกครองสวรรค์แห่งสวรรค์ได้เรียกร้องให้อาสาสมัครทุกคนของเขาได้รับการตรวจสอบเพื่อกำหนดมูลค่าของพวกเขา
กฎของระบบราชการ:
- Divine Bureaucracy ประกอบด้วยตำแหน่งที่ไม่เป็นลบจำนวนเต็มเริ่มต้นด้วย 0 สมาชิกแต่ละคน (bot) ของระบบราชการอยู่ในอันดับหนึ่ง แต่ละอันดับสามารถมีสมาชิกได้ตามอำเภอใจ แต่ไม่สามารถเว้นว่างไว้ได้เว้นแต่ว่าอันดับทั้งหมดข้างต้นว่างเปล่า
- ในช่วงเริ่มต้นของเกมสมาชิกทุกคนมีอันดับ 0
- ทุกเทิร์นสมาชิกของระบบราชการแต่ละคนจะต้องตอบข้อสอบ การสอบประกอบด้วยการเดาค่าบูลีนของรายการอย่างถูกต้อง ความยาวของรายการคือจำนวนของอันดับเหนือสมาชิก
- คำถามการสอบจัดทำขึ้นโดยสมาชิกสุ่มของอันดับด้านบน สมาชิกระดับสูงสุดจะได้รับคำถามโดยตรงจาก
JadeEmperor
(ดูด้านล่าง) - สมาชิกที่ทำคะแนนอย่างน้อย 50% จากการสอบของพวกเขามีสิทธิ์ได้รับโปรโมชั่น สมาชิกที่ได้คะแนนน้อยกว่า 50% จากการสอบของพวกเขามีสิทธิ์ได้รับ Demotion
- สมาชิกที่มีสิทธิ์ได้รับ Demotion จะมีอันดับของพวกเขาลดลงหนึ่งรายเท่านั้นหากมีสมาชิกที่มีสิทธิ์ได้รับโปรโมชันในอันดับด้านล่างเพื่อเข้าร่วม
- สมาชิกทุกคนที่มีสิทธิ์ได้รับการเลื่อนอันดับจะเพิ่มขึ้นหนึ่งคนตราบใดที่ไม่มีการเลื่อนอันดับ
- หากไม่ใช่สมาชิกที่มีสิทธิ์ทั้งหมดสามารถถูกลดระดับหรือเลื่อนระดับการตั้งค่าจะไปที่การตอบสนองต่ำสุด (สำหรับการลดระดับ) คะแนนสูงสุด (สำหรับการส่งเสริมการขาย) ความสัมพันธ์จะถูกทำลายแบบสุ่ม
- อันดับของสมาชิกสามารถเปลี่ยนได้ไม่เกิน 1 รอบในแต่ละรอบ
กฎของเกม:
- บอทแต่ละตัวจะถูกสุ่มเลือก ID ในตอนเริ่มเกมซึ่งจะไม่เปลี่ยนไปตามเส้นทางของมัน The
JadeEmperor
มี ID -1 ส่วนอื่น ๆ ทั้งหมดมี ID ที่ไม่ใช่ลบติดกันเริ่มต้นด้วย 0 - บอตทั้งหมดแข่งขันในเวลาเดียวกัน
- เกมนี้วิ่งมา 100 รอบคะแนนของบอทนั้นอยู่ในระดับนั้นโดยเฉลี่ยในขณะนั้น
- คะแนนรวมได้มาจากการรัน 1,000 เกมและเฉลี่ยผลลัพธ์
- แต่ละ Bot เป็นคลาสPython 3 ที่ใช้สี่ฟังก์ชั่นต่อไปนี้:
ask(self,n,ID)
ซึ่งทำการสอบโดยคืนค่าlist
บูลีนที่มีความยาว n ID คือ ID ของบอตที่ต้องเดารายการนั้นask()
สามารถเรียกได้หลายครั้งในระหว่างรอบเดียวสำหรับบอทใด ๆ แต่ก็ไม่ได้เลยanswer(self,n,ID)
ซึ่งเป็นความพยายามในการตอบข้อสอบโดยส่งคืนlist
Booleans ที่มีความยาว n ID คือ ID ของบอตที่ask()
สร้างการทดสอบanswer()
เรียกว่าหนึ่งครั้งต่อรอบสำหรับแต่ละบอทupdate(self,rankList,ownExam,otherExams)
ถูกเรียกเมื่อผู้ควบคุมได้ดำเนินการทั้งหมดและการสาธิต อาร์กิวเมนต์ของมันคือ: รายการเลขจำนวนเต็ม, แสดงลำดับทั้งหมดตาม ID ของบอตทั้งหมด; tuple ประกอบด้วยสองรายการก่อนคำถามสอบจากนั้นคำตอบบอทให้ (ในกรณีที่มันลืม); จากนั้นรายการของ tuples ประกอบไปด้วยคู่สอบ - คำตอบคราวนี้สำหรับการสอบทั้งหมดที่บอทยื่นออกมา__init__(self, ID, n)
ผ่านบอท ID ของตัวเองและจำนวนของบอทที่แข่งขัน
- คลาสได้รับอนุญาตให้ใช้งานฟังก์ชั่นอื่น ๆ สำหรับการใช้งานส่วนตัว
- การกำหนดตัวแปรเพิ่มเติมและใช้เพื่อจัดเก็บข้อมูลเกี่ยวกับการสอบที่ผ่านมาได้รับอนุญาตอย่างชัดเจน
- ห้ามใช้เมตาเอฟเฟกต์การเขียนโปรแกรมหมายถึงความพยายามใด ๆ ในการเข้าถึงรหัสของบอทโดยตรงรหัสของคอนโทรลเลอร์ทำให้เกิดข้อยกเว้นหรือคล้ายกัน นี่คือการประกวดกลยุทธ์สำหรับการสอบไม่ใช่การแฮ็ครหัส
- บอตที่พยายามช่วยเหลือซึ่งกันและกันได้รับอนุญาตอย่างชัดเจนตราบใดที่พวกเขาไม่ทำผ่านเมตาเอฟเฟ็กต์ แต่ข้อมูลล้วนผ่าน
update()
- อนุญาตให้ใช้ภาษาอื่นในกรณีที่สามารถแปลงเป็น Python 3 ได้อย่างง่ายดาย
- numpy
np
ห้องสมุดจะถูกนำเข้าเป็น เวอร์ชันคือ 1.6.5 หมายถึงใช้ไลบรารีแบบสุ่มเก่า หากคุณมี 1.7 numpy ฟังก์ชั่นเก่าที่มีอยู่ภายใต้numpy.random.mtrand
การทดสอบได้ โปรดอย่าลืมลบ mtrand เพื่อส่ง - หากบอททำให้เกิดข้อยกเว้นระหว่างรันไทม์จะทำให้ไม่มีคุณสมบัติ บอทใด ๆ ที่มีรหัสงงงวยจนเป็นไปไม่ได้ที่จะบอกได้ว่ามันสร้างรายการความยาว n เมื่อ
ask()
หรือanswer()
ถูกเรียกว่าจะถูกตัดสิทธิ์ด้วยการจองชิง บอทบังคับให้ฉันไปที่ผลลัพธ์การทำสำเนาแบบลึกจะได้รับ -1 จากคะแนน - ชื่อคลาสจะต้องไม่ซ้ำกัน
- อนุญาตให้บอตหลายคนต่อคน แต่จะมีเฉพาะเวอร์ชันล่าสุดเท่านั้นที่จะได้รับการปรับปรุงซ้ำบอท
- เนื่องจากดูเหมือนจะมีความสับสนเกี่ยวกับความคล้ายคลึงกันของบอท:
- คุณไม่ได้รับอนุญาตให้โพสต์สำเนาของบอตอื่น นี่คือช่องโหว่มาตรฐานเท่านั้น ที่ใช้กับความท้าทายนี้
- คุณได้รับอนุญาตให้มีรหัสที่ใช้ร่วมกันกับบอทอื่นรวมถึงบอทของคนอื่น
- คุณไม่ได้รับอนุญาตให้ส่งบอทซึ่งแตกต่างจากการเปลี่ยนแปลงเล็กน้อยของกลยุทธ์ (เช่นการเปลี่ยนเมล็ดพันธุ์สำหรับการสร้างคำถาม) เว้นแต่คุณจะสามารถพิสูจน์ได้ว่าจำนวนบอตการคัดลอกคาร์บอนนั้นเป็นขั้นต่ำที่จำเป็นสำหรับการประสบความสำเร็จ ตรากฎหมายของพวกเขา (ซึ่งมักจะเป็นสองบอทสำหรับความร่วมมือ)
บอทตัวอย่าง:
เกมJadeEmperor
นี้เป็นส่วนหนึ่งของเกมเสมอ แต่ไม่แข่งขัน เขาทำหน้าที่เป็นเครื่องกำเนิดไฟฟ้าสำหรับการสอบบอทระดับสูงสุด การสอบของเขาเป็นแบบสุ่ม แต่ไม่เหมือนกันเพื่อให้สมาร์ทบอทสามารถก้าวหน้าได้
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 Drunkardสร้างข้อสอบและคำตอบแบบสุ่มสมบูรณ์ เขาจะเป็นส่วนหนึ่งของเกม
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
นักลอกเลียนแบบคัดลอกการสอบก่อนหน้านี้ เขาจะเป็นส่วนหนึ่งของเกมด้วย
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]
มีรหัสคอนโทรลเลอร์ ที่นี่ สำหรับการทดสอบคุณสามารถใส่ชั้นเรียนของคุณเองลงในไฟล์ Contestants.py ในโฟลเดอร์เดียวกันและพวกเขาจะถูกนำเข้า
การสอบเริ่มต้นขึ้น!
คะแนนปัจจุบันด้วยความแม่นยำสูงกว่า (วิ่ง 10,000 ครั้ง) ในวันที่ 20 ตุลาคม:
การแข่งขันจะดำเนินการกับรายการใหม่แต่ละรายการในอนาคตอันใกล้
ID, n
แต่ข้อโต้แย้งวิธีการอื่นn, ID
?