Eingang
Ihre Eingabe ist ein Einzelsaite, die durch Zeilenumbrüche in getrennte 2n+1
Leitungen mit einer Länge 2n+1
, für eine ganze Zahl n ≥ 0
. Die Ganzzahl n
ist nicht Teil der Eingabe. Sie müssen es aus der Zeichenfolge berechnen. Die Zeilen bestehen aus den "Richtungszeichen" >^<v
. Wenn Zeilenumbrüche ein Problem darstellen, können Sie sie durch vertikale Rohre ersetzen |
.
Die Eingabe bildet ein quadratisches Gitter mit einer Größe (2n+1)x(2n+1)
, und jede Zelle des Gitters wird als Rotorfräser interpretiert , der in eine der vier Hauptrichtungen zeigt. Wir legen ein Token auf dem Router in der Mitte des Rasters ab, und die Router verschieben es dann auf folgende Weise. Wenn der Token auf einem Router landet, dreht sich der Router um 90 Grad gegen den Uhrzeigersinn und bewegt den Token einen Schritt in die neue Richtung, in die er zeigt. Wenn es auf einem anderen Router landet, wird der Vorgang wiederholt, aber schließlich fällt das Token vom Netz.
Ausgabe
Ihre Ausgabe ist die endgültige Konfiguration der Router im gleichen Format wie die Eingabe.
Beispiel
Betrachten Sie als Beispieleingabe das 3x3
Raster
<^<
^><
>^v
wo der zentrale Router markiert wurde, um das Token anzuzeigen (es ist ein bisschen schwer zu sehen). Der zentrale Router dreht sich nach Norden und verschiebt den Token in die zentrale Zelle der oberen Reihe:
<^<
^^<
>^v
Dieser Router dreht sich nach Westen und sendet den Token an die obere linke Ecke:
<<<
^^<
>^v
Der Router in der Ecke sendet den Token nach Süden, sodass er sich jetzt ganz links in der mittleren Reihe befindet:
v<<
^^<
>^v
Dieser Router dreht sich nach Westen und sendet den Token vom Netz.
v<<
<^<
>^v
Dies ist die endgültige Grid-Konfiguration, daher sollte Ihr Programm sie ausgeben. Beachten Sie, dass in komplexeren Beispielen das Token denselben Router mehrmals passieren kann, bevor es vom Netz fällt.
Regeln
Sie können entweder eine Funktion oder ein vollständiges Programm schreiben. Dies ist Code-Golf, also gewinnt die niedrigste Byteanzahl. Standardlücken sind nicht zulässig. Sie können entscheiden, ob die Eingabe und / oder die Ausgabe einen nachgestellten Zeilenumbruch enthält.
Testfälle
Input:
v
Output:
>
Input:
<^<
^><
>^v
Output:
v<<
<^<
>^v
Input:
>>^>>
v<vv<
>^>^<
^<>>^
vvv>>
Output:
>>^>>
>v>>v
^>>vv
^^>>>
v^<<^
Input:
<^^^^^^^^
<<^^^^^^>
<<<^^^^>>
<<<<^^>>>
<<<<^>>>>
<<<vv>>>>
<<vvvv>>>
<vvvvvv>>
vvvvvvvv>
Output:
>>>>>>>>v
^>>>>>>vv
^^>>>>vvv
^^^>>vvvv
<<<<<vvvv
^^^^<<vvv
^^^<<<<vv
^^<<<<<<v
^<<<<<<<<