Stellen Sie sich vor auf einen Punkt reisen liegend A Meilen entfernt horizontal und B Meilen entfernt vertikal von der aktuellen Position. Oder mit anderen Worten: Reisen von (0, 0)
zu Punkt (a, b)
. Wie weit müssten Sie am Ende reisen? Dies scheint eine einfache Frage zu sein, aber die Antwort hängt davon ab, wen Sie fragen. Wenn Sie eine Krähe sind, und Sie können Reisen in der Luftlinie , die zurückgelegte Strecke nur die ist euklidischen Abstand zu (a, b)
. Das ist
sqrt(a^2 + b^2)
Aber wenn Sie nur ein langweiliger Mensch sind, möchten Sie nicht wirklich so weit laufen, also müssen Sie ein Taxi nehmen. Die meisten Taxis fahren nicht in gerader Linie in Richtung Ihres Ziels, weil sie im Allgemeinen versuchen, auf den Straßen zu bleiben. Die tatsächliche Entfernung, die Sie am Ende zurücklegen werden, ist also die Summe aus vertikaler und horizontaler Entfernung. Oder die Formel lautet:
abs(a) + abs(b)
Dies wird als Taxidistanz bezeichnet . Dieses Bild zeigt deutlich den Unterschied zwischen den beiden:
Um dorthin zu reisen, (6, 6)
kann eine Krähe einfach auf der grünen Linie fliegen, und dies ergibt eine Entfernung von 6 * sqrt(2)
oder ungefähr 8,49. Ein Taxi kann den roten, blauen oder gelben Weg nehmen, aber alle fahren 12.
Dies führt zu der eigentlichen Frage, die ich stelle. Wenn eine Krähe und ein Taxi von Punkt (0, 0)
zu Punkt fahren (a, b)
, wie lange dauert der Weg des Taxis? Oder, in mehr Fachjargon,
Bestimmen Sie bei einem zweidimensionalen Vektor die Differenz zwischen der Norm2 des Vektors und der Norm1 des Vektors.
Sie müssen das kürzestmögliche Programm oder eine Funktion schreiben, um diese Frage zu beantworten. Sie können wählen, ob Sie 'a' und 'b' als zwei separate Eingaben oder als Tupel mit zwei Elementen verwenden möchten. Sie können Eingaben und Ausgaben in jedem vernünftigen Format vornehmen. Wenn die Differenz eine nicht ganzzahlige Zahl ist, müssen Sie auf mindestens zwei Dezimalstellen genau sein.
Sie können immer davon ausgehen, dass 'a' und 'b' ganze Zahlen sind und dass sie nicht beide 0 sind. (Obwohl es möglich ist, dass eine von beiden Null ist.)
Wie üblich gelten Standardlücken und versuchen, Ihr Programm so kurz wie möglich zu halten, gezählt in Bytes.
Ich werde jede Antwort, die eine Erklärung der Funktionsweise des Codes enthält, positiv bewerten und alle coolen Tricks demonstrieren, die zum Speichern von Bytes verwendet werden.
Hier sind einige Beispiele, mit denen Sie Ihren Code testen können:
#input #output
3, 4 2
-3, 4 2
-3, -4 2
6, 6 3.51
42, 0 0
10, 10 5.86
3, 3 1.76
Viel Spaß beim Golfen! :)
10,10
muss 5.86 sein, da es darum geht 5.85786...
und Sie den darunter liegenden abgerundet haben.