Последовательность Секереса

9

Определение

  • a(1) = 1
  • a(2) = 2
  • a(n)наименьшее число, k>a(n-1)которое избегает любой 3-членной арифметической прогрессии в a(1), a(2), ..., a(n-1), k.
  • Другими словами, a(n)это наименьшее число k>a(n-1)такое, что там не существует x, yгде 0<x<y<nи a(y)-a(x) = k-a(y).

Проработанный пример

Для n=5:

У нас есть a(1), a(2), a(3), a(4) = 1, 2, 4, 5

Если a(5)=6, то 2, 4, 6сформируйте арифметическую прогрессию.

Если a(5)=7, то 1, 4, 7сформируйте арифметическую прогрессию.

Если a(5)=8, то 2, 5, 8сформируйте арифметическую прогрессию.

Если a(5)=9, то 1, 5, 9сформируйте арифметическую прогрессию.

Если a(5)=10арифметическая прогрессия не найдена.

Поэтому a(5)=10.

задача

Учитывая n, выходной a(n).

Спекуляции

  • n будет положительным целым числом.
  • Вы можете использовать 0-indexed вместо 1-indexed, в этом случае nможет быть 0. Пожалуйста, укажите это в своем ответе, если вы используете 0-indexed.

счет

Поскольку мы пытаемся избежать 3-членной арифметической прогрессии, а 3 - это небольшое число, ваш код должен быть как можно меньшим (то есть коротким) с точки зрения количества байтов.

Testcases

Тестовые случаи 1-индексированы. Вы можете использовать 0-индексированный, но, если вы это сделаете, укажите это в своем ответе.

1     1
2     2
3     4
4     5
5     10
6     11
7     13
8     14
9     28
10    29
11    31
12    32
13    37
14    38
15    40
16    41
17    82
18    83
19    85
20    86
10000 1679657

Ссылки

Дрянная Монахиня
источник
2
Связанные с. (Если я правильно понимаю ваш вызов.)
Мартин Эндер
@MartinEnder Вы правильно поняли мою задачу.
Утренняя монахиня

Ответы:

8

Желе , 4 байта

Bḅ3‘

Попробуйте онлайн! или проверьте все контрольные примеры .

Как это работает

При этом используется индексирование на основе 0 и основное определение из OEIS :

Последовательность Секереса: a (n) -1 в троице = n-1 в двоичном

Bḅ3‘  Main link. Argument: n

B     Convert n to binary.
 ḅ3   Convert from ternary to integer.
   ‘  Increment the result.
Деннис
источник
6

Haskell, 37 36 32 байта

Используя данную формулу в записи OEIS, используя индексы на основе 0. Спасибо @nimi за 4 байта!

a 0=1;a m=3*a(div m 2)-2+mod m 2
flawr
источник
3

Python 3, 28 байт

lambda n:int(bin(n)[2:],3)+1

Анонимная функция, которая принимает входные данные через аргумент и возвращает результат. Это с нулевым индексом.

Как это работает

lambda n    Anonymous function with input zero-indexed term index n
bin(n)      Convert n to a binary string..
...[2:]     ...remove `0b` from beginning...
int(...,3)  ...convert from base-3 to decimal...
...+1       ...increment...
:...        and return

Попробуйте это на Ideone

TheBikingViking
источник
2

Python 3, 113 байт

def f(n):
 i=1;a=[]
 for _ in range(n):
  while any(i+x in[y*2for y in a]for x in a):i+=1
  a+=[i]
 return a[n-1]

Идео это!

Дрянная Монахиня
источник
2

Рубин, 28 24 байта

Используя тот же метод, что и Деннис, с индексами на основе 0:

->n{n.to_s(2).to_i(3)+1}

Запустите тестовые случаи на repl.it: https://repl.it/Cif8/1

Иордания
источник
0

Java 8, 52 46 байт

0 проиндексировано.

i->Integer.valueOf(Integer.toString(i,2),3)+1;
Джастин
источник
Тебе не нужна, returnно тебе нужна точка с запятой
Leaky Nun
Этот ответ, который говорит, что точки с запятой не учитываются; Я мог бы изменить это в любом случае, но считается ли точка с запятой консенсусом?
Джастин
Эх, вот что они мне сказали. Я не знаю, если консенсус как таковой.
Утренняя монахиня
Хорошо, нет возврата плюс точка с запятой в любом случае короче, чем раньше :)
Джастин