Гольф - власна послідовність Фібоначчі


25

Послідовність Фібоначчі тут досить відома річ. Чорт забирай, у нього навіть є власний тег. Однак при всьому цьому ми впевнені, що ми хочемо дотримуватися своїх коренів 1, 1, ...(чи це 0, 1, ...? Ми може ніколи не дізнаємось ...). У цьому виклику правила однакові, але замість того, щоб отримати цей nелемент у послідовності Фібоначчі, ви отримаєте nго елемент у послідовності Фібоначчі, починаючи з x, y, ....

Вхідні дані

Три цілі числа в будь-якому порядку, який ви хочете. n- індекс (0 або 1 індексований) терміна в послідовності для вашого виводу. xі yє першими двома пунктами послідовності фібоначчі поточної програми.

Вихідні дані

n- Й член послідовності Фібоначчі , починаючи з x, y.

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

(0-індексовано)

n   x     y     out
5   0     0     0
6   0     1     8
6   1     1     13
2   5     5     10
10  2     2     178
3   3     10    23
13  2308  4261  1325165
0   0     1     0
1   0     1     1

(1-індексований)

n   x     y     out
6   0     0     0
7   0     1     8
7   1     1     13
3   5     5     10
11  2     2     178
4   3     10    23
14  2308  4261  1325165
1   0     1     0
2   0     1     1

Коваджі

Припустимо 0 <= x <= y.

Зверніть увагу, що ваше замовлення на введення (повинно бути постійним).


Чи можемо ми взяти список як вхідний?
Ділова кішка

@BusinessCat ти маєш на увазі, як [1, 2, 3]? Так. Все, що вам потрібно, щоб прийняти 3 цілих числа.
Стефан

@StephenS Як щодо прийняття вводу як n,[x,y]де nє число, і xчи yє числа у списку? Це, мабуть, трохи надто гнучко;)
Том

1
@ CAD97 Я додам їх, я про них забув :)
Стівен

Відповіді:


15

Желе , 3 байти

+¡ạ

Приймає x , y і n (0-індексований) як окремі аргументи командного рядка в такому порядку.

Спробуйте в Інтернеті!

Як це працює

+¡ạ  Main link. Left argument: x. Right argument: y. Third argument: n

  ạ  Yield abs(x - y) = y - x, the (-1)-th value of the Lucas sequence.
+¡   Add the quicklink's left and right argument (initially x and y-x), replacing
     the right argument with the left one and the left argument with the result.
     Do this n times and return the final value of the left argument.

11

CJam , 14 9 байт

l~{_@+}*;

Спробуйте в Інтернеті!

Формат вводу - "xy n". Я все ще ноб у цьому, тому я на 100% впевнений, що є кращі способи це зробити, але, будь ласка, замість того, щоб сказати мені "зробіть це", спробуйте лише дати мені підказки, щоб я міг знайти відповідь і отримати краще. Спасибі!


1
riririможна скоротити до 2 байт. fIможна скоротити до 1 байта.
Денніс

6
Ласкаво просимо до PPCG!
Мартін Ендер

@Dennis покращився! Дякую! І дякую за привітання.
FrodCube


9

JavaScript (ES6), 27 26 байт

Тут нічого фантазійного, лише стандартна функція JS Фібоначчі з початковими значеннями 0 та 1 знята.

n=>g=(x,y)=>n--?g(y,x+y):x

Спробуй це

f=
n=>g=(x,y)=>n--?g(y,x+y):x
o.value=f(i.value=13)(j.value=2308,k.value=4261)
oninput=_=>o.value=f(+i.value)(+j.value,+k.value)
*{font-family:sans-serif;}
input{margin:0 5px 0 0;width:50px;}
#o{width:75px;}
<label for=i>n: </label><input id=i type=number><label for=j>x: </label><input id=j type=number><label for=k>y: </label><input id=k type=number><label for=o>= </label><input id=o>


6

Python 2, 40 байт

0-індексований
Спробуйте в Інтернеті

n,a,b=input()
exec'a,b=b,a+b;'*n
print a

Ха-ха, не застосовується обмеження для рекурсії / стека на відміну від деяких інших відповідей. Гарний трюк.
ShreevatsaR

@ShreevatsaR Дякую! Але рекурсивна лямбда все одно мене б’є: D
Мертвий Поссум

5

Haskell , 30 байт

x#y=(f!!)where f=x:scanl(+)y f

Спробуйте в Інтернеті! 0-індексований. Використовуйте як (x#y)n, наприклад, (0#1)5для п'ятого елемента вихідної послідовності.

Найімовірніший найкоротший спосіб отримати послідовність Фібоначчі в Хаскеллі f=0:scanl(+)1f, який визначає нескінченний список, f=[0,1,1,2,3,5,8,...]що містить послідовність. Заміна 0і 1з аргументами xі yвиходами для користувача послідовностей. (f!!)є функцією, що повертає n-й елемент f.


5

Математика, 36 байт

LinearRecurrence[{1,1},{##2},{#+1}]&

вхід

[n, x, y]


1
Ви можете використовувати ##2замість #2,#3.
алефальфа

дуже хороша! виправлено!
J42161217




3

Желе , 6 байт

;SḊµ¡I

Спробуйте в Інтернеті!

Пояснення

   µ¡  - repeat n times (computes the n+1th and n+2th element):
 S     -  take the sum of the elements of the previous iteration (starting at (x,y))
;      -  append to the end of the previous iteration
  Ḋ    -  remove the first element
     I - Take the difference of the n+1th and n+2th to get the n-th.

3

TAESGL , 4 байти

ēB)Ė

1-індексований

Перекладач

Пояснення

Вхід прийнято як n,[x,y]

 ēB)Ė
AēB)     get implicit input "A" Fibonacci numbers where "B" is [x,y]
    Ė    pop the last item in the array

3

Пролог (SWI) , 77 байт

f(N,Y,Z):-M is N-1,f(M,X,Y),Z is X+Y.
l(N,A,B,X):-asserta(f(0,A,B)),f(N,X,_).

Спробуйте в Інтернеті!

Почав з відповіді на гольф Лікі Нун і прийшов до чогось зовсім іншого.

У цьому є правило для (Nᵗʰ, (N+1)ᵗʰ) точки зору ((N-1)ᵗʰ, Nᵗʰ)та використовує управління базами даних для затвердження 0ᵗʰ та 1 at елементів під час виконання.

f(N,X,Y)означає, що Nᵗʰелемент є, Xа (N+1)ᵗʰелемент є Y.



2

Braingolf , 15 байт

VR<2-M[R!+v]R_;

_; більше не потрібна остання версія Braingolf, однак це сталося ~ 5 хвилин тому, тому було б неконкурентоспроможним.



2

MATL , 7 байт

:"wy+]x

Вихідний результат заснований на 0.

Спробуйте в MATL Online!

Пояснення

Нехай входи позначать n(індекс) a, b(вихідні терміни).

:"     % Implicitly input n. Do this n times
       %   At this point in each iteration, the stack contains the two most
       %   recently computed terms of the sequence, say s, t. In the first
       %   iteration the stack is empty, but a, b will be implicitly input
       %   by the next statement
  w    %   Swap. The stack contains t, s
  y    %   Duplicate from below. The stack contains t, s, t
  +    %   Add. The stack contains t, s+t. These are now the new two most
       %   recently comnputed terms
]      % End
x      % Delete (we have computed one term too many). Implicitly display

2

R, 39 байт

f=function(x,y,n)'if'(n,f(y,x+y,n-1),x)

Проста рекурсивна функція. Як не дивно, це коротше всього, що я можу придумати для звичайної послідовності Фібоначчі (без вбудованих модулів), тому що для цього не потрібно призначати1 обом xі y= P

Обчислює n+1числа послідовності, включаючи початкові значення. Кожна рекурсія обчислюється за допомогою n-1та зупиняється, коли n==0. Потім повертається найнижчий з двох чисел, повертаючи n-ве значення.



2

PHP> = 7,1, 55 байт

for([,$n,$x,$y]=$argv;$n--;$x=$y,$y=$t)$t=$x+$y;echo$x;

Інтернет-версія

PHP> = 7,1, 73 байт

for([,$n,$x,$y]=$argv,$r=[$x,$y];$i<$n;)$r[]=$r[+$i]+$r[++$i];echo$r[$n];

Інтернет-версія


1
Користуючись порядку оцінки незнайомого РНР: $y=+$x+$x=$y. Також ви можете використовувати лише $n--замість $i++<$n.
user63956

2

Лист звичайний, 49 байт, 0-індексований

(defun fib(n x y)(if(= 0 n)x(fib(1- n)y(+ x y))))

Я Lisb noob, тому будь-які поради будуть вдячні;)

Пояснення:

(defun fib(n x y)                                  | Define a function taking 3 arguments
                 (if(= 0 n)x                       | If n = 0, return x
                            (fib(1- n)y(+ x y))))  | Otherwise, call fib with n-1, y, and x+y

2

Пролог (SWI) , 85 байт

l(0,X,Y,X).
l(1,X,Y,Y).
l(N,X,Y,C):-M is N-1,P is N-2,l(M,X,Y,A),l(P,X,Y,B),C is A+B.

Спробуйте в Інтернеті!

0-індексований.


Чи можете ви відредагувати цю відповідь? Я, здається, випадково спростував його в той день, коли ви його опублікували.
Esolanging Fruit

@EsolangingFruit made
Leaky Nun

2

br ** nfuck, 39 29 байт

Дякуємо @JoKing за -10!

,<,<,[>[>+>+<<-]<[>+<-]>-]>>.

TIO не працюватиме особливо добре для цього (або для будь-якого рішення BF проблеми, пов’язаної з числами). Я настійно рекомендую @ Timwi в EsotericIDE (або реалізації BF себе).

Бере x, то y, тоn . 0-індексований. Передбачає необмежену або обгорткову стрічку.

Пояснення

,<,<,            Take inputs. Tape: [n, y, x]
[                While n:
  > [->+>+<<]      Add y to x, copying it to the next cell along as well. Tape: [n, 0, x+y, y]
  < [>+<-]         Move n over. Tape: [0, n, x+y, y]
  >-               Decrement n.
] >>.            End loop. Print cell 2 to the right (x for n == 0).

Чому ви турбуєтесь переміщенням x і y, коли ви можете просто перемістити n? Спробуйте в Інтернеті
Jo King,

@JoKing Вважав, що (але довше самостійно), але це не дуже працює, якщо OP не дозволяє " -1-indexing".
Khuldraeseth na'Barya

О, просто додайте >до кінця або поміняйте порядок x і y
Jo King

@JoKing Моя долоня прямо зараз сильно вдарила мене по обличчю. Спасибі!
Khuldraeseth na'Barya

Чому ви намагалися цензурувати "мозок", але не друге слово в назві мови програмування?
MilkyWay90





1

Аксіома, 88 57 байт

f(k,x,y)==(repeat(k<=0=>break;c:=y;y:=x+y;x:=c;k:=k-1);x)

це пройде запропонований тест (0 індексовано)

(14) -> f(5,0,0)
   (14)  0
                                                 Type: NonNegativeInteger
(15) -> f(6,0,1)
   (15)  8
                                                    Type: PositiveInteger
(16) -> f(2,5,5)
   (16)  10
                                                    Type: PositiveInteger
(17) -> f(10,2,2)
   (17)  178
                                                    Type: PositiveInteger
(18) -> f(3,3,10)
   (18)  23
                                                    Type: PositiveInteger
(19) -> f(13,2308,4261)
   (19)  1325165
                                                    Type: PositiveInteger


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