(이 과제는 매우 유사하지만이 현재 과제에는 추가적인 문제가 있습니다.)
벽이 평평한 거울로 도금 된 2 차원 방을 상상해보십시오.
갑자기 벽이없는 방에 빛의 광선이 닿습니다! 광선이 방 주위에서 춤을 추고 벽 거울에 반사되어 결국 방을 떠납니다.
논리
W, H, X, Y 및 Z의 5 가지 변수가 제공 됩니다.
이제 그들은 무엇을 의미합니까?
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 문자로 정의).
규칙
- 표준 허점 은 금지되어 있습니다.
- 이것은 code-golf 이므로 모든 언어에서 바이트 단위의 가장 짧은 코드가 승리합니다.
- 이 과제를 게시하기 전에 만들어진 모든 코딩 언어가 허용됩니다.
예
입력: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
입력: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
입력 : [10, 8, 0, 3, \]
(방을 다시 떠나지 않는 무한 루프의 예)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
행운을 빕니다!