Вопрос: Учитывая число n
≥ 2, сколько различных пар точек на n
n - мерном n x n x n x n x n x n ... x n
решетке, где координаты в диапазоне от 0
до n - 1
, это расстояние по меньшей мере n
, на части? Пары {(2,1,3,1), (3,2,1,3)}
и {(3,2,1,3), (2,1,3,1)}
не считаются отличными друг от друга, так как они состоят из одинаковых двух точек в обратном порядке. Обратите внимание, что общее количество пар растет очень быстро. Общее количество пар идет 6
, 351
, 32 640
, 4 881 250
, 1 088 367 840
и т.д.
Тестовые случаи:
2 -> 0 (all pairs are at most a distance of sqrt(2) < 2 apart)
3 -> 28 (They must either be (2,2,1) or a permutation apart, or (2,2,2) apart. Each corner
has three non-corner (2,2,1) points corresponding to it. And each corner is associated
with a corner pair that is a (2,2,2). Thus. 3.5 * 8 = 28.
4 -> 4,888
5 -> 1,501,948
6 -> 486,039,360 (I would like someone to verify this if possible)
Ваш код должен работать для n <= 5, по крайней мере, в теории. Не жестко закодируйте это, это стандартная лазейка.
code-golf
combinatorics
сфальсифицированы
источник
источник
n=15
легко привести к результатамn=20
но сильно страдает от переполненияall pairs are at most a distance of sqrt(2) apart
но это должно быть указано более четко.Ответы:
MATL , 12 байт
Попробуйте онлайн!
объяснение
источник
Желе ,
1413 байтов1 байт благодаря Денису.
Попробуйте онлайн!
Quick Maffs версия
Попробуйте онлайн!
источник
æ.`½
наÆḊ€
.n=5
, но не за одну минуту. (это может занять больше, чем возраст вселенной, будьте осторожны) Это не самый быстрый код, так зачем беспокоиться о том, чтобы ваш код работал быстро?Python 2 ,
137133 байтаМистер Xcoder & ovs: -4 байта. Попробуйте онлайн!
источник
f=
)J , 40 байт
Попробуйте онлайн!
Тайм-аут на TIO на 5, если вы используете расширенную точность (
5x
вместо5
). Я не собираюсь пытаться использовать 6 на моем компьютере, так как это, несомненно, приведет к сбою переводчика.Нужны советы по игре в гольф, в частности, часть прошлого поколения координат. Я чувствую, что должен быть способ снять некоторые крышки.
]<:[:+/&.:*:"1
может быть эквивалентно заменен на*:<:[:+/"1[:*:
.объяснение
Это объяснение сделано в REPL (три пробела указывают на команду, пробелы не указывают на вывод). Я буду готовиться к ответу.
Генерация координат
#~ #: i.@^~
дает все координаты, которые нам нужны на решетке.^~
является числом, возведенным в себя, иi.
дает диапазон [0, n), где n - его ввод.@
сочиняет эти функции.#~
копирует номер самостоятельно, например#:
преобразует свой правый аргумент в базу, указанную в массиве, указанном в качестве его левого аргумента. Количество цифр в массиве соответствует количеству цифр в этом базовом выводе (и вы можете иметь смешанную базу). Например,Таким образом, все вместе, это говорит, перечислите через все значения базы n (где n - вход) до n ^ n, эффективно давая нам наши координаты.
Получение расстояния между каждой парой
Сначала мы берем разницу каждой координаты со всеми остальными, используя
/
dyad -table и~
-reflexive. Обратите внимание, что это не учитывает тот факт, что порядок не имеет значения для пар: это создает повторяющиеся расстояния.Затем мы используем этот глагол
+/&.:*:
в каждой координате (at"1
, aka rank one). Этот глагол есть sum (+/
) под (&.:
) square (*:
). Under применяет правый глагол (квадрат), затем собирает его результаты и передает его в качестве аргумента левому глаголу (sum). Затем он применяет инверсию правого глагола (который будет квадратный корень).Неудивительно, что многие расстояния одинаковы.
Подсчет расстояний больше или равно входу
Последняя часть проверяет, больше или равно ли расстояние входному значению
]<:
. Затем все результаты суммируются с помощью+/^:_
(сумма до сходятся), считая количество истинных значений. Затем это значение делится на 2 (2%~
здесь это~
означает, что нужно поменять местами порядок аргументов%
). Причина, по которой мы можем разделить на 2, заключается в том, что для каждого истинного спаривания будет другой для перевернутого порядка, кроме пар, которые являются координатой с самим собой. Это нормально, так как это приведет к расстоянию 0.источник
+/@,@(-:@<:+/&.:*:@:-"1/~)#~#:i.@^~