Мінімальні рідкісні лінійки


20

Стандартна лінійка довжиною n має позначення відстаней у положеннях 0, 1, ..., n (у будь-яких одиницях). У розрідженої лінійки є підмножина цих знаків. Лінійка може виміряти відстань k, якщо вона має позначки в положеннях p і q з p - q = k .

Змагання

Враховуючи додатне ціле число n , виведіть мінімальну кількість знаків, необхідних у розрідженій лінійці довжиною n, щоб вона могла виміряти всі відстані 1, 2, ..., n .

Це OEIS A046693 .

Наприклад, для входу 6 вихідний сигнал є 4. А саме, лінійка з позначками на 0, 1, 4, 6 працює, як 1−0 = 1, 6−4 = 2, 4−1 = 3, 4−0 = 4, 6−1 = 5, і 6−0 = 6.

Додаткові правила

Тестові кейси

1   ->   2
2   ->   3
3   ->   3
4   ->   4
5   ->   4
6   ->   4
7   ->   5
8   ->   5
9   ->   5
10  ->   6
11  ->   6
12  ->   6
13  ->   6
14  ->   7
15  ->   7
16  ->   7
17  ->   7
18  ->   8
19  ->   8
20  ->   8
21  ->   8
22  ->   8
23  ->   8
24  ->   9
25  ->   9
26  ->   9
27  ->   9
28  ->   9
29  ->   9
30  ->  10
31  ->  10 
32  ->  10

Відповіді:


2

Желе , 14 байт

ŒcIQL
‘ŒPÇÐṀḢL

Монадічне посилання, що приймає та повертає невід’ємні цілі числа.

Спробуйте в Інтернеті! (перші 15 значень тут - неефективно)

Як?

Знаходить усі лінійки, які можна зробити за допомогою знаків від 1 до n + 1 (набір потужностей [1, n + 1]), упорядкованих за їх рахунком, і зберігає лише ті, які створюють максимальні вимірювані відстані (довжина набір відмінностей між усіма упорядкованими парами знаків), потім повертає довжину першої (тобто [одна з] найкоротшої [с]).

ŒcIQL - Link 1: number of measurable distances: list of numbers, ruler  e.g. [1,2,3,7]
Œc    - all pairs                                [[1,2],[1,3],[1,7],[2,3],[2,7],[3,7]]
  I   - incremental differences                                          [1,2,6,1,5,4]
   Q  - de-duplicate                                                       [1,2,6,5,4]
    L - length                                                                      5

‘ŒPÇÐṀḢL - Main link: number, n              e.g. 4
‘        - increment                              5
 ŒP      - power-set (implicit range of input)   [[],[1],[2],[3],[4],[5],[1,2],[1,3],[1,4],[1,5],[2,3],[2,4],[2,5],[3,4],[3,5],[4,5],[1,2,3],[1,2,4],[1,2,5],[1,3,4],[1,3,5],[1,4,5],[2,3,4],[2,3,5],[2,4,5],[3,4,5],[1,2,3,4],[1,2,3,5],[1,2,4,5],[1,3,4,5],[2,3,4,5],[1,2,3,4,5]]
    ÐṀ   - keep those maximal under:
   Ç     -   call the last link (1) as a monad   [[1,2,3,5],[1,2,4,5],[1,3,4,5],[1,2,3,4,5]]
      Ḣ  - head                                  [1,2,3,5]
       L - length                                 4



5

Піт , 14 байт

lh.Ml{-M^Z2ySh

Спробуйте тут!

Pyth , 21 19 байт

hlMf!-SQmaFd.cT2ySh

Спробуйте тут!

Як це працює

Я оновлю це після гольфу.

hSlMfqSQS {maFd.cT2ySh ~ Повна програма. Q = вхід.

                   Sh ~ Цілочисельний діапазон [1, Q + 1].
                  y ~ Powerset.
    f ~ Фільтр (використовує змінну T).
              .cT2 ~ Усі двоелементні комбінації Т.
          m ~ Карта.
           aFd ~ Зменшити на абсолютну різницю.
        S {~ Дублікат, сортування.
     qSQ ~ Дорівнює цілому діапазону [1, Q]?
  lM ~ Карта з довжиною.
hS ~ Мінімум.

Завдяки isaacg за те, що врятував байт для мого другого підходу та надихнув мене на гольф на 3 байти від мого поточного підходу!


Оскільки прилад живлення впорядкований за довжиною, перший Sне потрібен.
isaacg

@isaacg Дякую! Ваша чудова відповідь (+1) також надихнула мене, щоб зберегти 3 байти від мого нового підходу, зробивши його 14 байтами.
Містер Xcoder


4

Лушпиння , 20 18 байт

λ▼mLfȯ≡⁰u´×≠tṖ⁰)…0

Дякуємо @ H.PWiz за -2 байти!

Спробуйте в Інтернеті!

Пояснення

λ               )…0  -- lambda with argument ⁰ as [0..N]
              Ṗ⁰     -- all subsets of [0..N]
             t       -- tail (remove empty subset)
    f(      )        -- filter by following function:
           ≠         --   absolute differences
         ´×          --   of all pairs drawn from itself
        u            --   remove duplicates
      ≡⁰             --   "equal" to [0..N]
  mL                 -- map length
 ▼                   -- minimum

oa-те саме, що
H.PWiz

@ H.PWiz насправді важливо лише те, що їх довжина однакова, оскільки не може бути різниць поза межами [0..N].
Мартін Ендер

Ви, мабуть, могли навіть використовувати .
Мартін Ендер


3

Pyth, 15 байт

lhf!-SQ-M^T2yUh

Тестовий набір

Як це працює

lhf!-SQ-M^T2yUh
             Uh    [0, 1, ... n]
            y      Powerset - all possible rulers
  f                Filer rulers on
         ^T2       All pairs of marks, in both orders
       -M          Differences - (a)
     SQ            [1, ... n], the desired list of differences - (b)
    -              Remove (a) from (b)
   !               Check that there's nothing left.
 h                 The first remaining ruler (powerset is ordered by size)
l                  Length

3

Желе , 17 байт

_þ`ẎQṢw
‘ŒPçÐfRḢL

Спробуйте в Інтернеті!

Запозичені трюк з г - Xcoder в відповідь на -1.
-1 завдяки Джонатану Аллану .


Комплект живлення відсортований від найкоротшого до найдовшого, так що я думаю, що це ḢLповинно бути добре.
Джонатан Аллан

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.