一定の時計回りまたは反時計回りの方向に一貫した矢印(各輪郭には独自の方向があります)と正の数n
の矢印を持つ、閉じた重複しない2D輪郭(対角線上でも少なくとも1つのスペースで分離)のセットが与えられた場合、矢印を移動しますn
輪郭に沿ってそれぞれの方向にステップします。矢印は、> v < ^
それぞれ右、下、左、および上方向で表されます。他のキャラクターは、-
(水平)、|
(垂直)、+
(角)です。矢印が角にある場合、矢印は現在の方向を維持し、方向転換が行われた後にのみ変更します。
任意の2つの角の間には常に直線のセグメント(またはスペース)があります(+-+
水平の場合と垂直の場合と同様)-つまり、急U
カーブは禁止されています。コーナー間のセグメントは垂直または水平のいずれかであり、コーナーでの屈曲は常に90度です。
入力:
- 正の整数--
n
ステップ数 - 等高線のASCII表現-複数行の文字列、文字列のリスト、文字のリストなどです。
出力:
すべての矢印が同じ輪郭でn
、各輪郭の全体方向にステップがシフトしました。
テストケース:
1。
入力:
n
= 1
+----->->
| |
| v---+
| |
+---<-------+
出力:
+------>+
| v
| +>--+
| |
+--<--------+
2。
入力:
n
= 2
+-----+ +---+
| | | |
+-->--+ | v
| |
+--->---+ |
| |
+------<<---+
出力:
+-----+ +---+
| | | |
+---->+ | |
| |
+----->-+ v
| |
+----<<-----+
3。
入力:
n
= 3
+---+ +---+ +-------+
| | | v | |
^ | | | +-<-+ |
| | ^ | | v
| +---+ +-->----+ |
| |
| +-------+ +---+ |
| | | v | |
+---+ +---+ +---+
出力:
+>--+ ^---+ +-------+
| | | | ^ |
| | | | +---+ |
| | | | | |
| +---+ v----->-+ |
| |
| +-------+ +---+ v
| | | | | |
+---+ +-<-+ +---+
4。
入力:
n
= 1
+--+
| |
| +---+
| |
+----+ |
| |
+-+
出力:
+--+
| |
| +---+
| |
+----+ |
| |
+-+
5。
入力
n
= 4
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
出力:
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
6。
入力:
n
= 1
^->
^ v
<<v
出力:
^>+
^ v
<<v
上記のタスクを解決する関数またはプログラムを作成します。すべての言語のバイト単位の最短コードが勝ちです。ゴルフ言語に落胆しないでください。アルゴリズムとコードの説明は大歓迎です。
There will always be a straight segment (or a space) between any two corners (like +-+ for the horizontal and similar for the vertical) - in other words the sharp U turns are forbidden.