> <>(難解なプログラミング言語)のコードを泳ぐ愛する魚は、その自然環境から取り出されました。この変更により、従来の方法で動き回ることができなくなりました。トロイダル運動であったものは、単純な左から右への動きに制限されていました。しかし、> <>プログラムは、魚がそれらの中を移動できるように書かれています。親愛なるプログラマーの仕事は、プログラムを書いて> <>プログラムを線形化することです。そして、できるだけ少ないバイトでそれを行います。魚にはあまり大きな記憶がありません。
> <>での移動
> <>では、動きはトロイダルで、一度に1つのキャラクターになります。これは、魚(ポインター)が行の終わりから先頭まで「ラップ」できることを意味します。> <>では、ほとんどのポインターの動きとは対照的に、魚は上から下、下から上、および右から左に移動することもできます。したがって、この移動パターンは有効です。
>>>^ >>>v
>>>^ v
そして、それは無限ループで終了します(底部を無限に通過すると、最上部のラインに戻ります)。
魚は、max(row length)に等しい長さと、行の数に等しい高さのグリッドで移動します。
魚がどのように動くかをどのように把握しますか?これらのコマンドは、移動の方向ベクトルを変更します(たとえば(-1,0)
、右から左を意味します)。
Command | Direction Change
---------------------------
> | (1,0) (default)
< | (-1,0)
^ | (0,1)
v | (0,-1)
/ | (x,y) -> (y,x)
\ | (x,y) -> (-y,-x)
| | (x,y) -> (-x,y)
_ | (x,y) -> (x,-y)
# | (x,y) -> (-x,-y)
; | (0,0)
前述のように、魚は左から右へ、つまり方向ベクトルで動き始め(1,0)
ます。魚は、コマンドが最初のコマンドから解析を開始し、コマンドが前述の方向変換器のいずれかに一致した場合、その方向を変更します。
それを見る;
と魚は動きを止め、プログラムを終了します。
入力
入力は、STDINで指定された有効な(無限ループではない)プログラムになります。必要に応じてファイルを読み取ることもできます。各プログラムの行は、必ずしも同じ長さではありません。
入力は文字列として与えられ、プログラム内の各行は改行で区切られます。
プログラムはループしません;
。つまり、プログラムは常にで終了します。
出力
出力は線形化されたプログラムになります。つまり、プログラムが「正常に」実行された場合に魚が見るすべてのキャラクター(方向転換器を含む)を返す必要があります。これは、へのパス内のすべての文字;
です。
入力に不等長のラインがあり、魚が最長ラインの長さよりも短いラインに沿って移動する場合、魚がスペース上を移動しているかのように扱う必要があります(テストケースを参照)。
> <>に精通している人は、方向変更器がその中で移動を行う唯一の方法ではないことを知っていますが、簡単にするために、入力を移動に影響する唯一の方法として扱います。
ルール
- 標準的な抜け穴が適用されます
- 完全なプログラムまたは機能を書くことができます
- 入力は、STDINまたはファイルを介して、改行(
\n
)で 区切られたプログラム行を含む文字列として提供されます - 出力は、STDOUTを介した単一の文字列であるか、関数によって返されます(選択内容に応じて、ルール2を参照)
テストケース
v >v
>abcv//;
gfed<^ih
v>abcv<defghi^//>v;
v >v
>abcv//;
gfed<^
v>abcv<defg ^//>v;
abcdef;
abcdef;
abcd|;
abcd|dcba;
abcd#;
abcd#dcba;
abcd\;
_
abcd\_\dcba;
^;
>abcde/
^jihg<
^ >abcde/ <ghij^a;
;
;