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


12

Враховуючи деяке додатне ціле число n, спроектуйте транспортир з найменшою кількістю знаків, що дозволяє вимірювати всі кути, які є інтегральним кратним 2π/n(кожен в одному вимірі).

Деталі

Як вихід, ви можете вивести список цілих чисел у діапазоні 0до n-1(або 1до n), які представляють положення кожної позначки. Крім того, ви можете виводити рядок / список довжини nз а #в позиції кожної позначки та _(підкреслення), коли такої немає. (Або два різних символи, якщо це зручніше.)
Приклад: Для n = 5того, щоб виміряти всі кути 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 Я не бачу, чому ти вважаєш, що це дура. І чи можете ви детально розібратися, яким чином відбувається «перекриття»? Незважаючи на схожість, це дві дуже різні проблеми. Крім того, це кодовий гольф, і виклик, який ви пов’язали, навіть не включає розмір програми в її оцінці.
недолік

У них не дві дуже різні проблеми. Прочитайте посилання 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

Стакс , 26 21 байт

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

Запуск та налагодження в Інтернеті!

Зараз онлайн-версія не вдається ввести, 20але ця помилка була виправлена ​​та її ще потрібно розгорнути в Інтернетному інтерпретаторі . Остерігайтеся, щоб запустити 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.