ในการท้าทายนี้คุณจะเขียนบอทที่เล่นเป็นภาวะที่กลืนไม่เข้าคายไม่ออกของนักโทษ นี่คือสิ่งที่คุณจะไม่สามารถเข้าถึงประวัติของเกมก่อนหน้านี้ แต่คุณจะสามารถเข้าถึงคู่ต่อสู้ได้ ในเวอร์ชั่นนี้ผู้เล่นทั้งสองจะได้รับ +2 คะแนนหากพวกเขาทั้งสองร่วมมือกัน +1 คะแนนหากพวกเขาทั้งคู่เสียและถ้าหากใครคนใดคนหนึ่งร่วมมือกัน แต่มีข้อบกพร่องอย่างใดอย่างหนึ่ง การส่งแต่ละครั้งจะถูกเล่นกับการส่งอื่น ๆ รวมถึงตัวเอง 10 ครั้ง ผู้ชนะคือการส่งที่มีคะแนนรวมมากที่สุด
ตัวควบคุม : คุณควรเขียนฟังก์ชันจาวาสคริปต์ในแบบฟอร์ม
function submissionName(them) {
/* Your code here */
}
คอนโทรลเลอร์ใช้name
คุณสมบัติของฟังก์ชันเพื่อแสดงผลลัพธ์ดังนั้นหากไม่อยู่ในรูปแบบนี้ (และใช้แทนf = x => ...
หรือf = function() { ... }
) จะเห็นคะแนนของคุณได้ยากและคุณจะไม่สามารถเข้าถึงฟังก์ชันของคุณเองได้
ฟังก์ชั่นจะยอมรับหนึ่งพารามิเตอร์: them
ซึ่งเป็นฟังก์ชั่นของฝ่ายตรงข้าม จากนั้นอาจเรียกฟังก์ชันนั้นเพื่อดูว่าปฏิกิริยาของฝ่ายตรงข้ามจะได้รับฟังก์ชั่นบางอย่างเป็นอินพุต จากข้อมูลดังกล่าวคุณต้องส่งคืน 'C' หรือ 'D' สำหรับความร่วมมือหรือข้อบกพร่องตามลำดับ
ตัวอย่าง (จะแข่งขัน):
function cooperate(them) {
return 'C';
}
function defect(them) {
return 'D';
}
function nice(them) {
// Do whatever they would do when faced with a cooperator
return them(wrap(_ => 'C'));
}
คอนโทรลเลอร์มีอยู่ที่นี่
กฎ :
- คุณจะไม่สามารถเห็นรหัสของคู่ต่อสู้ได้ ฟังก์ชั่นทั้งหมดจะถูกห่อเพื่อให้ดูเหมือนกันเมื่อ
toString()
ถูกเรียก วิธีเดียวที่จะตรวจสอบคู่ต่อสู้ (ที่อาจเป็นตัวคุณเอง) คือการทดสอบพวกเขา - ฟังก์ชั่นของคุณไม่จำเป็นต้องกำหนดไว้ล่วงหน้า
submissionName.state = {};
คุณอาจจะช่วยรัฐโดยการตั้งค่าคุณสมบัติในการทำงานของคุณเองเช่น อย่างไรก็ตามระหว่างการแข่งขัน (แม้ระหว่างการแข่งขันของผู้เล่นที่เดียวกัน) รัฐจะถูกล้างออกโดยการโทรและtoString()
eval
ดังนั้นจึงไม่มีหน่วยความจำของการแข่งขันก่อนหน้านี้ - ลำดับของฟังก์ชันที่เรียกว่าอันดับแรกในการแข่งขันแต่ละครั้งจะถูกสุ่ม
- หากรหัสของคุณมีข้อผิดพลาดจะถือว่าเป็นความร่วมมือกับคุณในขณะที่ฝ่ายตรงข้ามเสีย หากคุณเป็นคนแรกที่ทำงานรหัสของคู่ต่อสู้จะไม่ถูกเรียก
them
นี้เกิดขึ้นแม้ว่าเกิดข้อผิดพลาดในรหัสของฝ่ายตรงข้ามในขณะที่ในขณะที่คุณกำลังเรียกร้อง ระวังข้อผิดพลาดล้นสแต็คโดยเฉพาะอย่างยิ่งถ้ารหัสของคุณโทรthem(wrap(submissionName))
เพราะพวกเขาอาจทำเช่นเดียวกัน - คุณอาจจะไม่สามารถเข้าถึงตัวแปร
self
หรือตัวแปรอื่น ๆ ที่เกิดขึ้นจะอยู่ในขอบเขตเมื่อถูกเรียกยกเว้นฟังก์ชั่นeval
wrap
ฟังก์ชั่นนี้ช่วยให้คุณสามารถเรียกฝ่ายตรงข้ามในลักษณะที่แยกไม่ออกจากวิธีที่ตัวควบคุมเรียกฟังก์ชั่น คุณอาจจะไม่ได้เขียนถึงMath
,window
ฯลฯ (คุณอาจจะใช้ฟังก์ชั่นเช่นMath.random()
อย่างไร) - คุณไม่สามารถเข้าถึงการติดตามสแต็กได้โดยการสร้าง
Error
หรือโดยวิธีอื่น
หมายเหตุเกี่ยวกับการใช้เวลานานเกินไป: โปรดหลีกเลี่ยงการติดอยู่ใน while
วนซ้ำตลอดไป เวลารวมของผู้แข่งขันทั้งสองไม่ควรเกิน 1 วินาทีในรอบใดก็ตาม ในการบังคับใช้นี้จะมีการเลือกการหมดเวลาแบบสุ่มระหว่าง 1,000 มิลลิวินาทีและ 2000 มิลลิวินาที (เพื่อหลีกเลี่ยงการเล่นเกมโดยตั้งใจรอจำนวนเวลาที่ทราบ) และหากผู้ปฏิบัติงานใช้เวลานานกว่านั้นในการดำเนินการข้อผิดพลาดจะถูกโยนทิ้ง หากสิ่งนี้เกิดขึ้นสาเหตุของข้อผิดพลาดจะถูกกำหนดดังนี้: การดำเนินการจะถูกหยุดชั่วคราวในช่วงเวลาสุ่มหลังจาก 1000 มิลลิวินาทีและสแต็คการโทรในช่วงเวลานั้นจะถูกตรวจสอบ คู่แข่งรายล่าสุดที่เรียกว่าอยู่ในลูป (หรือเรียกซ้ำคล้ายลูปในแง่ที่ตั้งค่าการเรียกซ้ำเพื่อหลีกเลี่ยงข้อผิดพลาดสแต็คล้น) จะถูกตำหนิ หากคู่แข่งรายเดียวกันถูกตำหนิเนื่องจากทำให้เกิดข้อผิดพลาด "ใช้เวลานานเกินไป" หลายครั้งผู้แข่งขันรายนั้นจะถูกตัดสิทธิ์
them
จะต้องกำหนดขึ้น / ตามกฎหรือไม่ ตัวอย่างเช่นfunction me(them){let log=0;them(x=>{++log;return 'C';})
return log == 0? 'D': 'C';}
StackOverflow
ข้อผิดพลาดและไม่วนซ้ำไม่สิ้นสุดที่ไม่เคยหยุด ถ้ามันอาจส่งผลใน a StackOverflow
ตรวจสอบให้แน่ใจว่าคุณเพิ่มคำสั่งลองจับ สำหรับตัวอย่างของการเรียกซ้ำที่ไม่ถึงข้อผิดพลาดของ stackoverflow ภายใน 1 วินาทีคุณต้องมีตัวอย่างที่ชัดเจนมากขึ้นเช่นstackoverflow.com/q/12438786/3371119
them(() => 'C')
จะไม่ส่งผลให้เกิดข้อผิดพลาดเพราะเมื่อฝ่ายตรงข้ามเรียกthem
มันจะเรียก() => 'C'
ฟังก์ชั่น สิ่งเดียวที่ต้องห่อในtry-catch
คือถ้าคุณโทรthem
ด้วยพารามิเตอร์ของฟังก์ชั่นบางอย่างที่โทรthem
ด้วยพารามิเตอร์ของฟังก์ชั่นบางอย่างที่โทรthem
ฯลฯ (ไม่สิ้นสุด) ยกตัวอย่างเช่นจะเล่นสิ่งที่ฝ่ายตรงข้ามจะเล่นถ้าฝ่ายตรงข้ามคิดว่าพวกเขากำลังเล่นthem(t => t(() => 'C'))
nice
ไม่มีstackoverflow
ข้อผิดพลาดเกิดขึ้นได้