Разреженный транспортир


12

Учитывая некоторое положительное целое число 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.
Питер Тейлор

@PeterTaylor Я не понимаю, почему вы думаете, что это обман. И можете ли вы уточнить, каким образом происходит «перекрытие»? Хотя есть сходства, это две очень разные проблемы. Кроме того, это код-гольф, и проблема, с которой вы связаны, даже не включает в себя размер программы.
flawr

Это не две очень разные проблемы. Прочитайте ссылку OEIS в вашем PPPS: упомянутый «разностный набор Зингера» - это именно линейка Голомба, сгенерированная методом проективного поля, реализованным в моем ответе. Я понимаю, что метод оценки отличается.
Питер Тейлор

Ответы:


4

Желе , 13 байт

ŒPðṗ2I%QLðÐṀḢ

Попробуйте онлайн!

Как это устроено

ŒPðṗ2I%QLðÐṀḢ  Main link. Argument: n (integer)

ŒP             Powerset; generate all subsequences of [1, ..., n].
  ð       ÐṀ   Begin a dyadic chain. Call it with all subsequences S as left
               argument and n as right one. Return the array of all sequences for
               which the chain returns the maximal result, i.e., [0, ..., n-1].
   ṗ2              Cartesian power 2; generate all pairs of elements of S.
     I             Increments; map each pair [x, y] to [y-x].
      %            Map each [y-x] to [(y-x)%n].
       Q           Unique; deduplicate the array of modular difference singletons.
        L          Take the length.
         ð     Begin a new, dyadic chain.
               Left argument: S' (filted subsequences). Right argument: n
            Ḣ  Take the first element of S'.
               Since S was sorted by length, so is S', so the first element of S'
               is the shortest subsequence that satisfies the condition.

4

MATL , 20 байтов

:qGZ^!"G:q@&-G\m?@u.

Это исчерпывает память на TIO для входов за пределы 8.

Попробуйте онлайн!

Как это устроено

Это генерирует декартову степень [0 1 ... n-1]с показателем степени nи использует цикл для проверки каждого декартового кортежа. Тест состоит в вычислении всех попарных разностей элемента , если кортеж, и , видя , если эти различия по модулю nвключают все числа 0, 1, ..., n-1.

Как только декартовой кортеж, удовлетворяющий условию, будет найден, цикл завершается, и уникальные записи в этом кортеже печатаются как решение.

Это работает , потому что данные U > v , а достаточный набор кортежей с ˙U уникальных записей гарантированно будут испытаны ранее , чем любой кортеж с V уникальных записей. «Достаточный набор» означает, что если ни один из кортежей в этом наборе не является решением, то никакой другой кортеж с таким же количеством уникальных записей не является решением.

Например, для n = 3декартовых кортежей, как показано ниже, где каждый ряд является кортежем:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
 ···
2 2 1
2 2 2
  • Первый кортеж 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и до дублированных значений) и появляются первыми.
  • И т.п.

Код комментария:

:q         % Push [0 1 ... n-1], where n is the input (implicit)
GZ^        % Cartesian power with exponent n. Gives an (n^n) × n matrix
           % where each row is a Cartesian tuple
!          % Transpose. Now each Cartesian tuple is a column
!"         % For each column (that is, each Cartesian tuple)
  G:q      %   Push [0 1 ... n-1] (*)
  @        %   Push current column
  &-       %   Matrix of pairwise differences (**)
  G\       %   Modulo n, element-wise
  m        %   Ismember function: for each entry in (*), gives true iff
           %   it is present in (**)
  ?        %   If all entries are true
    @      %     Push current column
    u      %     Unique entries. This is the solution
    .      %     Break loop
           %   End (implicit)
           % End (implicit)
           % Display (implicit)

3

Stax , 26 21 байт

Åæ4&╕u◙╩►s∙Φ▬═(0~ d+Q

Запускать и отлаживать онлайн!

В данный момент онлайн-версия не 20подходит для ввода, но эта ошибка была исправлена ​​и еще не развернута в онлайн-интерпретаторе Deployed. Осторожно, это займет некоторое время, чтобы запустить 20дело.

объяснение

Оказывается, что из-за способа вычисления попарной разницы, мне не нужно беспокоиться об эквивалентности kи x-kздесь. Экономия 5 байтов.

Использует распакованную версию для объяснения.

rS{%o~{;i@c:2{E-x%mu%x<wm
r                            [0..`x`], where `x` is input
 S                           Powerset
  {%o~                       Sort by length
      {;i@             w     For each element in the powerset
          c:2                All pairs
             {    m          Map each pair `[p,q] to
              E-                 `q-p`
                x%               `(q-p)%x`
                   u%        Count of unique modulo differences
                     x<      Loop until the count of unique modulo differences is larger than the input(`n`)
                             Now we have found a valid set in the powerset
                        m    Output the members of the set,one element per line.

При обеспечении требования , что 0и 1как быть членами ответа, мы можем генерировать Powerset с [2..x]вместо , [0..x]а затем добавить 0и 1вручную к каждому элементу в Powerset. Это более эффективно, но необходимо обрабатывать ввод 1специально и стоит больше байтов.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.