ความท้าทายนี้ถ้าคุณยอมรับมันคือการเขียนสามฟังก์ชันหรือโปรแกรม A, B และ C:
- A คือ quine ที่ส่งออกทั้งหมด A, B และ C (ซึ่งเป็นเนื้อหาทั้งหมดของรหัสในการส่งของคุณ)
- B รับพารามิเตอร์ F และตรวจสอบว่ามันเป็นควินดัง (เอาท์พุท FBC) หรือทำสิ่งที่แตกต่าง
- C รับพารามิเตอร์ G และตรวจสอบว่า G อาจทำงานเช่น B หรือไม่ (ตรวจสอบว่า F เอาต์พุต FGC) เป็นไปไม่ได้ที่จะตัดสินใจว่าฟังก์ชั่นเป็นตัวตรวจสอบ quine หรือไม่ดังนั้นเราจะทำสิ่งที่ง่ายกว่า:
- มันจะต้องกลับมาจริงถ้า G ใช้ได้สำหรับ B
- มันจะต้องคืนค่าเท็จถ้า G คืนค่าเท็จให้กับผลการทดสอบที่ถูกต้องทั้งหมดหรือ G จะคืนค่าความจริงสำหรับการทดสอบที่ไม่ถูกต้องทั้งหมด
- มันสามารถคืนสิ่งใด ๆ ผิดพลาดหรือไม่ยุติ ฯลฯ หากเป็นกรณีอื่น
โปรดทราบว่า B เป็นไปได้ A และ F ไม่มีอินพุตใด ๆ ดังนั้นคุณสามารถเรียกใช้และตรวจสอบผลลัพธ์ได้
กฎระเบียบ
- ควรมีวิธีที่จะบอกได้ว่าส่วนใดเป็น A, B และ C จากเอาต์พุตของ A ตัวอย่างเช่น: แต่ละอันมีหนึ่งบรรทัดหรือพวกเขาได้รับการยอมรับว่าเป็นสามหน้าที่ในล่าม
- แต่ละฟังก์ชั่นควรทำงานด้วยคำจำกัดความของตัวเองเท่านั้นไม่ใช่รหัสที่สมบูรณ์ของคุณ
- คุณสามารถใช้ฟังก์ชัน / โปรแกรมหรือซอร์สโค้ดหรือทั้งคู่เป็นอินพุตของ B (หรือ G) และ C
- คุณสามารถกำหนดความจริง / เท็จเป็นชุดย่อยของค่าเหล่านั้น คุณสามารถกำหนดให้ F ส่งคืนชนิดที่คุณเลือกได้เช่นสตริงเดียว
- คุณสามารถต้องการ A, B, F และ G หากถูกเรียกด้วยพารามิเตอร์ที่ถูกต้องอย่างต่อเนื่องไม่มีอินพุตหรือผลข้างเคียงอื่น ๆ บางประเภทที่คุณเลือกเช่นการเข้าถึงตัวแปรทั่วโลกหรือการอ่าน stdin เป็นต้น
- นอกจากนี้คุณยังสามารถสมมติว่า F และ G หากพวกเขาถูกเรียกด้วยพารามิเตอร์ที่ถูกต้องยุติลงเสมอ
- F ควรทำงานในสภาพเดียวกับ A. ดังนั้นจึงไม่สามารถขึ้นอยู่กับ B หรือ C หรือการดำรงอยู่ของตัวแปรอื่นยกเว้นตัวแปรนั้นจะถูกกำหนดในส่วนของตัวเองในเอาท์พุท
- ไม่มีฟังก์ชั่นหรือโปรแกรมใด ๆ ที่สามารถอ่านซอร์สโค้ดของมันได้
- นี่คือ code-golf รหัสที่สั้นที่สุด (ซึ่งเป็นผลลัพธ์ของ A) ในหน่วยไบต์
B ยังคงเป็นไปไม่ได้โดยทั่วไปเพราะ F อาจไม่ยุติเช่นเดียวกับในทางปฏิบัติในหลายภาษาเพราะมันต้องใช้ความสามารถหลายอย่างเช่นการเปลี่ยนเส้นทางชั่วคราวของ stdout และฟังก์ชั่นกับสตริงหรือ exec สิ่งที่ดีที่สุดที่คุณสามารถคาดหวังได้ก็น่าจะเป็นทางออกครึ่งทางใน LISP
—
Peter Taylor
คุณจะตรวจสอบ G กับทุกคำสั่งและไม่ใช่แบบทดสอบได้อย่างไร ฉันกำลังทำงานเกี่ยวกับวิธีการแก้ปัญหาทางคณิตศาสตร์
—
LegionMammal978
@PeterTaylor "นอกจากนี้คุณยังสามารถสมมติว่า F และ G หากพวกเขาถูกเรียกด้วยพารามิเตอร์ที่ถูกต้องให้ยุติเสมอ" และ "เอาท์พุท" อาจหมายถึงการส่งคืนไม่จำเป็นต้องพิมพ์ไปยัง stdout
—
jimmy23013
@ LegionMammal978 เป็นไปไม่ได้ที่จะตรวจสอบทุกข้อและทุกข้อ แต่งานของ C นั้นเป็นสิ่งที่ง่ายกว่าที่คุณจะต้องตรวจสอบควินินหนึ่งอันและที่ไม่ใช่ควินิน
—
jimmy23013
@PyRulez ฉันคิดว่านี่เป็นจิตวิญญาณของความท้าทายนี้ดังนั้นฉันจะอนุญาต แต่ฟังก์ชั่นไม่สามารถเข้าถึงซอร์สโค้ดของตัวเอง
—
jimmy23013