(この課題は非常に似ていますが、この現在の課題には追加の複雑さがあります。)
壁が平面鏡でメッキされている2次元の部屋を想像してください。
突然、一片の壁が欠けている部屋に光線が当たります!光ビームは部屋の周りを踊り、壁の鏡に反射され、最終的に再び部屋を出ます。
ロジック
W、H、X、Y、Zの 5つの変数が与えられます。
さて、彼らはどういう意味ですか?
W、Hは部屋のサイズ(壁を含む)で、Wは幅、Hは高さです。
X、Yは、壁に穴がある座標です。これは常に壁タイルに配置されていると想定できます。座標は0から始まり、X軸は右を指し、Y軸は下を指します。
Zは、光が部屋に入ること方向を表す単一文字である、のいずれか\
、または /
。
部屋は、次のキャラクターで構成する必要があります。
|
水平壁用-
垂直壁用+
コーナー用
例:(W = 7、H = 4)
+-----+
| |
| |
+-----+
これで部屋ができたので、壁のタイルの1つを破壊して、光のビームが部屋に落ちるようにします。光のビームは斜めの線で、\
と/
文字で表されます。
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, \]
再び部屋を出ない無限ループの例)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
幸運を!