Фон
Последовательность возрастающих множеств порядка определяется как последовательность целочисленных множеств S 1 , S 2 , ⋯ , S n, которая удовлетворяет следующему:
- Каждый является непустым подмножеством { 1 , 2 , ⋯ , N } .
- Для , S я ∩ S я + 1 = ∅ , т.е. любые две последовательные наборы не имеют общих элементов.
- Для среднее (среднее значение) S i строго меньше, чем среднее значение S i + 1 .
Вызов
Учитывая положительное целое число N
, выведите длину самой длинной возрастающей последовательности набора порядка N
.
Контрольные примеры
Они основаны на результатах пользователя Project Euler thundre .
1 => 1 // {1}
2 => 2 // {1} {2}
3 => 3 // {1} {2} {3}
4 => 5 // {1} {2} {1,4} {3} {4}
5 => 7 // {1} {2} {1,4} {3} {2,5} {4} {5}
6 => 10 // {1} {2} {1,4} {3} {1,4,5} {2,3,6} {4} {3,6} {5} {6}
7 => 15 // {1} {2} {1,4} {3} {1,2,7} {3,4} {1,2,5,7} {4} {1,3,6,7} {4,5} {1,6,7} {5} {4,7} {6} {7}
8 => 21
9 => 29
10 => 39
11 => 49
12 => 63
13 => 79
14 => 99
15 => 121
16 => 145
17 => 171
18 => 203
19 => 237
20 => 277
21 => 321
22 => 369
23 => 419
24 => 477
25 => 537
правила
Применяются стандартные правила игры в гольф . Побеждает самая короткая действительная передача в байтах.
премия
Эта проблема обсуждалась здесь на форуме Project Euler около 4 лет назад, но нам не удалось придумать доказуемый алгоритм за полиномиальное время (в терминах N
). Поэтому я присуждаю премию +200 к первому представлению, которое достигнет этого, или докажу его невозможность.
Ответы:
Брахилог , 28 байт
Попробуйте онлайн!
Это действительно чертовски медленно. Занимает около 30 секунд
N = 3
и не завершается через 12 минутN = 4
.объяснение
Более быстрая версия, 39 байт
На моем компьютере это займет около 50 секунд
N = 4
.Это та же самая программа, за исключением того, что мы сортируем подмножество подмножеств по среднему значению вместо случайной перестановки. Поэтому мы используем
{⟨+/l⟩/₁/₁}ᵒ
вместоp
.Нам нужно получить среднее значение с плавающей запятой, потому что я только что обнаружил нелепую ошибку, при которой числа с плавающей запятой и целые числа сравниваются не по значению, а по типу с предикатами упорядочения (именно поэтому я использую,
<ᵈ
а не<₁
сравниваю оба средних; последнее потребовало бы, чтобы трюк с двойной инверсией для работы).источник
CJam (81 байт)
Демо онлайн . Он должен выполняться для ввода
4
в разумные сроки, но я бы не стал пробовать его при более высоких значениях.рассечение
источник
JavaScript (ES6), 175 байт
Наивный и довольно медленный рекурсивный поиск. Требуется около 15 секунд, чтобы вычислить 7 первых слагаемых в TIO.
Попробуйте онлайн!
или протестируйте эту модифицированную версию, которая выводит самую длинную последовательность из возрастающего набора.
Как?
Рекурсивная часть:
источник
Python 3 ,
205197184182 байтавосемьдвадцать один байт благодаря овам .Попробуйте онлайн!
источник
sum
вместоchain.from_iterable
.