มีความท้าทายมากมายที่พูดว่า "ตีความ X" ซึ่ง X เป็นภาษาที่เรียบง่าย ในความคิดของฉันมันน่าเบื่อเกินไป เพื่อให้ทุกคนที่ผัดวันประกันพรุ่งในอินเทอร์เน็ตเป็นสิ่งที่น่าสนใจที่จะทำคุณสามารถลองทำสิ่งนี้:
ท้าทาย
$LANGเลือกภาษา $LANGสามารถเป็นภาษาการเขียนโปรแกรมที่สมบูรณ์ทัวริงหรือชุดย่อยที่สมบูรณ์ของภาษาการเขียนโปรแกรม ระวังหากคุณไม่ใช้คุณสมบัติของภาษาของคุณใน$LANGการตีความคุณจะต้องไม่ใช้มันสำหรับโปรแกรมของคุณเองเช่นกันเนื่องจากการส่งของคุณจะต้องเขียน$LANGด้วย
เขียนคอมไพเลอร์ / ล่ามเขียนใน$LANG $LANGคุณสามารถใช้สิ่งอำนวยความสะดวกทั้งหมด (รวมถึงevalและเพื่อน) ของภาษาของคุณที่มีอยู่เพื่อเขียนคอมไพเลอร์นี้ เพื่อให้งานมีความท้าทายมากขึ้นมีข้อ จำกัด เพียงข้อเดียว: โปรแกรมของคุณควรสามารถตีความ / คอมไพล์โปรแกรมที่ใช้ได้ทั้งหมด$LANGยกเว้นล่าม / คอมไพเลอร์ของคุณเอง หากเกิดขึ้นว่าโปรแกรมที่จะตีความ / รวบรวมเป็นล่ามหรือคอมไพเลอร์ของคุณเอง (โดยไม่คำนึงถึงชื่อไฟล์) โปรแกรมของคุณควรทำสิ่งที่ไม่เกี่ยวข้องอย่างสมบูรณ์กับการทำงานของล่ามหรือคอมไพเลอร์ (เช่น barfing หรือการพิมพ์Hello, world!)
เพื่อให้งานนี้ซับซ้อนยิ่งขึ้นโปรแกรมของคุณจะต้องไม่อ่านซอร์สของตัวเองเมื่อรวบรวมหรือตีความ
ข้อมูลจำเพาะ
- งานนี้เป็นรหัสกอล์ฟ การส่งที่มีอักขระน้อยที่สุดที่ชนะถูกต้อง ในกรณีที่เสมอกันการแก้ปัญหาที่ถูกส่งมาก่อนชนะ
- โปรแกรม / สคริปต์ของคุณควรอ่านโปรแกรมที่จะตีความจากไฟล์ คุณอาจ hardcode เส้นทางและชื่อของมัน เมื่อไฟล์ถูกอ่านคุณอาจรวบรวมไฟล์ไปยังไฟล์อื่น (ซึ่งจะต้องสามารถเรียกใช้งานได้ในระบบของคุณ) หรือเรียกใช้โดยตรง หากขาดความสามารถในการอ่านไฟล์ที่คุณสามารถเลือกวิธีการอ่านรหัสที่พอดีอีก
$LANG$LANGคุณไม่สามารถเลือก$LANGเป็นส่วนย่อยของภาษาอื่น แต่ได้ลบความสามารถในการอ่านไฟล์ - มีการใช้กฎของรหัสสนามกอล์ฟตามปกติ นั่นคือ: ภาษาสัตว์เลี้ยงส่วนบุคคลของคุณที่คุณสร้างขึ้นเพื่อแก้ปัญหานี้เป็นสิ่งต้องห้ามหากการแก้ปัญหากลายเป็นเรื่องง่ายที่จะใช้มัน (เช่นการกำหนดโปรแกรมแบบชาร์ลเดี่ยวที่ใช้วิธีแก้ปัญหา) สนับสนุนการละเมิดกฎ