(ได้รับแรงบันดาลใจจากความคิดเห็นนี้กับคำถามเก่า ๆ )
พื้นหลัง
ควินข้อผิดพลาด (ยังเป็นที่รู้จักกันในชื่อ "Kimian ควิน") เป็นโปรแกรมซึ่งเมื่อรวบรวมหรือทำงานทำให้เกิดการคอมไพเลอร์ / ล่าม / รันไทม์พิมพ์ข้อผิดพลาดที่มีข้อความเหมือนกันกับโปรแกรมของตัวเองและไม่มีอะไรอื่น สำหรับวัตถุประสงค์ของการท้าทายนี้เรากำลังกำหนด "ข้อผิดพลาด" ในวงกว้างเพื่อรวมคำเตือนด้วย
งาน
ในความท้าทายนี้เรากำลังมองหา ควินซึ่งก็เป็นข้อผิดพลาด quine เมื่อดำเนินการโปรแกรมจะต้องพิมพ์ซอร์สโค้ดของตัวเองตามปกติ (เช่นไม่ใช่ข้อผิดพลาด / ข้อความเตือน); สิ่งนี้จะต้องเป็นควินที่เหมาะสม (เช่นบางส่วนของโปรแกรมจะต้องเข้ารหัสส่วนต่าง ๆ ของเอาท์พุท) นอกจากนี้การคอมไพล์และเรียกใช้งานโปรแกรมยังต้องทำให้ซอร์สโค้ดของโปรแกรม - และไม่มีอะไรอื่น - ที่จะพิมพ์เป็นข้อผิดพลาดหรือข้อความเตือนโดยการใช้งาน (โปรดทราบว่านี่หมายความว่าคุณจะไม่สามารถใช้ข้อผิดพลาดในการคอมไพล์ในภาษาที่ป้องกันโปรแกรมจากการดำเนินการตามปกติ) ดังนั้นกล่าวอีกนัยหนึ่งคือซอร์สโค้ดของโปรแกรมจะถูกพิมพ์สองครั้งเมื่อผ่านแต่ละวิธี
ชี้แจง
- ในกรณีส่วนใหญ่จะเห็นได้ชัดว่าอะไรคืออะไรและไม่ใช่ข้อความแสดงข้อผิดพลาด / คำเตือน เราไม่แยกความแตกต่างระหว่างสองอย่างนี้ ในกรณีที่คลุมเครือให้กำหนดข้อความแสดงข้อผิดพลาด / คำเตือนเป็นข้อความใด ๆ ที่ส่งออกโดยการนำไปปฏิบัติอย่างใดอย่างหนึ่ง: 1. เป็นผลมาจากสิ่งอื่นนอกเหนือจากการดำเนินการคำสั่ง หรือ 2. นั่นไม่ใช่ส่วนหนึ่งของอินพุตไปยังคำสั่งที่สร้างมันเป็นเอาต์พุต
- ส่วนข้อผิดพลาด / คำเตือนของควินินไม่จำเป็นต้องเป็นควินที่เหมาะสม (แม้ว่าโดยส่วนใหญ่แล้วจะเกิดขึ้นโดยบังเอิญเนื่องจากข้อผิดพลาดและข้อความเตือนส่วนใหญ่มีข้อความคงที่จำนวนมาก)
- เป็นที่ยอมรับได้สำหรับโปรแกรมที่จะส่งออกข้อผิดพลาด / คำเตือนหลายอย่างซึ่งเป็นแหล่งที่มาของโปรแกรมเมื่อต่อกันเข้าด้วยกัน ไม่สามารถยอมรับข้อผิดพลาด / คำเตือนเอาต์พุตที่ไม่ปรากฏในแหล่งที่มา
- ไม่เหมือนกับความท้าทายมากมายสวิตช์ที่มอบให้คอมไพเลอร์และชื่อไฟล์ของโปรแกรมนั้นมีความเกี่ยวข้องสูงในการท้าทายนี้ ระบุว่าความท้าทายอาจเป็นไปไม่ได้เป็นอย่างอื่นฉันยินดีที่จะมีความยืดหยุ่นที่นี่แม้ว่าคุณจะดำเนินการในลักษณะที่ผิดปกติโปรดจำไว้ว่ากฎ PPCG คิดค่าปรับแบบไบต์ต่อการทำเช่นนั้น (เท่ากับจำนวนอักขระเพิ่มเติมที่ คุณจะต้องเพิ่มบรรทัดคำสั่งในวิธี "ปกติ" ที่สั้นที่สุดเพื่อเรียกใช้โปรแกรม) ดังนั้นคุณจะต้องระบุขนาดของการลงโทษในโพสต์ของคุณ (ตัวอย่างเช่นหากล่ามที่คุณใช้อ่านโปรแกรมจากไฟล์และไม่มีข้อ จำกัด ในชื่อไฟล์วิธีที่สั้นที่สุดในการเรียกใช้โปรแกรมปกติจะมาจากไฟล์ที่มีชื่อไฟล์ 1 ตัวดังนั้น
- เวอร์ชันคอมไพเลอร์ / ล่ามที่คุณใช้อาจมีความเกี่ยวข้องดังนั้นในฐานะส่วนหนึ่งของการส่งของคุณโปรดระบุคอมไพเลอร์หรือล่ามเฉพาะที่โปรแกรมของคุณทำงานและเวอร์ชันที่จำเป็นต้องใช้ (ตัวอย่างเช่นการส่ง C อาจระบุ "C (gcc 6.2.0)" ในส่วนหัว)
- โปรดทราบว่างานนี้อาจไม่สามารถทำได้ในทุกภาษา ในภาษาที่มันเป็นวิธีที่ง่ายที่สุดน่าจะเป็นการหาข้อผิดพลาดหรือข้อความเตือนที่เป็นไปได้ในการปรับแต่งบางส่วนของข้อความ (ผ่านการเปลี่ยนชื่อของสิ่งที่ได้รับการยกมาในข้อความ; ที่นี่ แต่ไม่ใช่เพียงอันเดียว) ฉันจะต้องประทับใจโดยเฉพาะอย่างยิ่ง (และประหลาดใจ) ถ้ามีคนพบวิธีที่จะทำเช่นนี้โดยใช้เพียงความผิดพลาดและข้อความเตือนที่มีข้อความที่ได้รับการแก้ไข
เงื่อนไขชัยชนะ
มันคือ รหัสกอล์ฟความท้าทายดังนั้นรายการจะถือว่าดีกว่าหากมีจำนวนไบต์น้อยกว่า เช่นนี้เมื่อคุณทำให้โปรแกรมทำงานได้แล้วคุณต้องการเพิ่มประสิทธิภาพเพื่อลดจำนวนไบต์ให้มากที่สุด (อย่างไรก็ตามอย่าท้อแท้ถ้ามีรายการที่สั้นกว่าอยู่แล้วโดยเฉพาะอย่างยิ่งถ้าเป็นภาษาที่แตกต่างกันสิ่งที่เรากำลังมองหาที่นี่จริง ๆ คือการตัดอัลกอริทึมหรือความคิดบางอย่างที่อยู่เบื้องหลังโปรแกรมให้สั้นที่สุด การแก้ปัญหาในภาษาต่าง ๆ หรือที่ใช้หลักการต่าง ๆ นั้นคุ้มค่าเสมอ)