Semua orang tahu urutan Fibonacci:
Anda mengambil kotak, lampirkan kotak sama dengan itu, lalu berulang kali melampirkan kotak yang panjang sisinya sama dengan panjang sisi terbesar dari persegi panjang yang dihasilkan.
Hasilnya adalah spiral kotak yang indah yang urutan bilangannya adalah deret Fibonacci :
Tetapi, bagaimana jika kita tidak ingin menggunakan kotak?
Jika kita menggunakan segitiga sama sisi — alih-alih kuadrat — dengan cara yang serupa, kita mendapatkan spiral segitiga yang sama indahnya dan urutan baru: urutan Padovan , alias A000931 :
Tugas:
Diberikan bilangan bulat positif, , output , istilah N dalam urutan Padovan ATAU persyaratan N pertama .
Asumsikan bahwa tiga syarat pertama dari urutan semuanya adalah . Dengan demikian, urutannya akan dimulai sebagai berikut:
Memasukkan:
Setiap bilangan bulat positif
Input yang tidak valid tidak harus diperhitungkan
Keluaran:
Istilah dalam urutan Padovan ATAU istilah pertama dari urutan Padovan.N
Jika istilah pertama dicetak, hasilnya bisa apa saja yang nyaman (list / array, string multi-line, dll.)
Dapat berupa -indeks atau -indeks
Test Cases:
(0-diindeks, term )
Input | Output
--------------
0 | 1
1 | 1
2 | 1
4 | 2
6 | 4
14 | 37
20 | 200
33 | 7739
(1-diindeks, istilah pertama )
Input | Output
--------------
1 | 1
3 | 1,1,1
4 | 1,1,1,2
7 | 1,1,1,2,2,3,4
10 | 1,1,1,2,2,3,4,5,7,9
12 | 1,1,1,2,2,3,4,5,7,9,12,16
Aturan:
Ini adalah kode-golf : semakin sedikit byte, semakin baik!
Celah standar dilarang.
14
(0-diindeks) ditampilkan sebagai keluaran28
sementara saya percaya itu akan menghasilkan37
a_0=1, a_1=0, a_2=0
. Akhirnya sedikit berubah karena itua_5=a_6=a_7=1
Jawaban:
Jelly , 10 byte
Cobalah online!
1-diindeks. Menghitung elemen terbesar dari: mana matriks biner dengan mudah dihitung sebagai:⎡⎣⎢010001110⎤⎦⎥n ⎡⎣⎢i s p r i m e (0)i s p r i m e (3)i s p r i m e (6)i s p r i m e (1)i s p r i m e (4)i s p r i m e (7)i s p r i m e (2)i s p r i m e (5)i s p r i m e (8)⎤⎦⎥
(Ini adalah kebetulan total.)
sumber
Oasis , 5 byte
Istilah ke -0 diindeks
Cobalah online!
Penjelasan
sumber
Jelly ,
10 98 byteTautan monadik yang menerima
n
(diindeks 0) yang menghasilkanP(n)
.Cobalah online!
Bagaimana?
ImplementsP(n)=∑⌊n2⌋i=0(i+1n−2i)
Dan di sini ada "twofer"
... metode yang sama sekali berbeda untuk 8 byte (yang ini diindeks 1, tetapi jauh lebih lambat):
sumber
Haskell , 26 byte
Cobalah online! Menghasilkan istilah ke-nol yang diindeks nol.
Saya pikir solusi rekursif "nyata" di bawah ini tidak akan ada duanya, tetapi kemudian saya menemukan ini. Ini mirip dengan ekspresi golf klasik
l=1:scanl(+)1l
untuk daftar Fibonacci yang tak terbatas, tetapi di sini perbedaan antara elemen-elemen yang berdekatan adalah istilah posisi 4 kembali. Kita bisa lebih langsung menulisl=1:1:zipWith(+)l(0:l)
, tapi itu lebih lama.Jika tantangan ini memungkinkan output daftar tanpa batas, kita dapat memotong baris pertama dan memiliki 20 byte.
27 byte
Cobalah online!
sumber
Python 2 , 30 byte
Cobalah online!
Mengembalikan istilah ke-nol yang diindeks. Output
True
untuk 1.sumber
Bahasa Wolfram (Mathematica) , 33 byte
1-diindeks, mengembalikan istilah ke-n
Cobalah online!
sumber
Oktaf / MATLAB,
3533 byteMenghasilkan n istilah pertama .
Cobalah online!
Bagaimana itu bekerja
Fungsi anonim yang mengimplementasikan filter rekursif .
'cbaa'-98
adalah bentuk yang lebih pendek untuk diproduksi[1 0 -1 -1]
.2:n<5
adalah bentuk yang lebih pendek untuk diproduksi[1 1 1 0 0 ··· 0]
( n −1 istilah).filter(1,[1 0 -1 -1],[1 1 1 0 0 ··· 0])
meneruskan input[1 1 1 0 0 ··· 0]
melalui filter waktu diskrit yang ditentukan oleh fungsi transfer dengan koefisien pembilang1
dan koefisien penyebut[1 0 -1 -1]
.sumber
J , 22 byte
-2 byte terima kasih kepada ngn dan Galen
formulir tertutup, 26 byte
Cobalah online!
berulang, 22 byte
Cobalah online!
sumber
1:
->#
: Cobalah online!1:
->1
. "merugikan" bekerja dengan kata benda di sebelah kanan, tampaknyaRetina ,
4742 byteCobalah online! Menghasilkan
n
istilah pertama pada baris yang berbeda. Penjelasan:Ganti input dengan ketentuan untuk
-2
,-1
dan0
.Hasilkan
n
istilah berikutnya menggunakan relasi perulangan.*_
di sini adalah kependekan$&*_
yang mengkonversi nomor (pertama) dalam pertandingan ke unary, sedangkan$1*
kependekan$1*_
yang mengkonversi nomor tengah ke unary. The$.(
pengembalian jumlah desimal argumen unary nya, yaitu jumlah dari angka pertama dan menengah.Buang enam karakter pertama, yaitu tiga baris pertama.
sumber
Cubix , 20 byte
Ini adalah 0 yang diindeks dan menghasilkan istilah ke- N
Cobalah online!
Bungkus ke sebuah kubus dengan panjang sisi 2
Lihat saja
I010
- Memulai tumpukan+p?
- Tambahkan bagian atas tumpukan, tarik penghitung dari bagian bawah tumpukan dan tes/;UO@
- Jika penghitung adalah 0, refleksikan ke permukaan atas, hapus TOS, putar balik, keluaran, dan berhenti\(sqq;W
- Jika penghitung positif, pantulkan, penghitung penurunan, tukar TOS, tekan atas ke bawah dua kali, hapus TOS dan geser lajur kembali ke loop utama.sumber
Python 2 ,
5648 byteCobalah online!
Mengembalikan nilai n, diindeks 0.
sumber
Perl 6 , 24 byte
Cobalah online!
Urutan yang dihasilkan standar cantik, dengan setiap elemen baru dihasilkan oleh ekspresi
* + * + !*
. Itu menambahkan elemen ketiga sebelumnya, elemen kedua sebelumnya, dan negasi logis dari elemen sebelumnya, yang selaluFalse
, yang secara numerik nol.sumber
05AB1E , 8 byte
Cobalah online!
Bersabarlah, saya belum bermain golf sebentar. Saya ingin tahu apakah ada pengganti yang lebih pendekn
1Ð)
yang berfungsi dalam kasus ini (saya sudah mencoba1D)
,3Å1
dll. Tetapi tidak ada yang menyimpan byte). Menghasilkan pertama istilah urutan. Atau, tanpa , itu akan menghasilkan aliran tak terbatas dari ketentuan urutan.£
Bagaimana?
sumber
1Ð)
bisa 2 byte tbh. Saya dapat memikirkan enam alternatif 3-byte yang berbeda , tetapi tidak ada 2-byters.APL (Dyalog Unicode) ,
201817 byte SBCSKode ini 1-diindeks. Jumlah byte yang sama untuk mendapatkan
n
item dari urutan Padovan, karena Anda harus menjatuhkan beberapa anggota tambahan terakhir. Ini juga jumlah byte yang sama untuk mendapatkan pengindeksan 0.Edit: -2 byte terima kasih kepada ngn. -1 byte terima kasih kepada ngn
Cobalah online!
Penjelasan
sumber
K (ngn / k) ,
2420 byte-4 byte terima kasih kepada ngn!
Cobalah online!
Diindeks, istilah N pertama
sumber
f[x-2]+f[x-3]
->+/o'x-2 3
(o
is "recur")1:
->#
dalam solusi jx86 kode mesin 32-bit, 17 byte
Membongkar:
Diindeks 0. Inisialisasi mudah dicapai dengan menghitung eax * 0. Hasil 128-bit adalah 0, dan berjalan di edx: eax.
Pada awal setiap iterasi, urutan register adalah ebx, eax, edx. Saya harus memilih urutan yang tepat untuk memanfaatkan pengodean untuk
xchg eax
instruksi - 1 byte.Saya harus menambahkan 4 ke penghitung lingkaran agar keluaran mencapai
eax
, yang menyimpan nilai fungsi kembali dalamfastcall
konvensi.Saya dapat menggunakan beberapa konvensi panggilan lain, yang tidak memerlukan penyimpanan dan pemulihan
ebx
, tetapifastcall
tetap menyenangkan :)sumber
Jelly , 11 byte
Cobalah online!
Diindeks 0.
sumber
Lua 5.3,
4948 byteCobalah online!
Vanilla Lua tidak memiliki paksaan boolean ke string (bahkan
tonumber(true)
kembalinil
), jadi Anda harus menggunakan operator pseudo-ternary. Versi ini 1-diindeks, seperti semua Lua. Bagian1or
itu harus diubah ke1 or
dalam Lua 5.1, yang memiliki cara berbeda untuk nomor lexing.sumber
Ruby , 26 byte
Cobalah online!
sumber
JavaScript (ES6), 23 byte
Cobalah online!
sumber
true
itu sama dengan pengembalian1
jika sisa outputnya adalah angka.Japt
-N
, 12 byteCobalah
sumber
TI-BASIC (TI-84), 34 byte
Input di
Ans
.Keluaran dalam
Ans
dan secara otomatis dicetak.Saya pikir sudah cukup waktu berlalu, ditambah beberapa jawaban telah diposting, yang mana ada banyak yang mengabaikan jawaban ini.Contoh:
Penjelasan:
sumber
Pyth, 16 byte
Ini mendefinisikan fungsi
y
. Coba di sini!Inilah solusi yang lebih menyenangkan, meskipun lebih lama 9 byte; byte bisa dicukur.
Ini menggunakan definisi yang diberikan oleh David Callan pada halaman OEIS: "a (n) = jumlah komposisi n menjadi bagian-bagian yang ganjil dan> = 3." Coba di sini! Dibutuhkan input secara langsung alih-alih mendefinisikan suatu fungsi.
sumber
y-b2y-b3
mungkin bisa di refactored dengan dab dua atauL
? Padahal mendeklarasikan array 2 elemen itu mahal.yL-Lb2,3
lebih panjang :(+y-b2y-b3
dengansmy-bdhB2
jumlah byte yang sama;hB2
hasil dalam array[2, 3]
hB2
. Sayang sekali itu jumlah byte yang sama.d
di peta.Java, 41 byte
Tidak dapat menggunakan lambda (kesalahan runtime). Port jawaban Javascript ini
TIO
sumber
R + pryr ,
3836 byteFungsi rekursif tanpa indeks.
Cobalah online!
Terima kasih kepada @Giuseppe karena menunjukkan dua byte yang jelas tidak perlu.
sumber
pryr
, bahasanya harusR + pryr
dan ini bisa 36 byteC (dentang) ,
4133 byteCobalah online!
sumber
C # (Visual C # Interactive Compiler) , 34 byte
Cobalah online!
sumber
Perl 5 , 34 byte
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 26 byte
Cobalah online!
sumber
Pari / GP , 28 byte
Diindeks 0.
Cobalah online!
Pari / GP , 35 byte
1-diindeks.
Cobalah online!
sumber