Набор циклических разностей представляет собой набор натуральных чисел с уникальным свойством:
- Позвольте
n
быть наибольшим целым числом в множестве. - Позвольте
r
быть любое целое число (не обязательно в наборе) больше 0, но меньше или равноn/2
. - Пусть
k
будет множество решений для ,(b - a) % n = r
гдеa
иb
какие элементы набора. Каждое решение - упорядоченная пара(a,b)
. (Также обратите внимание, что эта версия по модулю делает отрицательные числа положительными, добавляяn
к нему, в отличие от реализаций во многих языках.) - Наконец, если и только если это циклический набор разностей, значение
k
не зависит от вашего выбораr
. То есть все значенияr
дают одинаковое количество решений вышеуказанной конгруэнтности.
Это можно проиллюстрировать на следующем примере:
Cyclic difference set: {4,5,6,8,9,11}
0 < r <= 11/2, so r = 1,2,3,4,5
r=1: (4,5) (5,6) (8,9)
r=2: (4,6) (6,8) (9,11)
r=3: (5,8) (6,9) (8,11)
r=4: (4,8) (5,9) (11,4) since (4-11)%11=(-7)%11=4
r=5: (4,9) (6,11) (11,5)
Каждое значение r
имеет одинаковое количество решений, в данном случае 3, так что это набор циклических разностей.
вход
На входе будет список положительных чисел. Поскольку это свойство set, предположим, что входные данные не отсортированы. Можно предположить, что n
это как минимум 2
, хотя k
может быть и ноль.
Выход
Ваша программа / функция должна вывести истинное значение, если набор представляет собой набор циклических разностей, или значение Ложного в противном случае.
Тестовые случаи
Допустимые циклические разности:
10,12,17,18,21
7,5,4
57,1,5,7,17,35,38,49
1,24,35,38,40,53,86,108,114,118,135,144,185,210,254,266,273
16,3,19,4,8,10,15,5,6
8,23,11,12,15,2,3,5,7,17,1
( источник данных , хотя их соглашение отличается)
Неверные циклические разности:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
code-golf
number
decision-problem
number-theory
PhiNotPi
источник
источник
a
иb
быть тем же участником (не обязательноa ≠ b
)?b
иa
то же число, то(b-a)%n = 0
, но 0 не является одним из значений, для которых вы ищете решения. Так что нет явного запрета на их одинаковое число, но они никогда не будут.7 7 7
был неверный ввод. Набор не повторяет значения7 7 7
был запрошен другим пользователем, но я удалил его, потому что это не набор.r
по0 < r <= max(input)/2
, но вместо этого ,0 < r < max(input)
потому что мы можем получитьr > max(input)/2
случаи, просто перевернув вычитание вr <= max(input)/2
случаях.Ответы:
Желе ,
147 байтПопробуйте онлайн!
Как это устроено
источник
Шелуха , 13 байт
Попробуйте онлайн!
Три надстрочных знака 1 кажутся расточительными ...
объяснение
источник
Wolfram Language (Mathematica) ,
5352 байтаПопробуйте онлайн!
Обратите внимание, что мы не должны разделить максимальный элемент на два из - за симметрии (мы можем проверить подсчет все модули
1
кmax(input) - 1
).объяснение
Возьмите все длины-2 перестановки ввода.
Найди отличия каждого
Модифицируйте результат по максимальному элементу ввода.
Найдите частоты каждого элемента.
Верните, все ли числа одинаковы.
источник
Питон 3 ,
868481 байт-3 байта спасибо JungHwan Min
Попробуйте онлайн!
источник
JavaScript (ES6), 87 байт
Возвращает 0 или 1 .
Контрольные примеры
Показать фрагмент кода
источник
Perl
686766 байтВключает
+2
в себяap
источник
Python 3 , 74 байта
Попробуйте онлайн!
источник
Рубин , 81 байт
Попробуйте онлайн!
Ungolfed:
источник
Haskell, 84 байта
l - это функция, которая выполняет проверку. Он просто вычисляет все различия и считает.
источник
let
в паттерне охраны вместоwhere
сохранения байта: попробуйте онлайн!