Dalam deret Fibonacci bergantian, Anda pertama kali mulai dengan 1
dan 1
seperti biasa.
Namun, alih-alih selalu menambahkan dua nilai terakhir untuk mendapatkan angka berikutnya, Anda bergantian mulai dengan menambahkan, dan setiap kali Anda kurangi saja.
Urutannya dimulai seperti ini:
1
1
2 # 1 + 1
-1 # 1 - 2
1 # 2 + -1
-2 # -1 - 1
-1 # 1 + -2
-1 # -2 - -1
-2 # -1 + -1
1 # -1 - -2
-1 # -2 + 1
2 # 1 - -1
1 # -1 + 2
1 # 2 - 1
dll.
Perhatikan bahwa setelah dimulai kembali setelah sampai ke 1
dan 1
lagi.
Diberi angka N , cetak suku ke- N dari urutan fibonacci yang bergantian.
Ingat, ini adalah kode-golf , jadi kode dengan jumlah byte terkecil menang.
true
untuk1
?1
nilai pertama dihitung sebagai nilai awal untuk output? Atau apakah kita mulai langsung dengan2
?Jawaban:
JavaScript (ES6), 25 byte
Diindeks 0. Anda dapat mempersingkat string dengan versi yang sedikit rekursif, meskipun menambahkan 6 byte:
Ini masih lebih pendek dari rumus rekursif definitif:
sumber
Python, 31 byte
Tidak repot mencoba menghitung nilainya. Lihat saja dalam daftar peroidic-12 panjang
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
, yang dikompresi di basis 5.Bandingkan dengan solusi rekursif (37 byte) dengan
True
untuk 1:atau ke penyimpanan string
atau upaya ekspresi aritmatika.
sumber
Oasis , 10 byte
Mengingatkan saya untuk mengimplementasikan beberapa lebih built-in: p. Masukan diindeks 0 .
Kode:
Versi yang diterjemahkan:
Dan menghitung jangka ke- n .
Cobalah online!
sumber
05AB1E , 10 byte
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
Pyth - 13 byte
Basis dikodekan seri siklus sekali, modular diindeks.
Cobalah online di sini .
sumber
Jelly, 12 byte
TryItOnline!
Berbasis 1, diberi nilai pertama dan kedua adalah
1
.Tidak yakin apakah ini lebih pendek, tetapi untuk ini saya mencatat bahwa seri memiliki periode 12:
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
Jadi, saya mengambilnya dan menambahkan
2
untuk memberi[3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
lalu mengonversinya sebagai angka dasar
5
ke basis250
, untuk memberikan:[11, 197, 140, 84]
(yang mana
184222584
).sumber
Haskell,
3326 bytePendekatan rekursif. Diindeks 0. Cobalah di Ideone.
Disimpan 7 byte berkat xnor .
Pemakaian:
sumber
a!b=a:b:(a+b)!(-a)
.Mathematica, 40 byte
Hanya membuat tabel pencarian dan mengaksesnya secara siklis, seperti dalam jawaban ETHproductions. Fungsi yang tidak disebutkan namanya, 1-diindeks.
sumber
MATL ,
171615 byteInput berbasis 1.
Cobalah online!
Penjelasan
Urutannya memiliki periode
[1 1 2 -1 1 -2 -1 -1 -2 1 -1 2]
.sumber
WinDbg, 26 byte
Input diteruskan melalui pseudo-register
$t0
. Diindeks 0. +2 dari setiap istilah dalam urutan disimpan dalam pembuatan 3 bit85824331b
.Bagaimana itu bekerja:
Output sampel, loop mencetak 14 nilai pertama dari urutan:
sumber
Java, 32 byte
Karena ini adalah Java, jawabannya adalah 0-diindeks.
Pengujian dan ungolfed:
Uji Ideone
sumber
Mathematica,
454138 byteTerima kasih kepada @MartinEnder selama 3 byte.
Diindeks 0.
Pemakaian
sumber
±
bukan fungsia
.Perl 6 ,
39 3532 bytesumber
C #, 117 Bytes
Golf:
Tidak Disatukan:
Pengujian:
sumber
public int A(int n)
juga sekarangn=>
, Anda dapat menghapus kurung kurawal di sekitar untuk pernyataan yang menyimpan 2 byte, Anda dapat pra menambahkan selisihi
dalam loop yaitu++i <= n
dan mengaturi = 2
penghematan 3 byte karena menghilangkani++
di akhir pernyataanR, 38 byte
Menggunakan solusi tabel pencarian yang terinspirasi oleh @ETHproduk JS.
Sunting: Lupa menyebutkan bahwa ini adalah indeks 1.
sumber
Sebenarnya , 22 byte
Cobalah online!
Penjelasan:
sumber
Java 7,
888279 bytegolf:
ungolfed:
Cobalah online
sumber
int
sebagai tipe pengembalian. 2. Anda dapat menyimpan byte dengan memindahkan penugasan 0 ke deklarasi i:int c,i=0
andfor(;i<n;){
. 3. Anda dapat menghapus tanda kurung di sekitar kondisi operator ternary.DC, 55 byte
Diindeks 0.
Daftar d menyimpan indeks nilai. Mendaftar dan menghitung jumlah iterasi yang diselesaikan. Daftar r menyimpan makro utama. Daftarkan y menyimpan nilai nanti dalam urutan, sementara tumpukan berisi nilai sebelumnya dalam urutan.
Penjelasan visual tentang apa yang terjadi dalam lingkaran besar (dengan asumsi penambahan):
Pemeriksaan untuk menentukan apakah menambah atau mengurangi mengambil modulo counter dua dan menggunakan trik ini untuk membuat konstruksi if then else.
Pada akhirnya tumpukan berisi angka tunggal, nilai yang diinginkan, yang dicetak bersama
p
.(Saya masih baru
dc
, jadi saya berharap ada beberapa perbaikan yang jelas dilakukan di sini.)sumber
ForceLang , 153 byte
sumber
Turtlèd , 35 byte
0 diindeks
Penjelasan:
Cobalah online!
sumber
ABCR, 43 byte
Penjelasan: bagian pertama (
)AAB)ABB..A))A..A)AA(ABB.)A+A)))A
) mengatur antrian A untuk memuat [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], menjaga semua antrian lainnya kosong .iB
menyimpan istilah yang kita inginkan, dan perulangan5aAb(Bx
siklus melalui antrian yang berkali-kali.o
mencetak bagian depan antrian sebagai angka, yang kemudian akan menjadi jawaban yang kita inginkan.sumber
Batch, 49 byte
Mengambil input sebagai parameter baris perintah. Penjelasan: Formulir tertutup menggunakan pengamatan berikut:
Karena itu kami mulai dengan mengurangi modulo 12 (untuk menyimpan 2 byte). Kami kemudian mengurangi modulo tiga dan membalikkan hasilnya, yaitu 1 untuk kelipatan 3 atau 0 sebaliknya. Kami kemudian bitwise bukan nilai itu, memberi kami -2 untuk kelipatan 3 atau -1 sebaliknya. Kami kemudian mengurangi modulo 5 dan secara terpisah membaginya dengan 4, memberikan nol untuk istilah 1, 2, 3, 5, 10 dan 12 (0). Pembalikan dan peniadaan memberi kita -1 untuk nilai-nilai itu dan nol untuk nilai-nilai lain. Kami kemudian bitwise atau itu dengan 1 dan kalikan dengan perhitungan sebelumnya.
sumber
TI-Basic, 26 byte
Sayangnya, pendekatannya sangat tidak menarik. Saya tidak dapat menemukan yang lebih pendek. Daftar ini diindeks 1.
sumber
C #,
7371 byteIni menggunakan nilai terindeks 0 dari n.
Versi yang diformat:
sumber