Die unnötige und verworrene Geschichte
Ich gehe Block für Block durch Manhattan und meine Füße sind müde geworden und wollen nach Hause zurück.
Der Verkehr ist ziemlich schlecht, aber zum Glück bin ich sehr reich und ich habe einen Hubschrauber im Hotel in Bereitschaft. Aber sie müssen wissen, wie viel Treibstoff sie für den Flug einpacken müssen, und dafür müssen sie meine direkte Entfernung zum Hotel kennen. Ich habe mich daran erinnert, welche Blöcke ich gegangen bin und kann ihnen sagen, welchen Weg ich genommen habe. Dieser Abstand muss jedoch präzise sein. Wenn sie zu kurz sind, schaffen wir es nicht, zu lange zurückzukehren, und ich habe Kraftstoff gekauft, den ich nicht verwenden kann.
Können Sie mir ein Programm schreiben, um das in die Entfernung umzuwandeln, die sie auf ihrem Flug zurücklegen müssen, um mich abzuholen?
Spezifikation:
Schreiben Sie mir eine Funktion, die:
- Akzeptiert eine Liste oder eine Folge von Blöcken, die relativ zu einem beliebigen Raster ablaufen:
- U p, D own, L eft und R ight.
- Kann entweder Groß- oder Kleinschreibung sein - z. Wenn es kürzer zu benutzen ist,
u
anstattU
weiterzumachen. - Eine ungültige Richtung hat undefiniertes Verhalten - z. Eine Richtung von X kann einen Fehler verursachen.
- Gibt ein Gleitkomma / Dezimal / Doppel zurück, das dem doppelten Abstand der geraden Linie vom Ursprungspunkt entspricht.
Zur Veranschaulichung und Verdeutlichung:
Meine Reise hätte genauso einfach aufgezeichnet werden können wie "luluu..."
oder ['l','u','l'...]
aber sie muss als Auf, Ab, Links, Rechts aufgezeichnet werden.
Antworten:
J, 17 Zeichen
Nutzt die Tatsache, dass die Befugnisse
j
die richtigen Richtungen darstellen.'urdl'i.
nimm einen String und berechne Indizes (0 für 'u', 1 für 'r', ...)0j1^
transformiert mit der entsprechenden Potenz von in die Richtung in der komplexen Ebenej
.+/
fasst die einzelnen Schritte zusammen2*|
zweifacher ModulBeispiel:
quelle
Python 2.7
5658565148Mit dem gestohlenen Number One Dime von Scrooge McDuck habe ich mein Vermögen gemacht und bin jetzt reicher als Scrooge.
Python 2.7 -
615350 (Groß- und Kleinschreibung wird nicht berücksichtigt)Implementierung
quelle
IndexError: list index out of range
. Welche Form soll die Eingabe haben?%5
nicht%8
. Ok, es macht jetzt mehr Sinn :)APL (29)
z.B
Erläuterung:
+/'URDL'∘.=⍵
: Sehen Sie, wie oft die ZeichenURDL
im Argument vorkommen-⌿2 2⍴
: subtrahiere denU
Wert vomD
Wert und denR
Wert vomL
Wert2 0j2×
: multipliziere den vertikalen Wert mit2
und den horizontalen Wert mit2i
+/
: Summe|
: Größequelle
Ruby 1.9+ (67)
Beispiel
quelle
perl6: 44 Zeichen
get.comb
Ruft eine Eingabezeile ab und teilt sie in Zeichen auf<U R L D>
ist eine Liste von Wörtern, in diesem Fall Zeichen(1,2,3) Z (4,5,6)
==(1,2), (2,5), (3,6)
, also packt es 2 Listen ineinander und erstellt eine Liste von Paketen, die%()
sich in einen Hash verwandelt<<**>>
wird paarweise ausgeführt**
, wobei die kürzere Liste um die längere erweitert wird. Kürzere Liste ist zufällig nuri
[+]
summiert alle Elemente einer Liste,abs
nimmt den Modul für komplexe ZahlenJa, ich habe alle möglichen Leerzeichen entfernt.
quelle
Python 2.7 - 65
Schön und kurz, dies verwendet komplexe Zahlen, um durch die Ebene zu springen:
Requisiten an DSM und Abhijit in anderen Fragen, die mir die Verwendung von zeigten
1j
, um dies zu berechnen.quelle
1j
geschrieben werden alsj
,-1j
als-j
? Behandelt dies auch obere und untere Eingabe oder nur obere?j
und der imaginären Einheit zu unterscheidenj
2
multiplizieren, anstatt das Endergebnis zu multiplizieren.Mathematica
9249Calle verdient die volle Anerkennung für die Rationalisierung des Codes.
Beispiel
quelle
f@l_ := 2 N@Norm[Tr[l /. {"r" -> 1, "l" -> -1, "u" -> I, "d" -> -I}]]
wird ausreichen.2 Norm[(2. + 2. I) + "U" + "X"]
als Ausgabe für deinen Code.@
s ersetzen, erhalten Sie zwei weitere Zeichen weniger.PHP, 67
Beispiel:
quelle
Julia, 45 Jahre alt
Hat den
i
Trick mit den to powers gestohlen . Außerdem haben alle Zeichen außer d Werte, die als akzeptable Potenzen für funktioniereni
.quelle
J 29 Zeichen
Dies funktioniert nur mit Kleinbuchstaben Richtungen und alle anderen Zeichen als
r
,u
,l
, undd
es wird dazu führen , eine falsche Antwort zu geben.Verwendung:
Erläuterung:
'ruld'i.'uuuudrrrl'
Die dyadische Form voni.
findet den Index der Elemente aus dem rechten Argument im linken Argument. In diesem Fall:/:~
sortiert diese Liste in aufsteigender Reihenfolge:#/.~
zählt die Anzahl der Vorkommen jeder Zahl:_2[\
schneidet es in 2 Reihen:-/
subtrahiert die Unterseite von der Oberseite+&.*:
leiht sich einen Trick von einer anderen Antwort, die ich heute Morgen gesehen habe , und quadriert die Gegenstände, summiert sie dann und führt dann eine Quadratwurzel aus. Siehe unter&.
Dokumentation:+:
verdoppelt das Ergebnis:quelle
R,
867456 ZeichenOk, es ist tatsächlich viel kürzer mit imaginären Zahlen:
Verwendung:
Alte Lösung bei 74 Zeichen mit xy-Koordinaten:
Verwendung:
Nimmt die Eingabe als stdin, muss klein geschrieben und durch Leerzeichen getrennt sein. Verwenden Sie xy-Koordinaten ab (0,0).
quelle
k (
5049)Beispiel
quelle
Java, 185,
203,204,217,226Ich habe angenommen, dass jedes "U" "1 up" ist, also wären zwei Einheiten "UU"
Bearbeiten: Schalter gegen Wenn ausgetauscht
Für Iterator verschoben
Nimmt keine Eingabe mehr als Zeichenfolge, sondern als Array von Richtungen
quelle
T-SQL, 158
Das @s ist die Eingabezeichenfolge vom Typ varchar (max)
quelle
ES6,
77,69Definition:
Verwendung:
(Teilweise inspiriert von Boanns Antwort.)
quelle
for
Anweisung durch eine andere ersetzen Ausdruck (ein Pfeil Funktionskörper mit Anweisungen erfordert die Klammern und die explizite Rückgabe, Körper, die nur Ausdrücke sind, nicht) ..JavaScript - 142 Zeichen - keine Bewertung ()
wo ist ein String wie 'uudrrl'
Verwenden Sie wie folgt -
Test in der Browserkonsole.
quelle
C # - 90 Zeichen
Frisch von LINQPad.
Wobei die Eingabe eine gültige Zeichenfolge ist.
quelle
Befunge-93 (65)
Es hat 65 Nicht-Leerzeichen (217 mit Leerzeichen, obwohl dies durch ein kompakteres Layout (für 69/176 Zeichen) reduziert werden kann). Das Ausgabeformat erfordert eine gewisse Liberalität, ist jedoch unbestreitbar genau. Scheint die Mühe nicht wert zu sein, eine Quadratwurzelimplementierung zu implementieren / zu stehlen.
echo 'UUDLLUU' | ./befungee.py ../man
Ausgänge 2√13 (tatsächlich scheint die Implementierung jedoch ein Problem mit dem erweiterten ASCII zu haben).quelle
Matlab, 51 Zeichen
Mein Matlab-Beitrag funktioniert nur mit Großbuchstaben. Das war ein Spaß! Am schwierigsten war es, die Zeichenfolge in ein Array komplexer Zahlen umzuwandeln, die summiert werden sollten.
Funktion:
Verwendung:
quelle
Javascript, 136
quelle
JavaScript, 89
Beispiel:
quelle
C 120
d("LULUURRRRURD")
->8.485281
quelle
JavaScript (kein ES6, keine Auswertung) - 131
Prüfung:
quelle