Последовательность сегментированных чисел или простых чисел измерения ( OEIS A002048 ) представляет собой последовательность чисел, так что каждый член является наименьшим положительным (больше нуля) числом, которое не может быть составлено из суммы предыдущих последовательных чисел, с a(0) = 1
.
пример
Для расчета a(7)
мы сначала рассчитаем a(0->6) = [1, 2, 4, 5, 8, 10, 14]
. затем мы начинаем с нуля и перебираем числа, пока не найдем одно, которое не является суммой одного или нескольких последовательных чисел в последовательности.
1 = 1
2 = 2
3 = 1 + 2
4 = 4
5 = 5
6 = 2 + 4
7 = 1 + 2 + 4
8 = 8
9 = 4 + 5
10 = 10
11 = 2 + 4 + 5
12 = 1 + 2 + 4 + 5
13 = 5 + 8
14 = 14
15 = ????
Поскольку пятнадцать не могут быть получены путем суммирования любой последовательной подпоследовательности, и каждое меньшее число может быть пятнадцатью, это следующее число в последовательности. a(7) = 15
задача
Ваша задача - взять число (стандартными методами) и вывести n-й член в этой последовательности (стандартными методами вывода). Это код-гольф, и вы будете забиты как таковые.
Тестовые случаи
0 -> 1
1 -> 2
2 -> 4
3 -> 5
4 -> 8
5 -> 10
6 -> 14
7 -> 15
8 -> 16
9 -> 21
()
чтобы сделать его правильной функцией. Частично применяется!!
раздел оператора и должен быть заключен в()
чтобы сделать его функцией. Без этого это просто фрагмент, который становится функцией (или «значением» для использования строгих терминов Haskell) с отсутствующим аргументом.filter(`notElem`scanl(+)x z)y
стоит сделать.Perl,
5049 байтовВключает +1 для
-p
Запустить с вводом на STDIN:
segmented.pl
:объяснение
@F
содержит список (отрицательных) сумм последовательных чисел, которые заканчиваются текущим последним номером. Когда обнаруживается новое число, список расширяется на 0, а затем все значения уменьшаются на новое число, сохраняя инвариант.Глобальный
%::
используется как хэш, отображающий все (отрицательные) числа, которые были просмотрены (сквозные@F
), в ненулевое значение.$\
является текущим числом и увеличивается до тех пор, пока не достигнет значения, еще не введенного в%::
.Будучи немного осторожнее с порядком, в котором все происходит, инициализация не требуется,
1
автоматически становится первым числом.Поскольку размер
@F
- это число сгенерированных чисел, его можно использовать как условие остановкиисточник
05AB1E ,
1716 байтобъяснение
Попробуйте онлайн!
Сохранено 1 байт благодаря Аднану
источник
$
вместоXs
?Желе ,
141311 байтПопробуйте онлайн!
Как это устроено
источник
Pyth -
1917 байтЧерт побери, разрушая все мои последствия. (Кол Одинаковые байт, literaly приращением
Q
:=hQesmaYf!}TsM.:Y
)Тестовый пакет .
источник
eu+Gf!}TsM.:G))hQY
Javascript,
125112110 байтСохранено 2 байта благодаря @Neil
Предыдущие ответы
112 байтов благодаря @Neil:
125 байт:
источник
b.every(c=>c-i)
я бы попробовал!b.includes(i)
или возможно сработает!a.some(b=>b.includes(i))
, пока[0,...a[k]||[]].map(v=>i+v)
мог бы заменить[i].concat((a[k]||[]).map(v=>i+v))
. Также тебе действительно нужноk
?if(!...){...}
только одно утверждение, вы можете заменить его на...||(...)
или...?0:...
.Python,
1131059280 байтПоследние байты, которые я сохранил, были вдохновлены ответом Тоня на Perl: my
F
делает то же самое, что и его@F
; мойs
делает по существу то же самое, что и его%::
.источник
JavaScript (ES6), 77 байт
В основном рекурсивный порт алгоритма ответа Perl @ TonHospel.
источник