Özel Bir Fibonacci Dizisi


25

Fibonacci dizisi buralarda oldukça iyi bilinen bir şeydir. Heck, hatta kendi etiketi var. Ancak, tüm bunlar için köklerimize bağlı kalmaktan eminiz 1, 1, ...(ya da öyle 0, 1, ...mi? Asla bilemeyiz ...). Bu zorlukla, kurallar aynıdır, ancak nFibonacci dizisindeki üçüncü maddeyi almak yerine n, Fibonacci-esque dizisindeki ilk maddeyi alacaksınız x, y, ....

Giriş

Üç tamsayı, istediğiniz sırada. nÇıktınızın dizisindeki terimin dizinidir (0 veya 1 dizinlenir). xve yşu anki programınızdaki Fibonacci dizisindeki ilk iki öğe.

Çıktı

nİle başlayan Fibonacci sırayla inci terimi x, y.

Test Kılıfları

(0 endeksli)

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 endeksli)

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

Uyarılar

Varsayın 0 <= x <= y.

Lütfen giriş sıranızı not edin (sabit olmalıdır).


Giriş olarak bir liste alabilir miyiz?
Business Cat,

@BusinessCat demek istiyorsun [1, 2, 3]? Evet. 3 tamsayı kabul etmek için neye ihtiyacınız varsa.
Stephen

@StephenS nasıl gibi bir giriş alma konusunda n,[x,y]nerede nbir sayıdır ve xve ysayılardır bir listede? Bu muhtemelen biraz fazla esnek olsa da;)
Tom

1
@ CAD97 Onları ekleyeceğim, onlar hakkında unutmuştum :)
Stephen

Yanıtlar:


15

Jöle , 3 bayt

+¡ạ

Alır x , y ve n, sırayla, ayrı komut satırı bağımsız değişkenleri olarak (endeksli 0).

Çevrimiçi deneyin!

Nasıl çalışır

+¡ạ  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 bayt

l~{_@+}*;

Çevrimiçi deneyin!

Giriş formatı "xy n" dir. Hâlâ bu işte asılsızım, bu yüzden% 100 eminim ki bunu yapmanın daha iyi yolları var, ama lütfen bana "bunu yap" diyerek yerine cevabı kendim bulabilmem için bana sadece ipucu vermeye çalışın. daha iyi. Teşekkürler!


1
ririri2 bayta kısaltılabilir. fI1 bayta kısaltılabilir.
Dennis,

6
PPCG'ye Hoşgeldiniz!
Martin Ender

@Dennis geliştirildi! Teşekkür ederim! Ve hoşgeldin için teşekkürler.
FrodCube


9

JavaScript (ES6), 27 26 bayt

Hiçbir şey fantezi, sadece 0 & 1 başlangıç ​​değerleri kaldırıldı, standart bir JS Fibonacci işlevi.

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

Dene

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 bayt

0 endeksli
Çevrimiçi deneyin

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

Diğer bazı cevaplardan farklı olarak yineleme / yığın limitine tabi değilsiniz. İyi numara.
ShreevatsaR

@ShreevatsaR Teşekkürler! Fakat özyinelemeli lambda beni yine de dövüyor: D
Ölü Ölüm

5

Haskell , 30 bayt

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

Çevrimiçi deneyin! 0 endeksli. Olarak kullanımı (x#y)n, örneğin, (0#1)5orijinal dizi beşinci elemanı için.

Haskell'de Fibonacci dizisini elde etmenin en muhtemel en kısa yolu , diziyi içeren f=0:scanl(+)1fsonsuz bir liste tanımlamaktır f=[0,1,1,2,3,5,8,...]. Takma 0ve 1bağımsız değişken xve yverimleri özel sekansı. (f!!)o zaman nth elemanını döndüren bir fonksiyondur f.




4

Brain-Flak , 38 bayt

{({}[()]<(({}<>)<>{}<(<>{}<>)>)>)}{}{}

Çevrimiçi deneyin!

{({}[()]<                      >)}     # For n .. 0
         (({}<>)<>            )        # Copy TOS to the other stack and add it to...
                  {}                   # The second value
                    <(<>{}<>)>         # Copy what was TOS back
                                  {}{} # Pop the counter and the n+1th result

4

Ruby, 27 bayt

->a,b,n{n.times{b=a+a=b};a}

3

Jöle , 6 bayt

;SḊµ¡I

Çevrimiçi deneyin!

açıklama

   µ¡  - 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 bayt

ēB)Ė

1 endeksli

yorumlayıcı

açıklama

Giriş olarak alınan n,[x,y]

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



2

Braingolf , 15 bayt

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

_; Braingolf'un en son sürümünde artık gerekli değildir, ancak bu ~ 5 dakika önce olduğu için rekabet edemez.



2

MATL , 7 bayt

:"wy+]x

Çıktı 0 tabanlıdır.

Denemek MATL Online'da !

açıklama

Girişlerin gösterilmesine izin verin n(dizin) a,, b(başlangıç ​​terimleri).

:"     % 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 bayt

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

Basit bir özyinelemeli işlev. Tuhaftır, bu atamak zorunda değildir, çünkü (yerleşik ins olmadan) düzenli Fibonacci dizisi için elde edebilirsiniz şey daha kısadır 1hem xve y= P

n+1İlk değerler dahil dizinin sayılarını hesaplar . Her tekrarlama n-1ne zaman ile hesaplanır ve durdurulur n==0. İki sayının en düşüğü daha sonra döndürülür, n-th değerini geri verir.



2

PHP> = 7.1, 55 Bayt

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

Çevrimiçi sürüm

PHP> = 7.1, 73 Bayt

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

Çevrimiçi sürüm


1
Garip PHP'nin değerlendirme amacıyla yararlanarak: $y=+$x+$x=$y. Ayrıca, sadece $n--yerine kullanabilirsiniz $i++<$n.
user63956

2

Ortak Lisp, 49 Bayt, 0 dizinli

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

Lisp noob, bu yüzden herhangi bir ipucu takdir edilecektir;

Açıklama:

(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

br ** nfuck, 39 29 bayt

-10 için @JoKing'e teşekkürler!

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

TIO bunun için özellikle iyi çalışmayacak (ya da sayılar içeren bir soruna herhangi bir BF çözümü için). @ Timwi'nin Ezoterik'in (veya KÇ'nin kendiniz tarafından uygulandığını) şiddetle tavsiye ediyorum .

Alır xsonra y, o zaman n. 0 endeksli. Sınırlandırılmamış veya sarma bir bant varsayar.

açıklama

,<,<,            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).

Sadece n'i hareket ettirirken neden x ve y'yi hareket ettiriyorsunuz? Çevrimiçi Deneyin
Jo King

@JoKing Bunu göz önünde bulundurun (ancak daha uzun süre kendi başıma), ancak OP " -1-indexing" işlemine izin vermediği sürece pek işe yaramadı .
Khuldraeseth na'Barya

Oh, sadece >sonuna ekle veya x ve y sırasını değiştir
Jo King

@JoKing Avucum şu anda suratıma oldukça sert vurdu. Teşekkürler!
Khuldraeseth na'Barya

Programlama dilinin ismindeki ikinci kelimeyi neden "beyin" olarak sansürlemekle uğraşmadınız?
MilkyWay90


1

05AB1E , 9 bayt

`©GDŠ+}®@

Çevrimiçi deneyin!

açıklama

`           # split inputs as separate to stack
 ©          # store n in register
  G         # n-1 times do
   D        # duplicate top of stack
    Š       # move down 2 places on stack
     +      # add top 2 values of stack
      }     # end loop
       ®@   # get the value nth value from the bottom of stack



1

Aksiyom, 88 57 bayt

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

bu önerilen testi geçecektir (0 endeksli)

(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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.