ผลลัพธ์สุดท้ายพร้อมใช้งาน
บทนำ
หลังจาก KOTH ฉันก่อนหน้านี้ที่มีรูปแบบหนัก ( สงครามแฟนตาซี , การแพร่ระบาดทั่วโลก ... ) ผมกลับมาพร้อมกับเกมในเฟซบุ๊คใหม่ เวลานี้คุณกำลังเผชิญหน้ากับสถานการณ์ "เหมือนเกมกระดาน" กองเหรียญคว่ำกลับถูกวางไว้ที่กลางโต๊ะใหญ่จริง ๆ และคุณตั้งใจที่จะรับส่วนแบ่งจากการปล้น!
อภิธานศัพท์
เหรียญ : เหรียญที่สามารถพลิกหรือไม่เปิดได้
Unflipped : เหรียญที่วางอยู่บนโต๊ะโดยมีค่าชี้ลง นี่คือสถานะเริ่มต้นของเหรียญ
พลิกแล้ว : เหรียญถูกวางไว้บนโต๊ะโดยมีค่าชี้ขึ้น
ในพื้นที่ : อ้างถึงกองเหรียญของคุณ
ทั่วโลก : หมายถึงกองเหรียญที่อยู่ตรงกลาง
หลัก
ในตอนเริ่มเกมผู้เล่นแต่ละคนจะเริ่มด้วย0 คะแนนและ0 เหรียญ (พลิกหรือไม่เปิด) เกมดังกล่าวเป็นแบบเลี้ยว ในช่วงเทิร์นของพวกเขาผู้เล่นสามารถดำเนินการได้ถึง 3 แอ็คชั่นที่มีปฏิสัมพันธ์กับกองเหรียญที่อยู่ตรงกลางโต๊ะกองเหรียญของตนเองหรือกับผู้เล่นอื่น
ลำดับการเล่นถูกกำหนดแบบสุ่มในช่วงเริ่มต้นของเกม คำสั่งของผู้เล่นในรายการอาร์กิวเมนต์แสดงถึงลำดับการเลี้ยวและมันไปจากซ้ายไปขวาในรายการนั้น "ถัดไป" และ "ก่อนหน้า" อ้างอิงตามลำดับถึง "ด้านขวาในรายการนั้น" และ "ด้านซ้ายในรายการนั้น" ด้วยลูปถ้าคุณเป็นคนสุดท้ายของทั้งสองด้าน
เกมดังกล่าวมีระยะเวลา50 รอบหรือจนกว่าจะมี0 เหรียญที่กึ่งกลางในตอนท้ายของการเปิดผู้เล่น (หมายความว่าคุณจะทำ 3 การกระทำของคุณให้เสร็จแม้ว่ากองจะว่างหลังจากการกระทำครั้งแรกของคุณและคุณสามารถนำเหรียญกลับมา เกมดำเนินต่อไป) จำนวนเริ่มต้นของเหรียญทั่วโลกถูกกำหนดแบบสุ่มด้วยสูตรนี้:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
การกระทำแต่ละอย่างจะทำให้คุณได้รับคะแนน (หรือทำให้คุณแพ้) และในตอนท้ายของเกมเหรียญแต่ละอันที่คุณมีจะถูกเพิ่มเข้าไปในคะแนนของคุณ ( -1 สำหรับการเปิดไม่ได้ +2 สำหรับการพลิก ) ผู้เล่นที่มีคะแนนสูงสุดจะเป็นผู้ชนะ
คอนโทรลเลอร์จะให้อินพุตกับคุณผ่านอาร์กิวเมนต์ของคำสั่งและโปรแกรมของคุณจะต้องเอาต์พุตผ่าน stdout
วากยสัมพันธ์
อินพุต
แต่ละครั้งที่โปรแกรมของคุณถูกเรียกมันจะได้รับข้อโต้แย้งในรูปแบบนี้:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
การปัดเศษเป็น 1 การจัดทำดัชนี
ตัวอย่างอินพุต
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
ที่นี่คุณจะเห็นว่ามันเป็นรอบที่ 6 และคุณเป็นผู้เล่น 2 มี 52 เหรียญในกองกลาง คุณมี 12 คะแนน, 1 เหรียญพลิกและ 0 เหรียญพลิก คะแนนอาจเป็นลบ
เอาท์พุต
คุณต้องส่งออกอักขระสามตัว (ไม่เว้นวรรคไม่มีตัวคั่น) ซึ่งแต่ละตัวสอดคล้องกับการกระทำหนึ่งที่คุณจะต้องทำ คำสั่งของตัวละครกำหนดลำดับของการกระทำ คุณสามารถแสดงผลการกระทำเดียวกันหลาย ๆ ครั้ง ในกรณีที่มีเหรียญไม่เพียงพอที่จะทำให้การกระทำของคุณเสร็จสมบูรณ์มันจะใช้เหรียญสูงสุดที่มีให้และนับแต้มเฉพาะเหรียญที่ใช้
N
: ไม่ทำอะไรเลย
1
: นำเหรียญ 1 กองจากกองกลาง[เอฟเฟ็กต์: + 1 จุดเปิด / -1 จุด / -1 ปลดล็อกทั่วโลก]
2
: นำ 2 เหรียญจากกองกลาง[เอฟเฟกต์: +2 จุดเปิด / -2 จุด / -2 โกลบอล unflipped]
3
: รับ 3 เหรียญจากกองกลาง[เอฟเฟกต์: +3 จุดที่ไม่ได้เปิดในระบบ / -3 แต้ม / -3 Global unflipped]
A
: นำกลับมา 1 เหรียญจากกองของคุณ[เอฟเฟ็กต์: -1 จุดเปิด / +1 ท้องถิ่น / +1 โกลบอล unflipped]
B
: ใส่กลับ 2 เหรียญจากกองของคุณ[เอฟเฟกต์: -2 unflipped ในพื้นที่ / +2 แต้ม / + 2 โกลบอล unflipped]
C
: ใส่กลับ 3 เหรียญจากกองของคุณ[เอฟเฟกต์: -3 unflipped ในท้องถิ่น / +3 คะแนน / +3 การเปิดตัวทั่วโลก]
X
: ลบ 1 เหรียญออกจากกองของคุณ[เอฟเฟ็กต์: -1 จุดเปิด / 0 จุด]
Y
: ลบ 2 เหรียญออกจากกองของคุณ[เอฟเฟ็กต์: -2 จุดเปิด / 0 จุด]
Z
: ลบ 3 เหรียญออกจากกองของคุณ[เอฟเฟ็กต์: -3 จุดเปิด / 0
R
หมุนท้องถิ่น] : หมุนเหรียญ ถึงผู้เล่นคนก่อน[เอฟเฟกต์: -1 จุดต่อการเปิดรับที่ได้รับ +2 คะแนนต่อการ
T
หมุนที่ได้รับ / นำไปใช้กับผู้เล่นทุกคน] : หมุนเหรียญไปยังผู้เล่นถัดไป[เอฟเฟ็กต์: -1 จุดต่อการรับที่ยังไม่ได้รับ ผู้เล่นทุกคน]
F
: พลิก 1 เหรียญ[เอฟเฟกต์: -1 จุดเปิด / 1 จุดพลิกในท้องถิ่น +2 จุด]
U
: ปลดล็อก 1 เหรียญ[เอฟเฟกต์: +1 จุดเปิด / -1 พลิกระดับท้องถิ่น / -2
ตัวอย่างผลลัพธ์
2FF
: ใช้สองเหรียญและพลิกสองเหรียญทำคะแนน -2 + 2 + 2 = 2 points
NNN
หากส่งออกของคุณไม่ถูกต้องควบคุมจะถือว่า
ตัวควบคุม
คุณสามารถค้นหาตัวควบคุมบนGitHub นอกจากนี้ยังมีบอตสองตัวอย่างที่เขียนด้วย Java ในการทำให้มันทำงานให้ตรวจสอบโครงการและเปิดใน Java IDE ของคุณ จุดเริ่มต้นในวิธีการของการเรียนmain
Game
ต้องใช้ Java 8
ในการเพิ่มบ็อตอันดับแรกคุณต้องใช้เวอร์ชันรวบรวมสำหรับ Java (ไฟล์. classclass) หรือแหล่งที่มาสำหรับภาษาที่ตีความ วางไว้ในโฟลเดอร์รูทของโครงการ จากนั้นสร้างคลาส Java ใหม่ในplayers
แพ็คเกจ (คุณสามารถนำตัวอย่างบนบอตที่มีอยู่แล้ว) ชั้นนี้จะต้องดำเนินการเพื่อแทนที่วิธีPlayer
String getCmd()
String ที่ส่งคืนคือคำสั่ง shell เพื่อรันบ็อตของคุณ เช่นคุณสามารถทำให้การทำงานของ ธ return "C:\Ruby\bin\ruby.exe MyBot.rb";
ปททับทิมด้วยคำสั่งนี้ ในที่สุดเพิ่ม bot ในอาร์เรย์ผู้เล่นที่ด้านบนของGame
ชั้นเรียน
กฎระเบียบ
- ไม่ควรเขียนบอทเพื่อเอาชนะหรือสนับสนุนบอทอื่น ๆ โดยเฉพาะ
- อนุญาตให้เขียนไฟล์ได้ โปรดเขียนถึง "yoursubmissionname.txt" โฟลเดอร์จะถูกทำให้ว่างเปล่าก่อนที่เกมจะเริ่ม ทรัพยากรภายนอกอื่น ๆ ไม่ได้รับอนุญาต
- ข้อมูลที่คุณส่งมี 1 วินาทีเพื่อตอบสนอง
- ให้คำสั่งเพื่อรวบรวมและเรียกใช้การส่งของคุณ
ภาษาที่รองรับ
ฉันจะพยายามและสนับสนุนทุกภาษา แต่จะต้องออนไลน์ให้ฟรี โปรดให้คำแนะนำสำหรับการติดตั้งหากคุณไม่ได้ใช้ภาษา "หลัก"
ณ ตอนนี้ฉันสามารถเรียกใช้: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11
ผลสุดท้าย
เหล่านี้คือผลลัพธ์ของเกม 100 เกม (มีการเพิ่มคะแนน):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
ผลลัพธ์ส่วนบุคคลของเกมมีให้ที่นี่: http://pasted.co/63f1e924 (ด้วยเหรียญเริ่มต้นและจำนวนรอบต่อเกม)
โปรดปราน 50 ชื่อเสียงเป็นรางวัลให้กับผู้ชนะ: นกในมือโดยมาร์ตินBüttner
ขอบคุณทุกท่านที่มีส่วนร่วมพบกันต่อไป KOTH ~