(ความท้าทายนี้คล้ายกันมาก แต่ความท้าทายในปัจจุบันมีภาวะแทรกซ้อนเพิ่มเติม)
ลองนึกภาพห้อง 2 มิติที่ผนังถูกชุบด้วยกระจกแบน
ทันใดนั้นแสงไฟก็พุ่งเข้ามาในห้องซึ่งเป็นส่วนหนึ่งของกำแพงที่หายไป! แสงไฟเต้นรำไปรอบ ๆ ห้องรับแสงสะท้อนจากผนังกระจกและในที่สุดก็ออกจากห้องอีกครั้ง
ลอจิก
คุณจะได้รับ 5 ตัวแปร: W, H, X, YและZ
ตอนนี้พวกเขาหมายถึงอะไร
W, H คือขนาดของห้อง (รวมถึงกำแพง) โดย W คือความกว้างและ H เป็นความสูง
X, Y เป็นพิกัดที่กำแพงมีรูอยู่ คุณสามารถสันนิษฐานได้ว่าสิ่งนี้อยู่บนกระเบื้องผนังเสมอ พิกัดนั้นเป็นแบบ 0 โดยที่แกน X ชี้ไปทางขวาและแกน Y ชี้ลง
Z เป็นตัวเดียวที่เป็นตัวแทนของทิศทางที่แสงตกเข้ามาในห้องอย่างใดอย่างหนึ่งหรือ\
/
ห้องจะต้องสร้างขึ้นจากตัวละครต่อไปนี้:
|
สำหรับผนังแนวนอน-
สำหรับผนังแนวตั้ง+
สำหรับมุม
ตัวอย่าง: (W = 7, H = 4)
+-----+
| |
| |
+-----+
ตอนนี้เรามีห้องพักแล้วให้ทำลายหนึ่งในแผ่นผนังเพื่อให้ลำแสงตกลงไปในห้อง ลำแสงเป็นเส้นทแยงมุมแสดงโดย\
และ/
ตัวอักษร
ลองเปลี่ยนกระเบื้องผนังที่ X = 2, Y = 0 ด้วย\
ลำแสง
+-\---+
| |
| |
+-----+
แสงที่เข้ามาจะเดินทางในแนวทแยงมุมไปทั่วห้องจนกว่ามันจะชนกับผนังกระจก หากชนกำแพงทิศทางจะพลิกกลับตามแนวแกนของผนังและลำแสงเคลื่อนที่บน
+-\---+
|\ \/\|
| \/\/|
+-----+
ในตัวอย่างนี้ลำแสงจะไปถึงจุดที่มุมของกำแพงถูกชนซึ่งก่อให้เกิดลำแสงกลับด้านอย่างสมบูรณ์และเคลื่อนที่ไปตลอดทางจนในที่สุดออกจากห้อง
งานของคุณ
เขียนโปรแกรมที่พิมพ์ห้องและเส้นทางทั้งหมดของลำแสงจนกระทั่งมันออกจากห้องอีกครั้งหรือวนซ้ำไปเรื่อย ๆ
อินพุต
ป้อนข้อมูลอาจจะได้รับในรูปแบบที่เหมาะสมใด ๆ แต่ก็มีการรวม 4 จำนวนเต็ม W, H, X, Y และ Z [10, 8, 0, 3, \]
ตัวอักษรเช่น
คุณอาจคิดว่า:
- W, H> = 3
- X, Y มักจะอยู่ที่กำแพง
- Z จะสามารถที่จะมีค่าและ
\
/
เอาท์พุต
stdout
คุณสามารถตัดสินใจได้ว่าคุณกลับเป็นสตริงหรือส่งออกโดยตรงไปยัง
ต้องรวมผนังห้องและลำแสง (กำหนดโดยอักขระ ASCII ด้านบน)
กฎระเบียบ
- ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดเป็นไบต์ในภาษาใดก็ได้จะเป็นผู้ชนะ
- อนุญาตให้ใช้ภาษาการเข้ารหัสทุกภาษาที่สร้างขึ้นก่อนการประกาศความท้าทายนี้
ตัวอย่าง
การป้อนข้อมูล: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
การป้อนข้อมูล: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
อินพุต: [10, 8, 0, 3, \]
(ตัวอย่างของวงวนไม่สิ้นสุดที่จะไม่ออกจากห้องอีกครั้ง)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
โชคดี!