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
^<<<<<<<<
Antworten:
CJam,
626163 BytesProbieren Sie es online aus
Erweitert und kommentiert:
Meine Lösung arbeitet mit der Eingabe als flache Zeichenfolge, sodass nur ein Positionswert verfolgt werden muss und praktisch keine Vor- / Nachbearbeitung erfolgt. Es gibt nur 2 Bytes Vorverarbeitung, um am Anfang des Rasters eine neue Zeile hinzuzufügen, und 2 Bytes Nachverarbeitung, um sie aus der Ausgabe zu entfernen. Aber diese 4 Bytes sind die Kosten wert, da sie es mir ermöglichen, Zeilenumbrüche beizubehalten und sie wie Router "auszuführen", aber sie "drehen" sich in eine andere Zeilenumbruch und setzen die Position auf Null. Und die Hauptschleife endet, wenn die Position Null wird.
quelle
CJam,
9069 BytesRiesig für jetzt,kann noch viel reduziert werden.Probieren Sie es hier online aus
quelle
JavaScript (ES6) 121
120 127 129Eine benannte Funktion, die die Zeichenfolge als Eingabeparameter abruft und die Ausgabe zurückgibt.
Angenommen, die Eingabezeichenfolge wird mit einem Zeilenumbruch abgeschlossen.
Fehlerbehebung bearbeiten , .search () funktioniert nicht gut mit
undefined
Ungolfed und erklärt
Test In Firefox / Firebug - Konsole
Ausgabe
quelle