Спекуляции
- У вас есть кубическое трехмерное пространство
x,y,z
сS
целочисленными единицами измерения размера , например0 <= x,y,z <= S
. - Вы получаете от методов ввода по умолчанию массив точек ,
P
представленных в видеx,y,z
целых координат, в любом подходящем формате , как вам нравится, например:[x1,y1,z1],[x2,y2,z2],[x3,y3,z3] ... [xn,yn,zn]
. - Все
P
значения будут в вышеуказанном кубическом трехмерном пространстве, например0 <= x,y,z <= S
. - Возможное общее количество
P
будет .1 <= P <= S3
- В качестве входных данных вы также получите
x,y,z
целочисленные координаты базовой точкиB
и размер трехмерного кубаS
.
задача
Ваша цель - вывести в выбранном вами формате точки, P
отсортированные по линейному (евклидову) расстоянию от базовой точки B
.
правила
- Если вы найдете более одной точки
P
, равноудаленной отB
вас, вы должны вывести все равноотстоящие точкиP
в выбранном вами порядке. - Вполне возможно, что точка
P
будет совпадатьB
, так что их расстояние0
, вы должны вывести эту точку. - Это задача игры в гольф , поэтому выигрывает самый короткий код.
- Стандартные лазейки запрещены.
- Пояснения к коду приветствуются.
Контрольные примеры
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
в качестве параметра?Ответы:
05AB1E , 4 байта
Попробуйте онлайн!
объяснение
источник
n
?JavaScript (ES6), 71 байт
источник
g
изнутриsort
.Haskell ,
5452 байтаПопробуйте онлайн!
Мне не нужен размер пространства.
sum.map(^2).zipWith(-)o
вычисляет расстояние от точки доo
:(xo-xp)^2+(yo-yp)^2+(zo-zp)^2
. Точки просто сортируются по расстоянию доo
.РЕДАКТИРОВАТЬ : «если вам это не нужно, не берите его» сохраненные 2 байта.
источник
Python 3 ,
6864 байта-4 байта благодаря @Ramillies
Попробуйте онлайн!
источник
R ,
5640 байт-16 байт благодаря flodel за предложение другого формата ввода
Попробуйте онлайн!
Принимает
P
как3xn
матрицы точек, т. Е. Каждый столбец является точкой; вывод в том же формате.Используйте вспомогательную функцию,
g
чтобы преобразовать список точекP
из контрольных примеров в соответствующий формат R.источник
sapply()
сcolSums((t(P)-B)^2)
, где входP
будет матрица?P
качестве3xn
матрицы и просто делатьcolSums((P-B)^2)
вместо этого!Mathematica, 24 байта
Принимает ввод в формате
f[B][P]
.Мы должны использовать 4 байта
x
для создания вложенной функции. Приоритет
(\[Function]
) и//
работает так, что выражение эквивалентно этому:Нам нужно,
N
потому что по умолчанию Mathematica сортирует по структуре выражения, а не по значению:источник
C # (.NET Core) ,
685753 +2318 байт-11 байт благодаря Emigna
Количество байтов также включает в себя
Попробуйте онлайн!
Очки считаются коллекциями целых. Объяснение:
источник
JavaScript (ES6),
7271 байтЭтот ответ не короче ответа Нейла , но я решил опубликовать его, чтобы продемонстрировать использование
Math.hypot()
, которое было представлено в ES6.Принимает ввод в синтаксисе карри
(p)(a)
, где p = [x, y, z] - базовая точка, а a - массив других точек.Показать фрагмент кода
источник
k , 14 байтов
Попробуйте онлайн!
Также это работает для n измерений и не ограничивается 3.
источник
Джапт ,
109 байт-1 байт благодаря @Shaggy
Принимает точки в виде массива из трех элементов, а базовая точка - в виде одного массива в указанном порядке. Не принимает аргумент размера.
Попробуйте онлайн! или запустить огромный контрольный пример с
-R
для вывода одной вx,y,z
каждой строке.объяснение
источник
í
принять аргументы в обратном порядке, это довольно мило. Я тоже думаю, что это должно работать; Я буду запускать некоторые другие тестовые случаи и редактировать, когда вернусь к компьютеру.-
илиn
также будет работать вместоa
.MATL , 7 байт
Входные данные: матрица из 3 столбцов с точками в виде строк и вектор с 3 столбцами с базовой точкой.
Попробуйте это в MATL Online!
объяснение
источник
Желе , 5 байт
Сохранено 1 байт, благодаря Leaky Nun .
Попробуйте онлайн!
объяснение
источник
ạS¥Þ
(не заметили ваш ответ перед отправкой моего).ạ²SµÞ
Perl 6 , 35 байт (33 символа)
Попробуйте онлайн!
Объяснение: Это берет список с координатами базовой точки (вызываемой
@b
), затем список списков с координатами других точек (вызываемой@p
). В блоке вы можете использовать их на лету, используя^
символ. Каждая из^
переменных d соответствует одному аргументу. (Они отсортированы в алфавитном порядке, поэтому@^b
1-й аргумент и@^p
2-й.) После одного использования этого символа вы можете использовать переменную как обычно.Заявление
@^b
просто для того, чтобы сказать, что блок будет принимать аргумент базовой точки, который используется только внутри блока сортировки. (В противном случае он будет ссылаться на аргумент блока сортировки.) Метод.sort
может принимать один аргумент. Если это блок с 1 аргументом (как здесь), массив сортируется в соответствии со значениями этой функции. Сам блок просто берет каждую точку по очереди и архивирует ее с помощью минуса (Z-
) с координатами базовой точки. Затем мы возводим в квадрат все элементы в списке»²
и суммируем их, используя[+]
.В качестве дополнительного бонуса, это будет работать и с координатами с плавающей точкой, и в любом измерении (если, конечно, вы предоставляете одинаковое количество координат для всех точек, это будет правильно).
Это больше не действует. Я оставляю это здесь просто для удовольствия.
Perl 6 , 24 байта - только шутка!
Попробуйте онлайн!
Поскольку в OP не указывается, какая метрика должна использоваться, в этом представлении выбирается дискретная метрика. В этой метрике расстояние между двумя точками равно 0, если они идентичны, и 1, если они не совпадают. Легко проверить, что это действительно метрика (если ρ (A, B) - это расстояние от A до B, мы требуем, чтобы 1) ρ (A, B) = 0 тогда и только тогда, когда A = B, 2) ρ (A, B ) = ρ (B, A), 3) ρ (A, B) + ρ (B, C) ≥ ρ (A, C) («неравенство треугольника»)).
Это может быть, вероятно, гораздо больше, но я не имею в виду это серьезно.
источник
<5 5 5>,(<5 5 10>,<6 5 5>)
. Списки сортируются не по сумме, а по поэлементному сравнению. Тебе нужноsum
где-то.Котлин 1,1, 58 байт
украшенный
Тестовое задание
источник
Java 8,
194 + 31214169163123112106 + 19109103 байтаПопробуйте онлайн!
источник
base=[2,3,3], points=[4,3,3],[1,3,4]
. Ваш результат[4,3,3], [1,3,4]
пока правильный[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 байт), принимая вList<int[]>
качестве параметра вместоint[][]
.pow
работает+=
без актеров, не в большинстве других случаев. Приятно знать!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 байт
Попробуйте онлайн: демонстрация
Объяснение:
источник
Bad Request: Request Line is too large (7005 > 4094)
. Вы должны сделать свой тестовый набор меньше, чтобы соответствовать максимальному размеру ссылки.Perl 5 , 90 байт
Попробуйте онлайн!
Входными данными является список точек, разделенных символом новой строки, первый из которых является базовой, а последний - завершающим. Скобки (
[]
) вокруг координат необязательны.источник