Okular
- Masz sześcienną przestrzeń 3D jednostek liczb całkowitych
x,y,z
wielkościS
, takich jak0 <= x,y,z <= S
. - Można uzyskać z metod wprowadzania domyślnych tablicę punktów
P
reprezentowanex,y,z
współrzędnych całkowitych, w jakimkolwiek rozsądnym formacie, jak chcesz, na przykład:[x1,y1,z1],[x2,y2,z2],[x3,y3,z3] ... [xn,yn,zn]
. - Wszystkie
P
wartości będą w wyżej wymienionej sześciennej przestrzeni 3D, np0 <= x,y,z <= S
. - Możliwa całkowita liczba
P
to .1 <= P <= S3
- Otrzymujesz również jako dane wejściowe
x,y,z
współrzędne całkowite punktu bazowegoB
i rozmiar kostki 3DS
.
Zadanie
Twoim celem jest wyprowadzenie, w preferowanym formacie, punktów P
posortowanych według odległości liniowej (euklidesowej) od punktu bazowego B
.
Zasady
- Jeśli znajdziesz więcej niż jeden punkt,
P
który jest w równej odległościB
, musisz wyprowadzić wszystkie równoodległeP
w preferowanej kolejności. - Możliwe jest, że punkt
P
zbiegnie sięB
, więc jego odległość wynosi0
, musisz go wyprowadzić. - To wyzwanie dla golfa , więc wygrywa najkrótszy kod.
- Standardowe luki są zabronione.
- Docenia się wyjaśnienia kodu.
Przypadki testowe
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
jako parametr?Odpowiedzi:
05AB1E , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
n
?JavaScript (ES6), 71 bajtów
źródło
g
wnętrzasort
.Haskell ,
5452 bajtyWypróbuj online!
Nie potrzebuję wielkości przestrzeni.
sum.map(^2).zipWith(-)o
oblicza odległość od punktu doo
:(xo-xp)^2+(yo-yp)^2+(zo-zp)^2
. Punkty są po prostu sortowane według odległości doo
.EDYCJA : „jeśli nie potrzebujesz, nie bierz” zapisał 2 bajty.
źródło
Python 3 ,
6864 bajtów-4 bajty dzięki @Ramillies
Wypróbuj online!
źródło
R ,
5640 bajtów-16 bajtów dzięki flodel za sugerowanie innego formatu wejściowego
Wypróbuj online!
Trwa
P
jako3xn
macierz punktów, tj. Każda kolumna jest punktem; dane wyjściowe są w tym samym formacie.Użyj funkcji pomocnika,
g
aby przekształcić listę punktówP
z przypadków testowych do odpowiedniego formatu R.źródło
sapply()
zcolSums((t(P)-B)^2)
, gdzie wejścieP
byłaby matryca?P
jako3xn
matrycę i po prostu zrobićcolSums((P-B)^2)
!Mathematica, 24 bajty
Pobiera dane wejściowe w formacie
f[B][P]
.Musimy użyć 4 bajtów,
x
aby zagnieżdżona funkcja. Pierwszeństwo
(\[Function]
) i//
działa dobrze, dzięki czemu wyrażenie jest równoważne z tym:Potrzebujemy,
N
ponieważ domyślnie Mathematica sortuje według struktury wyrażeń zamiast według wartości:źródło
C # (.NET Core) ,
685753 +2318 bajtów-11 bajtów dzięki Emignie
Liczba bajtów obejmuje również
Wypróbuj online!
Punkty są traktowane jako zbiory liczb wewnętrznych. Wyjaśnienie:
źródło
JavaScript (ES6),
7271 bajtówTen nie jest krótszy niż odpowiedź Neila , ale pomyślałem, że i tak opublikuję go, aby zademonstrować użycie
Math.hypot()
, które zostało wprowadzone w ES6.Pobiera dane wejściowe w składni curry
(p)(a)
, gdzie p = [x, y, z] jest punktem bazowym, a a jest tablicą innych punktów.Pokaż fragment kodu
źródło
k , 14 bajtów
Wypróbuj online!
Działa to również dla n wymiarów i nie jest ograniczone do 3.
źródło
Japt ,
109 bajtów-1 bajt dzięki @Shaggy
Pobiera punkty jako tablicę trzyelementowych tablic, a punkt bazowy pojedynczą tablicę, w tej kolejności. Nie przyjmuje argumentu rozmiaru.
Wypróbuj online! lub uruchom ogromny sprawdzian z
-R
jednego wyjściax,y,z
na linię.Wyjaśnienie
źródło
í
można wziąć to na odwrót, to całkiem miłe. Ja też uważam, że to powinno działać; Uruchomię kilka innych przypadków testowych i dokonam edycji, gdy wrócę do komputera.-
lubn
też działałby zamiasta
.MATL , 7 bajtów
Dane wejściowe to: 3-kolumnowa macierz z punktami jako wierszami i 3-kolumnowy wektor z punktem bazowym.
Wypróbuj w MATL Online!
Wyjaśnienie
źródło
Galareta , 5 bajtów
Oszczędność 1 bajtu dzięki Dziurawej Zakonnicy .
Wypróbuj online!
Wyjaśnienie
źródło
ạS¥Þ
(nie zauważyłem twojej odpowiedzi przed wysłaniem mojego).ạ²SµÞ
Perl 6 , 35 bajtów (33 znaków)
Wypróbuj online!
Objaśnienie: Pobiera listę ze współrzędnymi punktu bazowego (nazywanego
@b
), a następnie listę list ze współrzędnymi innych punktów (nazywanej@p
). W bloku możesz ich używać w locie za pomocą^
symbolu. Każda ze^
zmiennych „d” odpowiada jednemu argumentowi. (Są one posortowane alfabetycznie, podobnie@^b
jak 1. argument i@^p
2.). Po jednym użyciu tego symbolu można normalnie używać zmiennej.Instrukcja
@^b
ma tylko powiedzieć, że blok przyjmuje argument punktu bazowego, który jest używany tylko w bloku sortującym. (W przeciwnym razie odnosi się do argumentu bloku sortującego.) Metoda.sort
może przyjąć jeden argument. Jeśli jest to blok przyjmujący 1 argument (jak tutaj), tablica jest sortowana zgodnie z wartościami tej funkcji. Sam blok po prostu bierze kolejno każdy punkt i zamyka go za pomocą minus (Z-
) ze współrzędnymi punktu bazowego. Następnie kwadratujemy wszystkie elementy na liście»²
i sumujemy je za pomocą[+]
.Jako dodatkowy bonus, będzie to również działać ze współrzędnymi zmiennoprzecinkowymi i w każdym wymiarze (dopóki oczywiście podasz tę samą liczbę współrzędnych dla wszystkich punktów, robi to dobrze).
To nie jest już ważne. Zostawiam to tutaj dla zabawy.
Perl 6 , 24 bajtów - tylko żart!
Wypróbuj online!
Ponieważ PO nie określa, która metryka ma zostać użyta, w tym zgłoszeniu zdecydowano się na użycie metryki dyskretnej. W tej metodzie odległość między dwoma punktami wynosi 0, jeśli są identyczne, i 1, jeśli nie są. Łatwo jest sprawdzić, czy rzeczywiście jest to metryka (jeśli ρ (A, B) to odległość od A do B, wymagamy, aby 1) ρ (A, B) = 0 iff A = B, 2) ρ (A, B ) = ρ (B, A), 3) ρ (A, B) + ρ (B, C) ≥ ρ (A, C) („nierówność trójkąta”)).
Prawdopodobnie można by grać w golfa o wiele więcej, ale nie mówię tego poważnie.
źródło
<5 5 5>,(<5 5 10>,<6 5 5>)
. Listy nie są sortowane według ich sumy, ale według porównania elementów. Potrzebujeszsum
gdzieś.Kotlin 1.1, 58 bajtów
Upiększony
Test
źródło
Java 8,
194 + 31214169163123112106 + 19109103 bajtówWypróbuj online!
źródło
base=[2,3,3], points=[4,3,3],[1,3,4]
. Twój wynik jest[4,3,3], [1,3,4]
, a poprawny wynik to[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 bajtów), przyjmującList<int[]>
parametr jako zamiastint[][]
.pow
działa+=
bez obsady, nie w większości innych przypadków. Dobrze wiedzieć!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 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
źródło
Bad Request: Request Line is too large (7005 > 4094)
. Powinieneś zmniejszyć swój zestaw testowy, aby pasował do maksymalnego rozmiaru łącza.Perl 5 , 90 bajtów
Wypróbuj online!
Dane wejściowe to lista punktów oddzielona znakiem nowej linii, przy czym pierwsza jest punktem bazowym, a ostatnia ma nową linię końcową. Wsporniki (
[]
) wokół współrzędnych są opcjonalne.źródło