ในการท้าทายนี้คุณจะเขียนบอทที่เล่นเป็นภาวะที่กลืนไม่เข้าคายไม่ออกของนักโทษ นี่คือสิ่งที่คุณจะไม่สามารถเข้าถึงประวัติของเกมก่อนหน้านี้ แต่คุณจะสามารถเข้าถึงคู่ต่อสู้ได้ ในเวอร์ชั่นนี้ผู้เล่นทั้งสองจะได้รับ +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หรือตัวแปรอื่น ๆ ที่เกิดขึ้นจะอยู่ในขอบเขตเมื่อถูกเรียกยกเว้นฟังก์ชั่นevalwrapฟังก์ชั่นนี้ช่วยให้คุณสามารถเรียกฝ่ายตรงข้ามในลักษณะที่แยกไม่ออกจากวิธีที่ตัวควบคุมเรียกฟังก์ชั่น คุณอาจจะไม่ได้เขียนถึง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ข้อผิดพลาดเกิดขึ้นได้