Hier ist ein weiteres einfaches:
Die Herausforderung
Geben Sie bei zwei Punkten in einem n-dimensionalen Raum den Abstand zwischen ihnen aus, der auch als euklidischer Abstand bezeichnet wird.
- Die Koordinaten sind rationale Zahlen; Die einzigen Grenzen sind die Einschränkungen Ihrer Sprache.
- Die niedrigste Dimension ist 1, die höchste ist diejenige, mit der Ihre Sprache umgehen kann
- Sie können davon ausgehen, dass die beiden Punkte dieselbe Dimension haben und keine leere Eingabe erfolgt.
- Der Abstand muss mindestens 3 Dezimalstellen betragen. Wenn Ihre Sprache keine Gleitkommazahlen unterstützt, geben Sie die nächste ganze Zahl aus.
Regeln
- Funktion oder Vollprogramm wie gewohnt erlaubt.
- Die Eingabe kann über STDIN, Kommandozeilen- oder Funktionsargumente erfolgen.
- Das Eingabeformat liegt bei Ihnen. Geben Sie an, welches Sie in Ihrer Antwort verwendet haben.
- Die Ausgabe kann durch Drucken auf Standardausgabe oder Rückgabewert erfolgen.
- Dies ist Code-Golf, also gewinnt die niedrigste Anzahl an Bytes! Bei einem Gleichstand gewinnt die frühere Antwort.
Testfälle
Jeder Punkt wird durch eine Liste der Länge n dargestellt.
[1], [3] -> 2
[1,1], [1,1] -> 0
[1,2], [3,4] -> 2.82842712475
[1,2,3,4], [5,6,7,8] -> 8
[1.5,2,-5], [-3.45,-13,145] -> 150.829382085
[13.37,2,6,-7], [1.2,3.4,-5.6,7.89] -> 22.5020221314
Viel Spaß beim Codieren!
code-golf
number
arithmetic
geometry
Denker
quelle
quelle
Antworten:
MATL , 2 Bytes
Probieren Sie es online !
Die
ZP
Funktion (entspricht MATLABspdist2
) berechnet alle paarweisen Abstände zwischen zwei Punktmengen, wobei standardmäßig der euklidische Abstand verwendet wird. Jede Menge von Punkten ist eine Matrix und jeder Punkt ist eine Reihe. In diesem Fall wird ein einzelnes Ergebnis erzeugt, nämlich der Abstand zwischen den beiden Punkten.quelle
MATL,
3 Bytes4.0Danke für -1 von @AndrasDeak!
Liest zwei Vektoren (über die implizite Eingabe, die von angefordert wird
-
), subtrahiert diese und berechnet die Norm ihrer Differenz mitZn
.Probieren Sie es online!
quelle
Pyth, 2 Bytes
Buchstäblich eine Funktion, die dieses Problem löst
Probieren Sie es hier aus.
quelle
Gelee , 4 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Mathematica, 11 Bytes
Eingabe als zwei Listen, Ausgabe als Zahl. Wenn die Eingabe exakt ist (Ganzzahlen, Rationalen usw.), ist auch die Ausgabe exakt. Wenn die Eingabe eine Gleitkommazahl enthält, ist die Ausgabe ebenfalls eine Gleitkommazahl.
quelle
EuclideanDistance
würde auch gut funktionieren ... wenn der Name nicht so verdammt lang wäre! Wenn es nur "MATL for Mathematica" gäbe, wäre dies ein einzelnes Byte =)Oktave, 15 Bytes
Beispiel:
quelle
CJam,
118 BytesVielen Dank an Dennis für das Speichern von 3 Bytes.
Führen Sie alle Testfälle aus.
Erläuterung
In diesem Tipp erfahren Sie, warum dies
:mh
funktioniert.quelle
:mh
ist in der Tat sehr schönHaskell, 46 Bytes
Haskell, 35 Bytes (von @nimi)
Haskell, 31 Bytes
<Hack>
</ hack>
Beispiele:
quelle
map
+uncurry
+zip
Zahlt selten ab, VerwendungzipWith
:d a=sqrt.sum.zipWith(((^2).).(-))a
.(.)
immer eine Funktion zurückgegeben wird, die nur ein Argument akzeptiert ... Ich denke, Sie können so etwas wie (.). (.) Tun, aber das ist es nicht wirklich wert.APL,
1411 BytesDies ist ein dyadischer Funktionszug, der die Vektoren links und rechts nimmt und die euklidische Norm ihrer Differenz zurückgibt.
Erläuterung:
Probieren Sie es hier aus
3 Bytes gespart dank Dennis!
quelle
.5*⍨(+/-×-)
spart ein paar Bytes.J 9 Bytes
Dies ist eine Funktion, die einen Satz von Koordinaten von dem anderen (
-/>
) nimmt und dann eine Summe+
unter dem&.
Quadrat ausführt*:
.Die Eingabe muss im Format sein ,
x y z;a b c
wox y z
Ihr erster Satz von Koordinaten unda b c
ist die andere.quelle
>
und angeben, dass die Eingabe als angegeben werden sollx y z,:a b c
.Java,
130117114107105 BytesDies ist die naheliegende Lösung. Ich spiele normalerweise nicht in Java, aber ich war gespannt, ob Java die Brainfuck-Version schlagen kann. Scheint nicht so, als hätte ich gute Arbeit geleistet. Vielleicht könnte man die neue Map / Reduce von Java 8 verwenden, um ein paar Bytes zu sparen.
Vielen Dank an @flawr (13 Bytes), @KevinCruijssen (9 Bytes) und @DarrelHoffman (3 Bytes)!
Golf gespielt:
Ungolfed:
quelle
for
Schleife zu komprimierendendouble x=0,s;for(int i=0;++i<a.length;s=a[i]-b[i],x+=s*s);
double[]a,b->{double x=0,s;for(int i=0;++i<a.length;s=a[i]-b[i],x+=s*s);return Math.sqrt(x);}
insgesamt 93 Byte reduziert werden .public
vor der Methode stehende entfernen , um 7 Bytes zu sparen, und Sie können dasx+=s*s
außerhalb der for-Schleife platzieren, so dass Sie das Komma (dhfor(int i=-1;++i<a.length;s=a[i]-b[i])x+=s*s;
) für -1 Bytes nicht benötigen .for(int i=0;i<a.length;x+=s*s)s=a[i]-b[i++];
(und ich auch geändert ,-1
um0
für ein zusätzliches Byte)0
indem ich die Operatorvorrangregeln verwende! Danke, dass du mir eine Menge Bytes erspart hast.Julia, 16 Bytes
Dies ist eine Funktion, die zwei Arrays akzeptiert und die euklidische Norm ihrer Differenz als Float zurückgibt.
Sie können alle Testfälle sofort Online überprüfen hier .
quelle
Golflua , 43 Zeichen
Funktioniert mit dem Namen
Ein Lua-Äquivalent wäre
quelle
Im Ernst, 12 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Rubin, 52
Im Testprogramm
quelle
AppleScript,
241239 BytesDies ist Golf-Code, aber ich habe Kommentare in das Formular eingefügt
--
.Dies verwendet den gleichen Algorithmus wie die meisten anderen Programme hier.
quelle
Perl 6,
30292624 Bytes(Danke @ b2gills für 2 weitere verlorene Bytes)
Verwendung
quelle
{sqrt [+] ([Z-] $_)»²}
JavaScript
ES7, 45ES6, 37 BytesErwartet ein Array von Koordinatenpaaren, eines von jedem Vektor, z
[[1, 5], [2, 6], [3, 7], [4, 8]]
. Wenn das nicht akzeptabel ist, dann für 42 Bytes:Erwartet zwei Arrays gleicher Länge entsprechend den beiden N-dimensionalen Vektoren, z
[1, 2, 3, 4], [5, 6, 7, 8]
. Bearbeiten: 3 Bytes dank @ l4m2 gespeichert. (Hat auch niemand meinen Tippfehler bemerkt?)quelle
a=>b=>Math.hypot(...a.map((t,i)=>t-b[i]))
Python 2, 47 Bytes
Eine einfache Lösung. Die Funktion erwartet 2 Punkte als Folgen von Zahlen und gibt den Abstand zwischen ihnen zurück.
Beispiel:
quelle
6 Zeichen / 13 Bytes
Try it here (Firefox only).
Berechnet die Norm der Differenz von Eingabearrays.
quelle
Scala,
6762 BytesBenötigt Eingabe als
Folge / Vektor vonvar-arg-TupelnBeispiel:
quelle
C #, 72 Bytes
Eine einfache Lösung mit Linq.
quelle
Salbei, 35 Bytes
Diese Funktion verwendet 2 Listen als Eingabe und gibt einen symbolischen Ausdruck zurück. Die Entfernung wird berechnet, indem eine Vektorsubtraktion für die Listen durchgeführt und die euklidische Norm des resultierenden Vektors berechnet wird.
Probieren Sie es online aus
quelle
TI-Basic (TI-84 Plus CE), 15 Byte
TI-Basic ist eine Token-Sprache .
Fordert zur Eingabe als zwei Listen auf und gibt die euklidische Entfernung zurück, in der sie eingegeben wurden
Ans
Erläuterung:
quelle
R, 4 Bytes
Dies ist eine integrierte Funktion zum Berechnen der Distanzmatrix einer beliebigen Eingabematrix. Der Standardwert ist euklidischer Abstand.
Anwendungsbeispiel:
Wenn Sie sich enttäuscht fühlen, weil es eine integrierte Version ist , dann ist hier eine nicht integrierte (oder zumindest weniger integrierte ...) Version für 22 Bytes (mit Dank an Giuseppe ):
Dies ist eine anonyme Funktion, die zwei Vektoren als Eingabe verwendet.
quelle
function(x,y)norm(x-y,"F")
ist kürzer als deine zweite Version.Haskell, 32 Bytes
quelle
map
und Klammern).sqrt$sum$(^2)<$>zipWith(-)
handelt sich nicht um eine gültige anonyme Funktion. Die zugrunde liegende Regel ist eigentlich ganz einfach: Wenn Sie schreiben könnenf = <mycode>
undf
anschließend die gewünschte Aufgabe ausführen, dann<mycode>
handelt es sich um eine gültige anonyme Funktion. In Ihrem Fall müssen Sie hinzufügenf p q = <mycode> p q
, so<mycode>
allein ist nicht gültig.Python 3, 70 Zeichen
Durchlaufen, das Quadrat der Differenz und dann die Wurzel der Summe finden:
quelle
sum([(x-y)**2 for x,y in zip(a,b)])**.5
Mathcad, Bytes
Verwendet den integrierten Vektorgrößenoperator (Absolutwert), um die Größe der Differenz zwischen den beiden Punkten (ausgedrückt als Vektoren) zu berechnen.
Mathcad Golf Größe auf Eis gelegt, bis ich (oder jemand anderes) die Diskussion über Meta eröffnet habe. Der kürzeste Weg (unter der Annahme, dass die Eingabe der Punktvektoren nicht zur Bewertung beiträgt) sind jedoch 3 "Bytes" mit 14 Bytes für die Funktionsversion.
quelle
Pyke, 7 Bytes
Probieren Sie es hier aus!
Transponieren, Subtrahieren anwenden, Quadrat, Summe, Quadrat.
quelle
Ruby, 50 Bytes
Zip, dann map / verkleinern. Verdrängt kaum die andere Ruby-Antwort von @LevelRiverSt um 2 Bytes ...
Probieren Sie es online aus
quelle