Учитывая некоторое положительное целое число n
, создайте транспортир с наименьшим количеством меток, который позволит вам измерить все углы, кратные целому числу 2π/n
(каждое в одном измерении).
Детали
В качестве вывода, вы можете вывести список целых чисел в диапазоне 0
от n-1
(или 1
к n
) , которые представляют позицию каждого знака. В качестве альтернативы вы можете вывести строку / список длины n
с a #
в позиции каждой метки и a _
(подчеркивание) там, где ее нет. (Или два разных символов , если более удобно.)
Пример: Для n = 5
вас нужно точно 3 балла , чтобы быть в состоянии измерить все углы 2π/5, 4π/5, 6π/5, 8π/5, 2π
, установив (например) одной метки 0
, одной метки 2π/5
и одной метки 6π/5
. Мы можем закодировать это как список [0,1,3]
или как строку ##_#_
.
Примеры
Обратите внимание, что выходные данные не обязательно являются уникальными.
n: output:
1 [0]
2 [0,1]
3 [0,1]
4 [0,1,2]
5 [0,1,2]
6 [0,1,3]
7 [0,1,3]
8 [0,1,2,4]
9 [0,1,3,4]
10 [0,1,3,6]
11 [0,1,3,8]
20 [0,1,2,3,6,10]
PS: Это похоже на проблему разреженной линейки , но вместо линейной шкалы (с двумя концами) мы рассматриваем круговую (угловую) шкалу.
PPS: этот скрипт должен вычислять один пример набора меток для каждого n
. Попробуйте онлайн!
PPPS: Как отметил @ngn, эта проблема эквивалентна нахождению минимальной разностной базы циклической группы порядка n
. Минимальные заказы перечислены в http://oeis.org/A283297, а некоторые теоретические границы приведены в https://arxiv.org/pdf/1702.02631.pdf.
n = q^2 + q + 1
для основной властиq
.Ответы:
Желе , 13 байт
Попробуйте онлайн!
Как это устроено
источник
MATL , 20 байтов
Это исчерпывает память на TIO для входов за пределы
8
.Попробуйте онлайн!
Как это устроено
Это генерирует декартову степень
[0 1 ... n-1]
с показателем степениn
и использует цикл для проверки каждого декартового кортежа. Тест состоит в вычислении всех попарных разностей элемента , если кортеж, и , видя , если эти различия по модулюn
включают все числа0
,1
, ...,n-1
.Как только декартовой кортеж, удовлетворяющий условию, будет найден, цикл завершается, и уникальные записи в этом кортеже печатаются как решение.
Это работает , потому что данные U > v , а достаточный набор кортежей с ˙U уникальных записей гарантированно будут испытаны ранее , чем любой кортеж с V уникальных записей. «Достаточный набор» означает, что если ни один из кортежей в этом наборе не является решением, то никакой другой кортеж с таким же количеством уникальных записей не является решением.
Например, для
n = 3
декартовых кортежей, как показано ниже, где каждый ряд является кортежем:0 0 0
является единственным релевантным кортежем с1
уникальным значением. Даже если1 1 1
и2 2 2
появится намного позже,0 0 0
это решение тогда и только тогда, когда это так. Таким образом, одноэлементное множество, образованное кортежем,0 0 0
является достаточным для u =1
.0 0 1
и0 0 2
, образуют достаточное множество для u =2
; то есть они охватывают все случаи с2
уникальными значениями. Четвертый кортеж0 1 0
никогда не будет выбран в качестве решения, потому что0 0 1
будет проверен первым. Точно так же, кортеж0 2 0
никогда не будет выбран, потому что он появится позже, чем0 0 2
. Кортежи типа2 2 1
никогда не будут выбраны в качестве решения, потому что они0 0 1
эквивалентны (по модулюn
и до дублированных значений) и появляются первыми.Код комментария:
источник
Stax ,
2621 байтЗапускать и отлаживать онлайн!
В данный момент онлайн-версия неDeployed. Осторожно, это займет некоторое время, чтобы запустить20
подходит для ввода, но эта ошибка была исправлена и еще не развернута в онлайн-интерпретаторе20
дело.объяснение
Оказывается, что из-за способа вычисления попарной разницы, мне не нужно беспокоиться об эквивалентности
k
иx-k
здесь. Экономия 5 байтов.Использует распакованную версию для объяснения.
При обеспечении требования , что
0
и1
как быть членами ответа, мы можем генерировать Powerset с[2..x]
вместо ,[0..x]
а затем добавить0
и1
вручную к каждому элементу в Powerset. Это более эффективно, но необходимо обрабатывать ввод1
специально и стоит больше байтов.источник
Желе , 17 байт
Попробуйте онлайн!
-1 байт благодаря мистеру Xcoder
источник
R
.Python 2 , 148 байт
Попробуйте онлайн!
источник