Technische Daten
- Sie haben einen kubischen 3D-Raum
x,y,z
mitS
ganzzahligen Größeneinheiten, z0 <= x,y,z <= S
. - Sie erhalten von Standard - Eingabemethoden eine Reihe von Punkten
P
wie dargestelltx,y,z
ganzzahligen Koordinaten, in jedem vernünftigen Format , wie Sie mögen, zum Beispiel:[x1,y1,z1],[x2,y2,z2],[x3,y3,z3] ... [xn,yn,zn]
. - Alle
P
Werte werden in dem oben genannten kubischen 3D-Raum liegen, wie z0 <= x,y,z <= S
. - Die mögliche Gesamtzahl
P
wird sein .1 <= P <= S3
- Als Eingabe erhalten Sie auch die
x,y,z
ganzzahligen Koordinaten des BasispunktsB
und die 3D-WürfelgrößeS
.
Aufgabe
Ihr Ziel ist die Ausgabe der Punkte in Ihrem bevorzugten Format, P
sortiert nach dem linearen (euklidischen) Abstand vom Basispunkt B
.
Regeln
- Wenn Sie mehr als einen Punkt
P
mit gleichem Abstand findenB
, müssen Sie alle ÄquidistantenP
in Ihrer bevorzugten Reihenfolge ausgeben . - Es ist möglich, dass ein Punkt
P
mit dem Punkt übereinstimmtB
, sodass die Entfernung der Punkte so ist0
, dass Sie diesen Punkt ausgeben müssen. - Dies ist eine Code-Golf- Herausforderung, also gewinnt der kürzeste Code.
- Standardlücken sind verboten.
- Code-Erklärungen sind willkommen.
Testfälle
Input:
S (size), [B (base point x,y,z)], [P1 (x,y,z)], [P2], [P3], [P4], [P5], [...], [Pn]
10, [5,5,5], [0,0,0], [10,10,10], [2,0,8], [10,3,1], [4,4,5], [5,5,5], [5,5,4]
Output:
[5,5,5], [5,5,4], [4,4,5], [2,0,8], [10,3,1], [0,0,0], [10,10,10]
- - -
Input:
5, [2, 3, 3], [3, 0, 4], [5, 0, 3], [0, 2, 4], [0, 3, 5], [4, 2, 1], [2, 2, 2], [3, 1, 2], [3, 1, 0], [1, 3, 2], [2, 3, 1], [3, 1, 5], [4, 0, 0], [4, 3, 1], [0, 5, 5], [1, 5, 1], [3, 1, 4], [2, 2, 2], [0, 2, 5], [3, 3, 5], [3, 3, 0], [5, 4, 5], [4, 1, 3], [5, 1, 1], [3, 5, 3], [1, 5, 3], [0, 5, 2], [4, 3, 3], [2, 1, 1], [3, 3, 0], [5, 0, 4], [1, 5, 2], [4, 2, 3], [4, 2, 1], [2, 5, 5], [3, 4, 0], [3, 0, 2], [2, 3, 2], [3, 5, 1], [5, 1, 0], [2, 4, 3], [1, 0, 5], [0, 2, 5], [3, 4, 4], [2, 4, 0], [0, 1, 5], [0, 5, 4], [1, 5, 1], [2, 1, 0], [1, 3, 4], [2, 2, 2], [4, 2, 4], [5, 5, 4], [4, 4, 0], [0, 4, 1], [2, 0, 3], [3, 1, 5], [4, 4, 0], [2, 5, 1], [1, 2, 4], [4, 3, 1], [0, 2, 4], [4, 5, 2], [2, 0, 1], [0, 0, 2], [4, 1, 0], [5, 4, 3], [2, 5, 2], [5, 4, 4], [4, 4, 3], [5, 5, 1], [4, 0, 2], [1, 3, 5], [4, 2, 0], [0, 3, 1], [2, 2, 0], [0, 4, 5], [3, 2, 0], [0, 2, 1], [1, 2, 2], [2, 5, 3], [5, 5, 2], [5, 2, 4], [4, 5, 5], [2, 1, 2], [5, 4, 3], [4, 5, 4], [2, 3, 1], [4, 4, 4], [3, 0, 0], [2, 4, 5], [4, 3, 3], [3, 5, 3], [4, 0, 0], [1, 1, 1], [3, 1, 3], [2, 5, 5], [0, 0, 5], [2, 0, 2], [1, 0, 3], [3, 1, 4], [1, 2, 5], [4, 1, 3], [1, 4, 5], [3, 1, 4], [3, 5, 1], [5, 1, 4], [1, 0, 4], [2, 2, 0], [5, 2, 1], [0, 5, 3], [2, 1, 1], [0, 3, 0], [4, 5, 5], [3, 4, 2], [5, 3, 3], [3, 1, 1], [4, 0, 1], [5, 0, 5], [5, 0, 4], [1, 4, 3], [5, 4, 2], [5, 4, 0], [5, 1, 0], [0, 0, 1], [5, 3, 0]
Output:
[2, 4, 3], [2, 3, 2], [1, 3, 4], [1, 3, 2], [2, 2, 2], [1, 4, 3], [2, 2, 2], [2, 2, 2], [1, 2, 2], [3, 4, 2], [1, 2, 4], [3, 4, 4], [2, 5, 3], [4, 3, 3], [2, 3, 1], [4, 3, 3], [2, 3, 1], [1, 3, 5], [4, 4, 3], [2, 5, 2], [3, 1, 3], [1, 5, 3], [4, 2, 3], [2, 1, 2], [3, 5, 3], [2, 4, 5], [3, 3, 5], [3, 5, 3], [3, 1, 4], [0, 2, 4], [0, 2, 4], [1, 2, 5], [3, 1, 2], [3, 1, 4], [3, 1, 4], [4, 2, 4], [1, 4, 5], [4, 4, 4], [1, 5, 2], [4, 3, 1], [0, 5, 3], [2, 1, 1], [4, 1, 3], [4, 3, 1], [2, 5, 5], [0, 3, 5], [4, 1, 3], [2, 5, 1], [2, 1, 1], [0, 3, 1], [2, 5, 5], [1, 1, 1], [0, 4, 5], [4, 5, 4], [4, 5, 2], [0, 2, 1], [1, 5, 1], [5, 3, 3], [0, 5, 2], [3, 5, 1], [3, 5, 1], [0, 2, 5], [1, 5, 1], [4, 2, 1], [3, 1, 5], [3, 1, 1], [0, 2, 5], [4, 2, 1], [0, 5, 4], [0, 4, 1], [2, 0, 3], [3, 1, 5], [2, 4, 0], [2, 2, 0], [2, 0, 2], [3, 3, 0], [3, 3, 0], [5, 4, 3], [1, 0, 3], [5, 4, 3], [2, 2, 0], [3, 0, 2], [5, 4, 4], [5, 4, 2], [1, 0, 4], [3, 0, 4], [5, 2, 4], [3, 2, 0], [3, 4, 0], [0, 1, 5], [0, 5, 5], [4, 5, 5], [4, 5, 5], [0, 3, 0], [2, 0, 1], [2, 1, 0], [4, 4, 0], [5, 1, 4], [5, 5, 4], [5, 2, 1], [3, 1, 0], [5, 4, 5], [4, 4, 0], [1, 0, 5], [4, 2, 0], [0, 0, 2], [4, 0, 2], [5, 5, 2], [4, 1, 0], [5, 5, 1], [0, 0, 1], [5, 1, 1], [4, 0, 1], [0, 0, 5], [5, 0, 3], [5, 3, 0], [5, 4, 0], [3, 0, 0], [5, 0, 4], [5, 0, 4], [5, 1, 0], [4, 0, 0], [4, 0, 0], [5, 0, 5], [5, 1, 0]
- - -
Input:
10, [1, 9, 4], [4, 6, 2], [7, 5, 3], [10, 5, 2], [9, 8, 9], [10, 5, 10], [1, 5, 4], [8, 1, 1], [8, 6, 9], [10, 4, 1], [3, 4, 10], [4, 7, 0], [7, 10, 9], [5, 7, 3], [6, 7, 9], [5, 1, 4], [4, 3, 8], [4, 4, 9], [6, 9, 3], [8, 2, 6], [3, 5, 1], [0, 9, 0], [8, 4, 3], [0, 1, 1], [6, 7, 6], [4, 6, 10], [3, 9, 10], [8, 3, 1], [10, 1, 1], [9, 10, 6], [2, 3, 9], [10, 5, 0], [3, 2, 1], [10, 2, 7], [8, 4, 9], [5, 2, 4], [0, 8, 9], [10, 1, 6], [0, 8, 10], [5, 10, 1], [7, 4, 5], [4, 5, 2], [0, 2, 0], [8, 3, 3], [6, 6, 6], [3, 0, 2], [0, 1, 1], [10, 10, 8], [6, 2, 8], [8, 8, 6], [5, 4, 7], [10, 7, 4], [0, 9, 2], [1, 6, 6], [8, 5, 9], [3, 7, 4], [5, 6, 6], [3, 1, 1], [10, 4, 5], [1, 5, 7], [8, 6, 6], [4, 3, 7], [2, 1, 0], [6, 4, 2], [0, 7, 8], [8, 3, 6], [9, 2, 0], [1, 3, 8], [4, 4, 6], [5, 8, 9], [9, 4, 4], [0, 7, 3], [8, 3, 4], [6, 7, 9], [8, 7, 0], [0, 7, 7], [8, 10, 10], [10, 2, 5], [6, 9, 5], [6, 2, 7], [0, 9, 6], [1, 4, 1], [4, 3, 1], [5, 7, 3], [9, 6, 8], [4, 1, 7], [4, 0, 8], [3, 4, 7], [2, 3, 6], [0, 0, 7], [5, 3, 6], [7, 3, 4], [6, 7, 8], [3, 7, 9], [1, 9, 10], [2, 1, 2], [2, 8, 2], [0, 3, 0], [1, 1, 9], [3, 5, 2], [10, 5, 3], [5, 2, 9], [6, 9, 0], [9, 5, 0], [7, 1, 10], [3, 3, 8], [2, 5, 1], [3, 10, 10], [6, 2, 2], [10, 7, 2], [4, 3, 1], [4, 2, 1], [4, 2, 8], [6, 8, 5], [3, 10, 0], [1, 1, 7], [6, 9, 6], [6, 2, 4], [5, 5, 7], [5, 4, 5], [9, 8, 1], [9, 8, 1], [0, 10, 6], [1, 1, 9], [3, 8, 8], [3, 1, 5], [5, 7, 4], [4, 3, 6], [5, 4, 7], [6, 0, 8], [7, 8, 1], [9, 8, 4], [2, 10, 0], [3, 4, 5], [9, 3, 10], [7, 4, 1], [2, 1, 9], [10, 8, 1], [10, 3, 7], [2, 0, 6], [3, 8, 4], [10, 0, 2], [9, 9, 10], [8, 9, 5], [4, 10, 2], [8, 3, 4], [4, 2, 10], [9, 1, 6], [6, 1, 3], [4, 1, 3], [2, 9, 0], [5, 6, 5], [8, 8, 3], [5, 5, 0], [7, 6, 9], [1, 1, 5], [3, 0, 4], [1, 10, 6], [8, 0, 2], [0, 7, 3], [8, 9, 8], [2, 1, 8], [3, 1, 10], [4, 5, 9], [7, 6, 10], [3, 6, 10], [5, 9, 8], [9, 3, 3], [2, 2, 3], [9, 9, 0], [7, 2, 2], [0, 0, 9], [8, 7, 4], [9, 2, 9], [0, 6, 4], [9, 4, 3], [10, 1, 3], [5, 9, 10], [5, 10, 6], [6, 3, 10],
Output:
[1, 10, 6], [3, 8, 4], [0, 9, 6], [0, 9, 2], [2, 8, 2], [0, 7, 3], [0, 7, 3], [0, 10, 6], [3, 7, 4], [0, 6, 4], [1, 6, 6], [0, 7, 7], [4, 10, 2], [1, 5, 4], [0, 9, 0], [2, 9, 0], [2, 10, 0], [5, 7, 4], [5, 7, 3], [5, 10, 6], [5, 7, 3], [0, 7, 8], [3, 10, 0], [3, 8, 8], [4, 6, 2], [3, 5, 2], [1, 5, 7], [5, 10, 1], [6, 9, 3], [6, 9, 5], [5, 6, 5], [2, 5, 1], [0, 8, 9], [6, 8, 5], [5, 6, 6], [6, 9, 6], [4, 5, 2], [4, 7, 0], [3, 5, 1], [3, 4, 5], [5, 9, 8], [6, 7, 6], [3, 7, 9], [1, 4, 1], [1, 9, 10], [4, 4, 6], [0, 8, 10], [6, 6, 6], [3, 4, 7], [3, 9, 10], [5, 5, 7], [3, 10, 10], [2, 3, 6], [6, 9, 0], [5, 8, 9], [5, 4, 5], [6, 7, 8], [7, 8, 1], [5, 5, 0], [4, 3, 6], [3, 6, 10], [8, 9, 5], [5, 4, 7], [4, 5, 9], [5, 4, 7], [2, 2, 3], [8, 8, 3], [1, 3, 8], [5, 9, 10], [0, 3, 0], [7, 5, 3], [8, 7, 4], [4, 3, 1], [8, 8, 6], [6, 4, 2], [4, 3, 7], [6, 7, 9], [4, 6, 10], [4, 3, 1], [6, 7, 9], [3, 3, 8], [5, 3, 6], [4, 4, 9], [4, 3, 8], [8, 6, 6], [3, 2, 1], [7, 4, 5], [7, 10, 9], [2, 3, 9], [5, 2, 4], [1, 1, 5], [3, 4, 10], [8, 9, 8], [9, 8, 4], [0, 2, 0], [4, 2, 1], [3, 1, 5], [2, 1, 2], [8, 7, 0], [9, 10, 6], [7, 4, 1], [7, 6, 9], [7, 3, 4], [1, 1, 7], [0, 1, 1], [4, 2, 8], [9, 8, 1], [0, 1, 1], [4, 1, 3], [6, 2, 4], [9, 8, 1], [8, 4, 3], [3, 1, 1], [6, 2, 2], [5, 1, 4], [9, 9, 0], [7, 6, 10], [2, 1, 0], [2, 1, 8], [4, 1, 7], [8, 6, 9], [6, 2, 7], [8, 3, 4], [8, 3, 4], [10, 7, 4], [3, 0, 4], [8, 3, 3], [8, 10, 10], [2, 0, 6], [9, 6, 8], [10, 7, 2], [1, 1, 9], [8, 3, 6], [1, 1, 9], [7, 2, 2], [3, 0, 2], [9, 4, 4], [8, 5, 9], [2, 1, 9], [6, 1, 3], [6, 2, 8], [5, 2, 9], [9, 4, 3], [9, 8, 9], [0, 0, 7], [10, 8, 1], [4, 2, 10], [8, 3, 1], [9, 5, 0], [6, 3, 10], [10, 10, 8], [10, 5, 3], [8, 4, 9], [9, 9, 10], [10, 5, 2], [9, 3, 3], [8, 2, 6], [3, 1, 10], [4, 0, 8], [0, 0, 9], [10, 4, 5], [10, 5, 0], [10, 4, 1], [8, 1, 1], [6, 0, 8], [10, 3, 7], [9, 2, 0], [10, 2, 5], [9, 1, 6], [10, 5, 10], [8, 0, 2], [9, 3, 10], [7, 1, 10], [9, 2, 9], [10, 2, 7], [10, 1, 3], [10, 1, 6], [10, 1, 1], [10, 0, 2]
- - -
Input:
10000, [8452, 3160, 6109], [7172, 5052, 4795], [9789, 4033, 2952], [8242, 213, 3835], [177, 7083, 908], [3788, 3129, 3018], [9060, 464, 2701], [6537, 8698, 291], [9048, 3860, 6099], [4600, 2696, 4854], [2319, 3278, 9825]
Output:
[9048, 3860, 6099], [7172, 5052, 4795], [9789, 4033, 2952], [8242, 213, 3835], [4600, 2696, 4854], [9060, 464, 2701], [3788, 3129, 3018], [2319, 3278, 9825], [6537, 8698, 291], [177, 7083, 908]
S
als Parameter nehmen?Antworten:
05AB1E , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
n
?JavaScript (ES6), 71 Byte
quelle
g
inside ändern und verschiebensort
.Haskell ,
5452 BytesProbieren Sie es online!
Ich brauche nicht die Größe des Raums.
sum.map(^2).zipWith(-)o
berechnet den Abstand von einem Punkt zuo
:(xo-xp)^2+(yo-yp)^2+(zo-zp)^2
. Die Punkte werden einfach nach der Entfernung zu sortierto
.BEARBEITEN : "Wenn Sie es nicht brauchen, nehmen Sie es nicht" 2 Bytes gespeichert.
quelle
Python 3 ,
6864 Bytes-4 Bytes dank @Ramillies
Probieren Sie es online!
quelle
R ,
5640 Bytes-16 bytes dank flodel für den vorschlag eines anderen eingabeformats
Probieren Sie es online!
Nimmt
P
als3xn
Matrix von Punkten, dh jede Spalte ist ein Punkt; Die Ausgabe erfolgt im selben Format.Verwenden Sie die Hilfsfunktion,
g
um die Liste der PunkteP
aus den Testfällen in das entsprechende R-Format umzuwandeln.quelle
sapply()
mitcolSums((t(P)-B)^2)
, wo der EingangP
wäre eine Matrix sein?P
als3xn
Matrix nehmen und einfachcolSums((P-B)^2)
stattdessen machen!Mathematica, 24 Bytes
Übernimmt Eingaben im Format
f[B][P]
.Wir müssen 4 Bytes verwenden
x
, um die verschachtelte Funktion zu erstellen. Der Vorrang von
(\[Function]
) und//
funktioniert gut, so dass der Ausdruck dem folgenden entspricht:Wir brauchen,
N
weil Mathematica standardmäßig nach Ausdrucksstruktur statt nach Wert sortiert:quelle
C # (.NET Core) ,
685753 +2318 Bytes-11 Bytes dank Emigna
Die Byteanzahl umfasst auch
Probieren Sie es online!
Punkte werden als Sammlungen von Ints behandelt. Erläuterung:
quelle
JavaScript (ES6),
72 bis71 ByteDieser ist nicht kürzer als Neils Antwort , aber ich dachte, ich würde ihn trotzdem posten, um die Verwendung von zu demonstrieren
Math.hypot()
, die in ES6 eingeführt wurde.Nimmt Eingaben in Curry-Syntax vor
(p)(a)
, wobei p = [x, y, z] der Basispunkt und a das Array anderer Punkte ist.Code-Snippet anzeigen
quelle
k , 14 Bytes
Probieren Sie es online!
Dies funktioniert auch für n Dimensionen und ist nicht auf 3 beschränkt.
quelle
Japt ,
109 Bytes-1 Byte dank @Shaggy
Nimmt Punkte als Array von Arrays mit drei Elementen und den Basispunkt als einzelnes Array in dieser Reihenfolge. Nimmt das Größenargument nicht an.
Probieren Sie es online! oder führen Sie den großen Testfall mit aus,
-R
um einenx,y,z
pro Zeile auszugeben .Erläuterung
quelle
í
die Argumente umgekehrt sehen könnte, das ist ziemlich nett. Ich denke auch, dass es funktionieren sollte; Ich führe einige der anderen Testfälle aus und bearbeite sie, wenn ich wieder an einem Computer bin.-
odern
würde auch anstelle von arbeitena
.MATL , 7 Bytes
Eingaben sind: 3-Spalten-Matrix mit Punkten als Zeilen und 3-Spalten-Vektor mit Basispunkt.
Probieren Sie es bei MATL Online!
Erläuterung
quelle
Gelee , 5 Bytes
1 Byte gespeichert, dank Leaky Nun .
Probieren Sie es online!
Erläuterung
quelle
ạS¥Þ
(habe deine Antwort nicht bemerkt, bevor du meine gepostet hast).ạ²SµÞ
Perl 6 , 35 Bytes (33 Zeichen)
Probieren Sie es online!
Erläuterung: Es wird eine Liste mit den Koordinaten des Basispunkts (aufgerufen
@b
) erstellt und anschließend eine Liste mit den Koordinaten der anderen Punkte (aufgerufen@p
). In einem Block können Sie sie mithilfe des^
Symbols im laufenden Betrieb verwenden. Jede der^
Variablen 'd entspricht einem Argument. (Sie sind alphabetisch sortiert, ebenso@^b
das erste und@^p
das zweite Argument .) Nach einmaliger Verwendung dieses Symbols können Sie die Variable normal verwenden.Die Anweisung
@^b
soll nur sagen, dass der Block das Basispunktargument übernimmt, das nur innerhalb des Sortierblocks verwendet wird. (Andernfalls wird auf das Argument des Sortierblocks verwiesen.) Die Methode.sort
kann ein Argument annehmen. Wenn es sich um einen Block mit 1 Argument handelt (wie hier), wird das Array nach den Werten dieser Funktion sortiert. Der Block selbst nimmt einfach jeden Punkt der Reihe nach und zippt ihn mit minus (Z-
) mit den Basispunktkoordinaten. Dann quadrieren wir alle Elemente in der Liste mit»²
und addieren sie mit[+]
.Als zusätzlichen Bonus funktioniert dies auch mit Float-Koordinaten und in jeder Dimension (solange Sie für alle Punkte die gleiche Anzahl von Koordinaten angeben, ist dies das Richtige).
Dies ist nicht mehr gültig. Ich lasse es hier nur zum Spaß.
Perl 6 , 24 Bytes - nur ein Witz!
Probieren Sie es online!
Da das OP nicht angibt, welche Metrik verwendet werden soll, wählt diese Einreichung die Verwendung der diskreten Metrik. In dieser Metrik ist der Abstand zwischen zwei Punkten 0, wenn sie identisch sind, und 1, wenn sie nicht identisch sind. Es ist leicht zu überprüfen, ob es sich tatsächlich um eine Metrik handelt (wenn ρ (A, B) der Abstand von A nach B ist, benötigen wir 1) ρ (A, B) = 0, wenn A = B, 2) ρ (A, B) ) = ρ (B, A), 3) ρ (A, B) + ρ (B, C) ≥ ρ (A, C) ("Dreieckungleichung").
Es könnte wahrscheinlich viel mehr Golf gespielt werden, aber ich meine es nicht ernst.
quelle
<5 5 5>,(<5 5 10>,<6 5 5>)
. Listen werden nicht nach ihrer Summe sortiert, sondern nach Elementen. Du brauchstsum
irgendwo einen.Kotlin 1.1, 58 Bytes
Verschönert
Prüfung
quelle
Java 8,
194 + 31214169163123112106 + 19109103 BytesProbieren Sie es online!
quelle
base=[2,3,3], points=[4,3,3],[1,3,4]
. Ihr Ergebnis ist[4,3,3], [1,3,4]
, während das richtige Ergebnis ist[1,3,4],[4,3,3]
.b->l->{l.sort(java.util.Comparator.comparing(p->{int d=0,i=3;for(;i-->0;)d+=(b[i]-p[i])*(b[i]-p[i]);return d;}));}
(114 Bytes) unter der Annahme einesList<int[]>
as-Parameters anstelle vonint[][]
.pow
funktioniert+=
ohne Cast, in den meisten anderen Fällen nicht. Gut zu wissen!B->P->P.sort(java.util.Comparator.comparing(p->{int d=0,i=0;while(i<3)d+=(d=p[i]-B[i++])*d;return d;}))
Pyth, 6 Bytes
Probieren Sie es online aus: Demonstration
Erläuterung:
quelle
Bad Request: Request Line is too large (7005 > 4094)
. Sie sollten Ihre Testsuite verkleinern, um die maximale Linkgröße zu erreichen.Perl 5 , 90 Bytes
Probieren Sie es online!
Die Eingabe ist eine durch Zeilenumbrüche getrennte Liste von Punkten, wobei der erste Punkt der Basispunkt ist und der letzte eine abschließende Zeilenumbrüche aufweist. Klammern (
[]
) um die Koordinaten sind optional.quelle