Anda mungkin semua tahu urutan fibonacci:
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1
Tugas Anda sesederhana mungkin:
- Mengingat bilangan bulat
N
menghitungfibonacci(n)
tapi di sini adalah twist:
- Juga lakukan negatif
N
Tunggu. Apa?
fibonacci(1)=fibonacci(0)+fibonacci(-1)
begitu
fibonacci(-1)=1
dan
fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1
dan seterusnya...
- Ini adalah kode-golf sehingga program terpendek dalam byte menang.
- Anda dapat mengirimkan fungsi atau program penuh
- N ada di [-100.100]
Testcase di CSV:
-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21
Petunjuk:
n <0 dan n & 1 == 0:
fibonacci(n)=fibonacci(abs(n))*-1
Jawaban:
Mathematica, 9 byte
Ya, fungsi bawaan ini mendukung angka negatif.
sumber
Oktaf, 20 byte
Cobalah online!
Penjelasan
Ini memanfaatkan fakta bahwa deret fibonacci
f(n)
dapat ditulis sebagai (ini harus menjadi notasi vektor matriks):Secara rekursif:
Secara eksplisit:
Ini berarti bahwa entri kanan atas dari matriks ini dengan kekuatan
n
adalah nilai yangf(n)
kami cari. Jelas kita juga bisa membalikkan matriks ini karena memiliki peringkat penuh, dan hubungannya masih menggambarkan relasi perulangan yang sama. Itu berarti ini juga berfungsi untuk input negatif.sumber
ans(-6)
dimaksudkan untuk menjadi positif?Maksima, 3 byte
mendukung angka positif dan negatif.
Cobalah (tempel) di CESGA - Maxima on line
sumber
Python, 43 byte
Formula langsung dengan rasio emas
g
. Denganf
fungsi di atas:Alt panjang yang sama, hanya alias akar kuadrat dari 5:
Saya tidak melihat cara untuk membuat fungsi rekursif yang dapat bersaing dengan ini. Upaya dengan golf ringan selama 57 byte:
Sebagai perbandingan, metode berulang (60 byte dalam Python 2):
Atau, untuk 58 byte:
sumber
JavaScript (ES6), 42 byte
Uji
Tampilkan cuplikan kode
sumber
MATL ,
119 byteSaya senang denganTerima kasih @LuisMendo untuk -2 byte =)[3,2]
, yang pasti bisa golf, jika ada yang tahu cara tolong beri tahu saya =) (Ini juga akan bekerja dengan[1,3]
.)Ini menggunakan pendekatan yang sama dengan penjawab Octave . Tetapi untuk menghasilkan matriks
kita hanya mengonversi angka
3
dan2
dari desimal ke biner (yaitu11
dan10
).Cobalah online!
sumber
JavaScript (ES7) 37 byte
Menggunakan Formula Binet .
Output ini
n
th Fibonacci nomor + -0.0000000000000005
.sumber
**
membutuhkan ES7.1-p
alih-alih-1/p
seharusnya bekerja untuk penghematan yang sama.Jolf, 2 byte
Coba di sini!
The fibonacci builtin, diimplementasikan menggunakan
phi
rumus.sumber
Haskell, 51 byte
sumber
,
bukannya&&
:even z,z<0
.PowerShell , 112 Bytes
Panggilan Demo:
Output dari Demo:
sumber
Lithp , 88 byte
Pandanganku pada semua tanda kurung itu .
Cobalah online!
Tidak terlalu kecil kok. Saat ini ada bug penguraian yang mengharuskan seseorang untuk menggunakan
(get N)
atau(+ N)
bukan hanyaN
. Saya memilih yang lebih kecil. Namun saya tidak berpikir ada sesuatu yang bisa dilakukan lebih jauh untuk golf ini.sumber