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


9

Визначення

  • a(1) = 1
  • a(2) = 2
  • a(n)- найменше число, k>a(n-1)що дозволяє уникнути будь-якої трирічної арифметичної прогресії в Росії 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-індексовану замість 1-індексованої, в такому випадку nце можливо 0. Будь ласка, вкажіть це у своїй відповіді, якщо ви використовуєте 0-індексацію.

Оцінка балів

Оскільки ми намагаємось уникнути трирічної арифметичної прогресії, а 3 - це невелика кількість, ваш код повинен бути якомога меншим (тобто коротким) з точки зору підрахунку байтів.

Тестові шафи

Тестові шкали є 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 Ви правильно зрозуміли мій виклик.
Leaky Nun

Відповіді:


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

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



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

Ця відповідь, яка каже, крапки з комою, не враховується; Я міг би це змінити в будь-якому випадку, але чи вважається точка з точки з точки зору крапки з комою?
Джастін

Е, ось що вони мені сказали. Я не знаю, чи консенсус такий.
Leaky Nun

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