หมายเหตุ : ผู้ชนะการแข่งขันนี้คือแจ็ค !!! จะไม่มีการส่งข้อมูลเพิ่มเติมอีก
นี่คือห้องแชทสำหรับการท้าทายที่ท้าทาย นี่เป็นครั้งแรกของฉันดังนั้นฉันจึงเปิดรับข้อเสนอแนะ!
Reaper เป็นแนวคิดเกมที่พัฒนาโดย Art of Problem Solving ซึ่งเกี่ยวข้องกับความอดทนและความโลภ หลังจากปรับเปลี่ยนเกมให้เหมาะกับการประกวดสไตล์ KOTH (ขอบคุณ @NathanMerrill และ @dzaima สำหรับคำแนะนำและการปรับปรุงของคุณ) นี่คือความท้าทาย
เกมทำงานดังต่อไปนี้: เรามีค่าที่รู้จักกันในชื่อ Reap ที่คูณด้วยค่าคงที่ที่กำหนดทุกติ๊ก หลังจากแต่ละเห็บแต่ละบอทมีตัวเลือก "รับผล" ซึ่งหมายถึงการเพิ่มมูลค่าปัจจุบันของการเก็บเกี่ยวให้กับคะแนนของตัวเองและลดการเรียบลงถึง 1
อย่างไรก็ตามมีการทำเครื่องหมายจำนวนคงที่ที่บอตต้องรอระหว่าง "reaps" และจำนวนคะแนนคงที่ที่จำเป็นในการชนะเกม
ง่ายพอหรือยัง นี่คืออินพุตของคุณ:
I / O
คุณต้องเขียนฟังก์ชันใน Python 3 ที่รับ 3 อินพุต ประการแรกคือself
ใช้สำหรับการอ้างอิงวัตถุระดับ (แสดงในภายหลัง) อย่างที่สองคือReap
มูลค่าปัจจุบันของการเก็บเกี่ยวที่คุณจะได้รับหากคุณ "เก็บเกี่ยว" รายการที่สามคือprevReap
รายการของบ็อตที่ถูกอ่านระหว่างการทำเครื่องหมายก่อนหน้า
วัตถุอื่น ๆ ที่คุณสามารถเข้าถึงได้ในฟังก์ชั่นของคุณ:
self.obj: An object for your use to store information between ticks.
self.mult: The multiplier that Reap is multiplied by each tick
self.win: The score you need to win
self.points: Your current set of points
self.waittime: The amount of ticks that you must wait between reaps during the game
self.time: The number of ticks since your last reap
self.lenBots: The number of bots (including you) in the game.
self.getRandom(): Use to produce a random number between 0 and 1.
คุณต้องself.obj
ไม่แก้ไขเนื้อหาของวัตถุเหล่านี้ยกเว้น
คุณต้องเอาท์พุท1
เพื่อเก็บเกี่ยวและสิ่งอื่นใด โปรดทราบว่าหากคุณได้รับเมื่อคุณไม่ได้รอเห็บเพียงพอฉันจะไม่สนใจความจริงที่ว่าคุณเลือกที่จะเก็บเกี่ยว
กฎระเบียบ
พารามิเตอร์ที่ผมจะใช้เป็นwinning_score=10000
, multiplier=1.6-(1.2/(1+sqrt(x)))
, waittime = floor(1.5*x)
ที่x
คือจำนวนของบอทใน KOTH ที่
- เกมจะจบลงเมื่อผู้เล่น (หรือหลายคน) บรรลุคะแนนที่ชนะ
- เมื่อบอทจำนวนมากขอให้เก็บเกี่ยวได้ในครั้งเดียวจะได้รับการจัดลำดับความสำคัญกับบอทที่รออีกต่อไป (ในกรณีที่มีความสัมพันธ์กันบอทที่รอเวลาสูงสุดทั้งหมดจะได้รับอนุญาตให้เก็บเกี่ยวและรับคะแนนในการเรียบ)
- บอทของคุณต้องใช้เวลาโดยเฉลี่ยไม่เกิน 100 มิลลิวินาทีใน 5 ขีด
- หากคุณต้องการนำเข้าห้องสมุดถาม! ฉันจะพยายามเพิ่มไลบรารี่ใด ๆ ที่ฉันสามารถรันบน Python เวอร์ชันเดสก์ท็อปของฉัน (นำเข้าคณิตศาสตร์แล้ว: อย่าลังเลที่จะใช้มัน)
- ช่องโหว่มาตรฐานทั้งหมดสำหรับ KoTHs เช่นบ็อตซ้ำ, บอต 1 ครั้ง ฯลฯ ถูกแบนในทำนองเดียวกัน
- บ็อตใด ๆ ที่ใช้การสุ่มใด ๆ จะต้องใช้
getRandom
ฟังก์ชั่นที่ฉันได้จัดเตรียมไว้
คุณสามารถค้นหาคอนโทรลเลอร์ได้จากลิงค์ TIO ด้านล่าง หากต้องการใช้งานให้เพิ่มชื่อฟังก์ชันของคุณBotList
เป็นสตริงแล้วเพิ่มฟังก์ชันลงในโค้ด ปรับเปลี่ยนmultiplier
เพื่อเปลี่ยนแปลงสิ่งที่จะถูกคูณด้วยจำนวนของแต่ละเห็บแก้ไขwinning_score
เพื่อเปลี่ยนคะแนนที่จำเป็นในการจบเกมและปรับเปลี่ยนwaittime
เพื่อเปลี่ยนจำนวนของเห็บเพื่อรอระหว่าง reaps
เพื่อความสะดวกของคุณนี่คือตัวอย่างบอท (และค่อนข้างโง่) การส่งบ็อตที่คล้ายกับสิ่งเหล่านี้จะไม่ได้รับอนุญาต อย่างไรก็ตามพวกเขาสาธิตวิธีการทำงานของคอนโทรลเลอร์
def Greedybot(self,Reap, prevReap):
return 1
def Randombot(self,Reap, prevReap):
if self.obj == None:
self.obj=[]
self.obj.append(prevReap)
if self.getRandom()>0.5:
return 1
สำหรับผู้ที่สนใจนี่คือผู้ควบคุมที่มี 15 ผลงานที่สร้างไว้: ลองออนไลน์
ผลลัพธ์สุดท้าย
พวกเขาอยู่ที่นี่ในที่สุด! ตรวจสอบลิงค์ TIO ด้านบนเพื่อดูว่าฉันใช้รหัสใดในการสร้างอันดับสุดท้าย ผลลัพธ์ไม่น่าสนใจอย่างยิ่ง กว่า 1,000 ครั้งที่ฉันทำกับเมล็ดสุ่มที่แตกต่างกันผลลัพธ์ก็คือ
1000 wins - Jack
0 wins - everyone else
ขอแสดงความยินดีกับแจ็คผู้ชนะรางวัล !! (aka @Renzeee)
len(BotList)
?
25
บอทในการเล่น ก่อนอื่นจะรอดูบอทของคนอื่นด้วย Rushabh Mehtaจะมีกำหนดเส้นตาย / วันสุดท้ายเมื่อบอตทั้งหมดจะถูกเรียกใช้และผู้ชนะจะถูกกำหนด?