Ich dachte, das wäre eine gute Herausforderung: http://adventofcode.com/2016/day/1
Aufgabenbeschreibung
Geben Sie bei einer Folge von Rotationen und Abständen nach dem Muster (L | R) [1-9] [0-9] * den Manhattan-Abstand zwischen Start- und Endpunkt an, dh die minimale Anzahl vertikaler und horizontaler Bewegungen ein Gitter.
Beispiele
Wenn wir beispielsweise annehmen, dass Sie nach Norden ausgerichtet sind:
Nach R2 verlässt Sie L3 2 Blocks östlich und 3 Blocks nördlich oder 5 Blocks entfernt. R2, R2, R2 lässt Sie 2 Blocks südlich Ihrer Startposition, die 2 Blocks entfernt ist. R5, L5, R5, R3 lassen Sie 12 Blocks entfernt.
Technische Details
Sie können das Trennzeichen zwischen den Zügen auswählen (z. B. "\ n", "," oder ","). Sie müssen die Antwort als Ganzzahl in Basis 10 angeben.
Kein Duplikat!
Es ist aus mehreren Gründen kein Duplikat:
- Die Bewegungen sind nicht gleich. Hier sind es Rotationen , keine Richtungen.
- Ich möchte die Manhattan-Distanz, nicht den Euklidian.
Antworten:
Python 3,
10999104101 BytesDies ist eine einfache Antwort, die komplexe Zahlen verwendet, wobei die Eingabe als durch Leerzeichen getrennte Zeichenfolge oder als durch Zeilenumbrüche getrennte Zeichenfolge erfolgt. Golfvorschläge willkommen!
Bearbeiten: -13 Bytes dank Labo. +5 Bytes für die Konvertierung in ein int.
Ungolfing
quelle
PHP, 93 Bytes
Nervenzusammenbruch
quelle
Python 2, 86 Bytes
Verfolgt den Strom
x
und diey
Koordinaten. Drehen Sie beim Drehen den aktuellen Wert, anstatt die Richtung zu aktualisieren, sodass die Bewegung immer in x-positiver Richtung erfolgt. Komplexe Zahlen waren zu kostspielig, um die Koordinaten daraus zu extrahieren.quelle
Python 2,
103102 Bytesrepl.it
Die Eingabe ist eine Folge von durch Leerzeichen getrennten Richtungen, z
"R5 L5 R5 R3"
.Druckt die Manhattan-Entfernung zwischen dem Startort und dem Ziel aus.
Wie?
Beginnt am Ursprung der komplexen Ebene
l=0
;Mit einem kumulierten Viertel-Rechts-Abbiegezähler
c=0
;Für jeden Befehl wird
i
die Drehung durch Vergleichen des ersten Zeichens der Richtung mit dem Zeichen analysiert'N'
undc
entsprechend angepasst.Die Entfernung zum Reisen wird analysiert
int(i[1:])
und die Anweisung wird ausgeführt, indem so viele blockgroße Schritte in die Richtung ausgeführt werden, die durch diec
Potenz von0+1j
mit gegeben ist1j**c
.Die endgültige Entfernung nach Manhattan ist die Summe der absoluten Entfernungen vom Ursprung in zwei Richtungen - imaginär und real; erreicht mit
abs(l.imag)+abs(l.real)
quelle
cmp
wie meine Antwort verwenden. Lassen Sie es mich wissen und ich werde löschen.JavaScript (ES2016), 98
1002 Bytes gespeichert thx @Neil
100 Bytes für ES6
Weniger Golf gespielt
Test (ES6)
quelle
s=>s.replace(/.(\d+)/g,(c,n)=>(d+=c<'R'||3,n*=~-(d&2),d&1?x+=n:y+=n),x=y=d=0)&&(x<0?-x:x)+(y<0?-y:y)
, dass es dank derc<'R'||3
undn*=~-(d&2)
Tricks jetzt zwei Bytes kürzer ist als Ihre ES6-Antwort .