Oh nein, ich bin auf dem Weg zu den großen Schätzen von Marakov verloren! Und alles, was ich habe, sind diese nutzlosen Anweisungen, die aussehen S10R10D30
... Ich habe keine Ahnung, was sie bedeuten! Können Sie mir helfen?
Herausforderung
Geben Sie bei gegebenen Anweisungen an N E S W U D L R 1 2 3 4 5 6 7 8 9 0
, wie weit ich von meinem Ausgangspunkt entfernt sein werde, wenn ich diesen Anweisungen folge (dh euklidische Entfernung).
N E S W
beziehe mich auf Nord, Ost, Süd und West;
U D L R
beziehen sich auf mich drehe oben, unten, links und rechts (So NR
ist das gleiche wie E
, und so ist SL
, SLL
ist das gleiche wie N
). Up bedeutet weiterzumachen; Runter heißt umdrehen.
Nach jedem Buchstaben wird eine Zahl stehen, wie weit ich in diese Richtung gehen werde. N10E20
bedeutet 10 Einheiten nach Norden, dann nach Osten und 20 Einheiten nach Osten.
Eingabedetails
- Die Eingabe beginnt immer mit einem von
NESW
(daher müssen leere Eingaben nicht berücksichtigt werden). - Anweisungen mit zwei Buchstaben hintereinander sind zulässig.
NE
sollte interpretiert werden: "Biegen Sie nach Norden ab, dann sofort nach Osten". Es ist das gleiche wie geradeE
.SLL
ist "Biegen Sie nach Süden ab und dann sofort zweimal links ab". Es ist das gleiche wieN
. - Alle Zahlen sind ganze Zahlen (beachten Sie, dass dies
.
nicht im Zeichensatz enthalten ist). - Eingang wird nur aus
NESWUDLR1234567890
(Wenn es braucht etwas anderes, wie ‚\ 0‘ in C, oder wenn Sie die Sprache des Eingabefunktion hat ein Newline, oder etwas, das ist in Ordnung.)
Ausgabe
- Die Norm.
- Wenn Sie eine Funktion verwenden, sollten Sie einen numerischen Datentyp oder eine Zeichenfolge ausgeben.
- Muss auf 3 Dezimalstellen genau sein.
Testfälle
N10
::10
N10E10
::14.1421
N10S10
::0
NSEWUDLR10
::10
N100RR20E300D40L12
::268.7452
ERR10LL20UN30D100
::70.71067
Das einfallslose Python-Programm, mit dem ich diese erstellt habe.
Gewinnen
Dies ist Codegolf, also gewinnen die niedrigsten Bytes nach einer Woche!
NESWUDLR1234567890
?Antworten:
(Los) Ruby , 111 Bytes
Probieren Sie es online aus!
Nimmt Eingaben auf STDIN vor und gibt sie auf STDOUT aus.
Grundsätzlich werden bei diesem Ansatz komplexe Zahlen zum Speichern der aktuellen Position sowie ein Stack (
c
) verwendet, der Offsets für jede Richtung enthält. Wenn eine Richtung in istURDL
, wird der Stapel um den Index der Richtung in dieser Zeichenfolge gedreht. Wenn die Richtung in istNESW
, wird sie um den Index der Richtung in dieser Zeichenfolge plus den Index von1
im Stapel gedreht. Dies wandelt eine Drehung relativ zur aktuellen Position in eine Drehung relativ zur Position 1 um. In jedem Fall wird die Oberseite des Stapels mit der Anzahl der Schritte in der Richtung multipliziert und zur aktuellen Position addiert.quelle
Python 3 , 137 Bytes
Probieren Sie es online aus!
-9 Bytes dank Jonathan Allan
quelle
else:v+=d*n;n=0;h='NUERSDW'.find(i);d=d**(h%2)*1j**(~-h/2)
- Beachten Sie, dassL
hier das Ende der Suchzeichenfolge entfernt werden kann, da-1%2
equals7%2
and1j**(-1)
equals1j**3
.for i in input()+'U':x="NUERSDW0123456789".find(i);c=x<7;v+=d*n*c;n=[n*10+x-7,0][c];d=[d,d**(x%2)*1j**(~-x/2)][c]
JavaScript (ES6),
148142140138137134 BytesCode-Snippet anzeigen
-2 Bytes: Verwenden Sie
.search()
anstelle von.indexOf()
( @Shaggy )-1 Byte: Programm neu anordnen , um umschließende Klammern zu entfernen ( @Shaggy )
-3 Bytes: Verwenden Sie
.replace()
anstelle von.match().map()
( @ThePirateBay )quelle
search
anstatt speichernindexOf
?a
in demmap
, ersetzt die,
zuvorMath
mit&&
und Entfernen der umschließenden Klammern.Perl 5 , 149 + 1 (-p) = 150 Bytes
Probieren Sie es online aus!
Erklärt:
quelle