บทนำ
คุณติดอยู่บนเกาะร้างกับคนรับใช้บางคนและกำลังตามล่าหาสมบัติ การค้นหาที่ยาวกว่าหนึ่งการค้นหาที่มีค่ายิ่งมากขึ้น ยิ่งมีคนค้นหาน้อยลงเท่าใดแต่ละคนก็ค้นพบมากขึ้น
เนื่องจากมีเสบียง จำกัด ผู้นำจึงตัดสินใจว่าจะมีคนเพียงไม่กี่คนที่เหลือหนึ่งในสี่ของกลุ่มจะต้องตาย เขาตัดสินใจที่จะไม่บอกใครอย่างแน่นอนว่ามีกี่คนที่จะตายในวันใดวันหนึ่งก่อนเวลา
คุณอยู่ในการควบคุมของกลุ่มเล็ก ๆ 5 คนที่จะออกไปข้างนอกค่ายเพื่อหาสมบัติให้คุณ
วัตถุประสงค์
วัตถุประสงค์ของการแข่งขันนี้คือรวบรวมสมบัติให้ได้มากที่สุด ทุกครั้งที่คนรับใช้ของคุณไม่พยายามกลับไปที่ค่ายพวกเขาจะพบสมบัติล้ำค่าจำนวนหนึ่ง คนรับใช้ของคุณอาจกลับไปที่ค่ายในเวลาที่ต่างกัน
ทุกครั้งที่คนงานออกไปค้นหาขุมทรัพย์คนงานจะพบ1+R
ชิ้นส่วนของสมบัติที่ซึ่งR
จำนวนคนงาน (จากบอททั้งหมด) กลับมาอยู่ในค่ายแล้ว บอทที่ไม่ได้นำมาคำนวณในการคำนวณนี้
ในช่วงเริ่มต้นของแต่ละวันเป็นจำนวนสุ่ม ( n
) จาก2
ไปmax(3, floor(num_live_players/4))
จะได้รับเลือก (สำหรับผู้เล่น 10 คนในวันที่ 1 นี้เป็น2
ไปmax(3,50/4)=12
. สำหรับ 20 ผู้เล่นในวันที่ 1 นี้จะเป็น2
ไปmax(3,100/4)=25
.) ตัวเลขนี้หมายถึงจำนวนของผู้เล่นที่จะถูกทิ้งให้ตายในวันนั้นและจะไม่ได้รับการเขียนโปรแกรมของคุณ .
หากผู้รับใช้เป็นหนึ่งในn
คนสุดท้ายที่จะกลับมาเขา / เธอจะตายและไม่สามารถโอนสมบัติที่เขา / เธอพบให้คุณได้ นอกจากนี้คนรับใช้จะไม่สามารถมีส่วนร่วมในการตามล่าหาสมบัติตลอดการผจญภัยที่เหลือ
คะแนนสุดท้ายของคุณคือจำนวนเฉลี่ยของขุมทรัพย์ที่คุณได้รับต่อการผจญภัย (run of the controller)
หากมีคนพยายามที่จะกลับไปที่แคมป์มากกว่าที่มีอยู่ในสล็อตเปิดหมายเลขสุ่มจะเป็นตัวกำหนดว่าใครเข้ามาและใครตาย
หนึ่งวันบนเกาะแห่งนี้ตั้งแต่พระอาทิตย์ขึ้นจนถึงพระอาทิตย์ตกมีระยะเวลา 30 รอบ เนื่องจากมีสัตว์อันตรายจำนวนมากในเวลากลางคืนความล้มเหลวในการกลับมาตอนพระอาทิตย์ตกหมายความว่าคุณจะไม่ได้รับอนุญาตให้เข้าค่าย
Input / Output
โปรแกรมของคุณควรรันตลอดการจำลอง
ในช่วงเริ่มต้นของการจำลองINDEX I
จะมีการป้อนข้อมูลโดยที่I
ดัชนีของบ็อตของคุณ (ดัชนีนี้นับจาก 1 ขึ้นไป)
ในช่วงเริ่มต้นของแต่ละวันSTART_DAY D/N
จะมีการป้อนข้อมูลเข้าสู่โปรแกรมของคุณซึ่งD
เป็นหมายเลขวัน (เริ่มต้นจาก1
) และN
เท่ากับmax(3, floor(num_live_players/4))
ซึ่งเป็นจำนวนสูงสุดของผู้ที่อาจเสียชีวิตในวันนั้น
ที่จุดเริ่มต้นของแต่ละเทิร์นSTART_TURN T
จะถูกป้อนเข้าสู่โปรแกรมของคุณซึ่งT
เป็นหมายเลขเทิร์น (เริ่มต้นจาก1
)
เมื่อโปรแกรมของคุณได้รับสิ่งนี้ควรตอบสนองด้วยรายการการเคลื่อนไหวของคนรับใช้ของคุณแต่ละรายการคั่นด้วยเครื่องหมายจุลภาค
การเคลื่อนไหวที่ถูกต้องคือ:
R
: ลองกลับไปที่ค่ายS
: คอยตามหาสมบัติN
: คนใช้นั้นตายแล้วหรืออยู่ในค่าย
เข้าสู่การเคลื่อนไหวที่ไม่ถูกต้องจะถูกตีความราวกับS
ว่าบอทยังมีชีวิตอยู่และไม่ได้อยู่ในค่ายและN
อื่น ๆ
ในตอนท้ายของแต่ละเทิร์นสตริงจะถูกส่งผ่านไปยังโปรแกรมของคุณ:
END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ...
ที่การเคลื่อนไหวของคนรับใช้ของบอทแต่ละคนจะถูกคั่นด้วยเครื่องหมายจุลภาค
การเคลื่อนไหวเหล่านี้จะเป็นหนึ่งในสิ่งต่อไปนี้:
R
: กลับมาที่ค่ายที่ประสบความสำเร็จr
: ไม่สามารถกลับไปที่ค่ายนั้นได้S
: ยังคงมองหาสมบัติD
: เสียชีวิตในเทิร์นก่อนหน้านี้N
: กลับมาที่ค่ายแล้ว
บอตและคนรับใช้ยังคงอยู่ในลำดับเดิมตลอดการจำลองทั้งหมด
ตัวอย่างเช่น:
INDEX 2
....
END_TURN 8 N,N,N,N,N r,r,r,r,D D,D,D,N,R S,D,D,N,D
ที่นี่คุณเป็นบอตตัวที่สอง ( r,r,r,r,r
) ซึ่งพยายามส่งคืนผู้รับใช้ทั้งสี่คนที่ยังมีชีวิตอยู่ (และล้มเหลวทั้งสี่อย่างโชคร้าย) คนรับใช้ของบอท 1 กลับเข้าค่ายแล้ว บอท 3 มีผู้รับใช้ที่ตายแล้วสามคนอีกครั้งที่กลับเข้าค่ายอีกครั้งและหนึ่งในห้าคนที่กลับมาเรียบร้อยแล้ว บอท 4 มีคนรับใช้คนหนึ่งที่อยู่ (และจะตายเช่นนี้เป็นรอบสุดท้ายของวัน) หนึ่งคนรับใช้ในค่ายและสามคนรับใช้ที่ตายแล้ว
หลังจากแต่ละสตริงเหล่านี้ยกเว้นสตริงที่ส่งสัญญาณการสิ้นสุดของวันนั้นยังได้รับผลลัพธ์ (ดูด้านล่าง) โปรแกรมของคุณคือการส่งออกการเคลื่อนไหวครั้งต่อไปของคนรับใช้ของคุณคั่นด้วยเครื่องหมายจุลภาค คนรับใช้ทุกคนจะต้องได้รับการพิจารณา (ด้วยN
ถ้าอยู่ในค่ายและD
ถ้าตายไปแล้ว) การเคลื่อนไหวที่ไม่ถูกต้องจะได้รับการปฏิบัติเสมือนS
ว่าผู้รับใช้ไม่ได้อยู่ในค่าย / คนตาย ตัวอย่าง:
N,N,S,S,R
ซึ่งหมายความว่า:
Servant # | Action
1 | Do nothing.
2 | Do nothing.
3 | Stay put (keep looking for treasure).
4 | Stay put (keep looking for treasure).
5 | Try to return to camp.
ในตอนท้ายของวันสายต่อไปนี้จะถูกส่งหลังจากสายสุดท้ายของการEND
แจ้งให้ทุกคนที่ยังมีชีวิตอยู่:
END_DAY [Day #] [Bot 1 Status] [Bot 2 Status]
โดยที่สถานะนั้นเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคของA
( ทั้งชีวิต) หรือD
(ตาย) วันต่อมาจะเริ่มทันทีหลังจาก
การจำลองสิ้นสุดลงเมื่อมีคนรับใช้น้อยกว่า 6 คน โปรแกรมของคุณจะได้รับอินพุตต่อไปนี้เมื่อสิ้นสุดการจำลอง:
EXIT
กฎ / รายละเอียด
- เมื่อถึงจุดที่การกระทำของคุณ
S
จะพบสมบัติ - จำนวนของการจำลองที่ทำงาน: 1,000 ครั้ง
- โปรแกรมของคุณไม่ควรใช้เวลามากกว่า 1 วินาทีในการพิจารณาการเคลื่อนไหว
- โปรแกรมของคุณไม่ควรออกก่อนกำหนด; มันจะเริ่มต้นเพียงครั้งเดียว
- ตรวจสอบให้แน่ใจว่าล้างบัฟเฟอร์เอาต์พุต (ถ้ามี) หลังจากแต่ละเอาต์พุต
- ไฟล์อาจถูกเขียนลงในโฟลเดอร์ bot ของคุณ (
./players/BotName/
) ชื่อบอทของคุณคือชื่อบอทของคุณโดยที่อักขระที่ไม่ใช่ตัวอักษรและตัวเลขทั้งหมดถูกลบและเขียนใน CamelCase รายการอาจบันทึกข้อมูลระหว่างการรันของคอนโทรลเลอร์เนื่องจากการรันจะดำเนินการตามลำดับ EXIT
โปรแกรมของคุณต้องออกหลังจากที่ได้รับ- โปรแกรมที่ไม่สามารถคอมไพล์หรือโยนข้อผิดพลาดหรือเอาท์พุทข้อความที่ไม่ถูกต้อง (ไม่ใช่ในรูปแบบ 5 ตัวคั่นด้วยเครื่องหมายจุลภาค) อาจถูกแยกออกจากการแข่งขัน บรรทัดใหม่ต้องเป็นไปตามแต่ละเอาต์พุต
- ควบคุมอาจจะพบได้บน GitHub
โปรดระบุชื่อบอทภาษา + รุ่นรหัสและคำสั่งเพื่อรวบรวม (ถ้ามี) และเรียกใช้บ็อตของคุณ
ตัวอย่าง
>
ข้อความออกมาโดยโปรแกรมจะนำหน้านี่ด้วย โปรแกรมของคุณไม่ควรออกอักขระนี้
INDEX 2
START_DAY 1/3
START_TURN 1
>S,S,S,S,S
END_TURN 1 S,R,S,S,S S,S,S,S,S
START_TURN 2
>S,S,S,S,S
END_TURN 2 S,N,S,R,S S,S,S,S,S
START_TURN 3
>R,R,S,S,S
END_TURN 3 R,N,R,N,R R,R,S,S,S
START_TURN 4
>N,N,S,S,S
END_TURN 4 N,N,N,N,N N,N,S,S,S
START_TURN 5
>N,N,R,R,R
END_TURN 5 N,N,N,N,N N,N,r,r,R
END_DAY 1 A,A,A,A,A A,A,D,D,A
START_DAY 2/3
START_TURN 1
>S,S,N,S,N
END_TURN 1 R,R,R,R,R S,S,D,D,N
END_DAY 2 A,A,A,A,A D,D,D,D,D
EXIT
คะแนนสำหรับตัวอย่างด้านบนคือ:
Bot# Day 1 Day 2 Total
1 10 0 10
S1 1+2 0 3
S2 0 0 0
S3 1+2 0 3
S4 1 0 1
S5 1+2 0 3
2 20 0 20
S1 1+2 0 3
S2 1+2 0 3
S3 0 0 0
S4 0 0 0
S5 1+2+3+8 0 14
ผู้ชนะจึงเป็นผู้เล่นบอท 2 โปรดทราบว่าผู้ชนะไม่จำเป็นต้องเอาชีวิตรอดให้ถึงที่สุด (โปรดทราบว่าผู้เล่นจะยังคงอยู่จนกระทั่งครบ 30 ในวันที่ 1 เนื่องจากค่ายจะไม่เต็มจนกว่าผู้เล่นจะส่งบอทกลับมาอีกหนึ่งอัน)
คะแนน
Bot Score
Bob 2939.422
Statisticians 2905.833
Morning Birds 1652.325
Evolved 1578.285
Slow Returners 1224.318
Wandering Fools 1065.908
Randomizers 735.313
Drunkards 0
Plague 0
ท่อนที่มีอยู่บน GitHub ผลลัพธ์ต่อการทดลองแต่ละครั้งมีอยู่ในสเปรดชีต googleนี้