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