ท้าทาย:
สร้างโปรแกรมหรือฟังก์ชั่นที่รับอินพุตจำนวนเต็มซึ่งส่งออกโปรแกรม / ฟังก์ชั่นใหม่ตามที่ระบุด้านล่าง
การป้อนข้อมูล:
จำนวนเต็มn
: เวลาเป็นวินาทีก่อนที่ Time Bomb จะระเบิด
เอาท์พุท:
โปรแกรมต้นฉบับที่มีเวลาn
เป็นวินาทีในการป้อนข้อมูลจะส่งออกโปรแกรม / ฟังก์ชั่นใหม่ที่ทำสิ่งต่อไปนี้:
- ได้
n
ไม่กี่วินาทีที่ผ่านมาตั้งแต่โครงการก่อนหน้านี้ได้รับการทำงาน? พิมพ์BOOM!
- อื่น: พิมพ์โปรแกรม / ฟังก์ชั่นซึ่งเมื่อเรียกใช้ตัวเองจะรีเซ็ตตัวจับเวลากลับเป็น
n
วินาที (และทำหน้าที่เหมือนกับโปรแกรม / ฟังก์ชั่นเอาท์พุทแรก)
หมายเหตุ: มันไม่เหมือนกับโปรแกรม / ฟังก์ชั่นเอาท์พุทแรก (ในภาษาส่วนใหญ่อย่างน้อย) เนื่องจากเวลาเริ่มต้นมีการเปลี่ยนแปลง (ดูตัวอย่างคำอธิบายด้านล่าง)
ตัวอย่างรหัสเทียม:
สมมติว่าโปรแกรมต้นฉบับคือABC
และอินพุตเป็น60
วินาที:
ABC
และเอาท์พุท60
DEF(60)
- หาก
DEF(60)
ทำงานภายใน 60 วินาทีมันจะแสดงผลDEF_G(60)
ซึ่งจะทำหน้าที่เหมือนกับDEF(60)
แต่ด้วยเวลาเริ่มต้นใหม่ - หาก
DEF(60)
ทำงานหลังจาก 60 วินาทีมันจะออกBOOM!
มา
ตัวอย่างการชี้แจงสิ่งที่ฉันหมายถึงด้วย 'เวลาเริ่มต้น':
- โปรแกรมฐานด้วยการป้อนข้อมูลวินาทีจะดำเนินการที่
60
มันออกโปรแกรมการส่งออกเป็นครั้งแรกที่มีเวลาเริ่มต้นของ12:00:00
12:00:00
- โปรแกรมนี้เอาท์พุทเป็นครั้งแรกกับการเริ่มต้นช่วงเวลาของการจะดำเนินการที่
12:00:00
มันออกโปรแกรมเอาท์พุทที่สองด้วยเวลาเริ่มต้นของ12:00:45
12:00:45
- โปรแกรมนี้เอาท์พุทที่สามกับเวลาเริ่มต้นของการเรียกใช้ที่
12:00:45
มันออกโปรแกรมการส่งออกที่สี่ที่มีเวลาเริ่มต้นของ12:01:25
12:01:25
- โปรแกรมนี้เอาท์พุทที่สี่ที่มีเวลาเริ่มต้นของการเรียกใช้ที่
12:01:25
มันจะออก12:05:00
BOOM!
หมายเหตุวิธีการส่งออกก่อนจะพิมพ์BOOM!
หลัง12:01:00
แต่โปรแกรมการส่งออกมีความก้าวหน้าดังนั้นแม้ว่าจะเป็น12:01:25
ในขั้นตอนที่ 3 ก็จะยังคงส่งออกโปรแกรมต่อไปแทนBOOM!
(เพราะโปรแกรมเอาท์พุทของการส่งออกได้เริ่มต้นครั้งเกินโปรแกรมผลลัพธ์ที่แรก) .
กฏท้าทาย:
- ใช้กฎ quine เริ่มต้น
- อย่างน้อย
n
วินาทีควรผ่าน ดังนั้นถ้าใส่เป็น60
และเริ่มต้นเวลา12:00:00
ที่12:01:00
มันจะยังคงส่งออกโปรแกรม v2 แต่ที่มันจะออก12:01:01
BOOM!
- โปรแกรมเอาต์พุตจะไม่รับอินพุตใด ๆ ( ยกเว้นพารามิเตอร์ว่างที่ไม่ได้ใช้หากมีขนาดสั้นกว่า ) ควรกำหนดเวลาเริ่มต้นให้กับโปรแกรมถัดไปเป็นค่า 'ฮาร์ดโค้ด' (ซึ่งเป็นสาเหตุที่เอาต์พุตของโปรแกรมเอาต์พุตไม่เหมือนกันกับโปรแกรมก่อนหน้า (ในภาษาส่วนใหญ่)
- เฉพาะขนาดของโปรแกรม / ฟังก์ชั่นหลักของคุณเท่านั้นที่ถูกนับเป็นไบต์
- คุณสามารถส่งออกโปรแกรม / ฟังก์ชั่นไม่ว่าจะเป็นสตริง (หรือรูปแบบที่เหมาะสมเทียบเท่าเช่นไบต์ / อักขระอาร์เรย์ / รายการ) เป็นฟังก์ชั่นหากภาษาของคุณรองรับสิ่งนี้หรือรูปแบบอื่น ๆ ที่สมเหตุสมผล (โปรดถามว่าคุณไม่แน่ใจ)
กฎทั่วไป:
- นี่คือ รหัสกอล์ฟดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์จะเป็นผู้ชนะ
อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
- นอกจากนี้โปรดเพิ่มคำอธิบายหากจำเป็น