Послідовності бінарних рецидивів


10

Двійкова послідовність рецидивування - це рекурсивно визначена послідовність такої форми:

Визначення послідовності бінарних рецидивів

Це узагальнення x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1послідовності Фібоначчі ( ) та послідовності Лукаса ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1).

Змагання

Беручи під увагу n, x, y, a, alpha, і beta, в будь-якому зручному форматі, виводити nй член відповідної двійковій послідовності повторення.

Правила

  • Ви можете вибрати, що послідовність має бути 1-індексованою або 0-індексованою, але ваш вибір повинен бути узгодженим у всіх вхідних даних, і ви повинні зазначити свій вибір у своїй відповіді.
  • Ви можете припустити, що недійсні дані не будуть надані (наприклад, послідовність, яка закінчується до nабо послідовність, що посилається на невизначені терміни, як-от F(-1)або F(k)де k > n). Як результат цього, xі yзавжди буде позитивним.
  • Входи та виходи завжди будуть цілими числами в межах природного цілого типу вашої мови. Якщо у вашій мові є безлімітні цілі числа, входи та виходи будуть в межах діапазону [2**31, 2**31-1](тобто діапазон для 32-бітного підписаного двох цілих чисел доповнення).
  • aзавжди буде містити точно yвказані значення (відповідно до визначення).

Випробування

Примітка: всі тестові випадки індексуються 0.

x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1, n = 6 => 13
x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1, n = 8 => 47
x = 3, y = 5, a = [2, 3, 5, 7, 11], alpha = 2, beta = 3, n = 8 => 53
x = 1, y = 3, a = [-5, 2, 3], alpha = 1, beta = 2, n = 10 => -67
x = 5, y = 7, a = [-5, 2, 3, -7, -8, 1, -9], alpha = -10, beta = -7, n = 10 => 39

Чи aвважається прийняття у зворотному порядку замовленням розумним?
Денніс

@Dennis Так, це так.
Мего

Добре, дякую за уточнення.
Денніс

Відповіді:


2

Желе , 11 байт

⁴Cịæ.⁵ṭµ¡⁶ị

Спробуйте в Інтернеті!  1  |  2  |  3  |  4  |  5 

Як це працює

⁴Cịæ.⁵ṭµ¡⁶ị  Main link. Arguments: a; [x, y]; [α, β]; n (1-based)

       µ     Combine the links to the left into a chain.
        ¡    Execute that chain n times, updating a after each execution.
⁴              Yield [x, y].
 C             Complement; yield [1 - x, 1 - y].
  ị            Retrieve the elements of a at those indices.
               Indexing is 1-based and modular in Jelly, so this retrieves
               [a[-x], a[-y]] (Python syntax).
     ⁵         Yield [α, β].
   æ.          Take the dot product of [a[-x], a[-y]] and [α, β].
         ⁶   Yield n.
          ị  Retrieve the element of a at index n.

2

Python 2, 62 байти

x,y,l,a,b=input();f=lambda n:l[n]if n<y else a*f(n-x)+b*f(n-y)

Пряме рекурсивне рішення. Всі вхідні дані беруться з STDIN, за винятком nаргументу функції, розбиття, яке дозволено за замовчуванням (хоча і суперечливо).

Там , здається, не бути спосіб зберегти байти з and/orзамість if/elseтому що l[n]може бути falsey як 0.



2

JavaScript (ES6), 51 44 байт

(x,y,z,a,b)=>g=n=>n<y?z[n]:a*g(n-x)+b*g(n-y)

Зауважте, що функція частково викривлена, напр f(1,2,[1,1],1,1)(8) повертає 34. Кошти коштували б 2 байти, щоб зробити проміжні функції незалежними одна від одної (на даний момент працює лише остання створена функція).

Редагувати: Збережено 7 байт завдяки @Mego вказуючи, що я не помітив, що масив, що передається, завжди містить перші yелементи результату.


@Mego Я знаю, що часто оглядаю деталі запитань, але це вразило мене особливо тонким.
Ніл


0

J, 43 байти

{:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.

Дано початкову послідовність доданків A , обчислює наступний додаток n разів, використовуючи параметри x , y , α і β . Після цього він вибирає n- й доданок у розширеній послідовності та виводить його як результат.

Використання

Оскільки J підтримує лише 1 або 2 аргументи, я групую всі параметри як список списків. Спочатку початкові значення A , а потім параметри x і y як список, потім параметри α і β як список, і закінчуються значенням n .

   f =: {:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.
   2 3 5 7 11;3 5;2 3;8
┌──────────┬───┬───┬─┐
│2 3 5 7 11│3 5│2 3│8│
└──────────┴───┴───┴─┘
   f 2 3 5 7 11;3 5;2 3;8
53
   f _5 2 3 _7 _8 1 _9;5 7;_10 _7;10
39
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.