Wenn jemand, der an Punkt A in diesem Raster nach Norden zeigt, dem grünen Pfad folgen möchte (da er nur den Rasterlinien folgen kann), können Sie ihm Folgendes mitteilen:
Geh North, North, West, East, East, South, East, East
.
oder äquivalent
Geh Forward, Forward, Left, Back, Forward, Right, Left, Forward
.
(Wenn ein Rechts- , Links- oder Rückwärtsbefehl implizit bedeutet, dass Sie sich in diese Richtung drehen, gehen Sie vorwärts.)
Schreiben Sie eine Funktion mit einem Argument, das zwischen diesen absoluten und relativen Richtungen auf demselben Pfad und nicht nur zum selben Punkt übersetzt. Angenommen, die gerichtete Person fängt immer an, nach Norden zu blicken.
Wenn das Argument eine Zeichenfolge aus Buchstaben ist NSEW
, geben Sie die entsprechenden relativen Richtungen zurück.
zB f("NNWEESEE")
gibt den String zurück FFLBFRLF
.
Wenn das Argument eine Zeichenfolge aus Buchstaben ist FBLR
, geben Sie die entsprechenden absoluten Richtungen zurück.
zB f("FFLBFRLF")
gibt den String zurück NNWEESEE
.
Der leere String ergibt sich von selbst. Angenommen, keine anderen Eingabefälle.
Wenn Ihre Sprache keine Funktionen oder Zeichenfolgen enthält, verwenden Sie die am besten geeignete Option.
Der kürzeste Code in Bytes gewinnt.
R
gleichE
zu Beginn.Antworten:
CJam,
575349Vorherige Version
Beispiel:
Ausgabe:
Wie es funktioniert
quelle
C ++,
9997Das Folgende ist als Lambda-Ausdruck formatiert. Es braucht ein
char*
Argument und überschreibt es.Für diejenigen, die mit dieser Funktion nicht vertraut sind (wie ich vor 1 Stunde), verwenden Sie sie wie folgt:
Einige Erklärungen:
flag ? (x = y) : (x += z)
, ist das zweite Klammerpaar in C erforderlich. Also habe ich stattdessen C ++ verwendet!*s*9%37&4
testet das erste Byte. das Ergebnis ist 4, wenn es eines von istNESW
; 0 sonst*s%11/3
konvertiert die BytesNESW
in 0, 1, 2, 3*s%73%10
konvertiert die BytesFRBL
in 0, 9, 6, 3 (was 0, 1, 2, 3 Modulo 4 ist)d
Variable nicht. Ich habe versucht, den Code neu anzuordnen, um ihn vollständig zu entfernen, aber es scheint unmöglich ...quelle
JavaScript (E6) 84
86 88 92 104Bearbeiten: Verwenden von & anstelle von%, andere Operatorpriorität (weniger Klammern) und besseres Arbeiten mit negativen Zahlen
Bearbeiten2: | statt + wieder op Priorität -2. Dank DocMax
Edit3: Das Array-Verständnis ist für Zeichenfolgen 2 Zeichen kürzer als für map ()
Test In FireFox / Firebug - Konsole
Ausgabe
quelle
&& o
am Ende?array && value
Wievalue
jedes Array auswertentruthy
4+(n-d&3)
mit4|n-d&3
und speichern 2 Zeichen.APL, 72
Wenn die Interpreter-Konfigurationen ohne Abzug geändert werden können, beträgt die Punktzahl 66 , indem geändert wird
⎕IO
zu0
:quelle
Python,
171139Nicht annähernd so kurz wie die anderen Lösungen, aber ich denke, es sollte relativ gut für das sein, was mit Python gemacht werden kann:
Erweiterte Version für etwas bessere Lesbarkeit:
quelle
Los, 201
Lesbare Version:
quelle
GNU sed, 356 Bytes
Die Herausforderung erfordert eine einfache Transformation eines Zeichenstroms.
sed
der stream editor ist die naheliegende sprachenwahl ;-)(Kommentare und Leerzeichen, die für die Berechnung des Golfscores entfernt wurden)
Ausgabe:
Erläuterung:
Die Idee dabei ist, dass es beim Ändern des Referenzrahmens immer eine direkte Zuordnung zwischen
{N, E, S, W}
und gibt{F, R, B, L}
.Im Fall von absolut zu relativ arbeiten wir uns vorwärts durch die Zeichenkette. Für jedes Zeichen bilden wir
{N, E, S, W}
an{F, R, B, L}
, und drehen Sie dann die restlichen[NESW]
Zeichen nach dem Charakter , den wir gerade abgebildet wird , dann auf das nächste Zeichen bewegen.Für den Fall von relativ zu absolut machen wir das Gegenteil. Wir arbeiten die Zeichenfolge rückwärts durch und drehen alle folgenden
[NESW]
Zeichen entsprechend dem Zeichen unmittelbar davor. Dann ordnen wir dieses Zeichen{N, E, S, W}
zu{F, R, B, L}
, bis wir am Anfang der Zeichenkette angelangt sind.quelle
Haskell, 224
Dies ordnet den relativen Richtungen Rotationsnummern und den absoluten Richtungen Orientierungsnummern zu und findet dann entweder die Rotationen zwischen aufeinanderfolgenden Orientierungen oder die Orientierungen nach aufeinanderfolgenden Rotationen. Die
i
Funktion findet den Index innerhalb der beiden Legenden.quelle