Tulis sebuah program atau fungsi bernama yang akan menampilkan atau mengembalikan urutan n
ke bilangan bulat dalam urutan Iccanobif, didokumentasikan pada OEIS sebagai A014258 . Perhatikan bahwa hanya elemen nol di urutan ( 0
) yang akan dicetak jika n
nol.
Urutan ini dihasilkan dengan memulai seperti urutan Fibonacci standar, tetapi setelah menambahkan dua angka sebelumnya, Anda membalik hasilnya dan menjatuhkan angka nol di depan. Fakta yang menarik, setidaknya bagi saya, adalah bahwa urutan ini tidak meningkat secara ketat (lihat daftar di bawah). Tampaknya juga (dan mungkin) benar-benar lebih besar dari atau sama dengan urutan Fibonacci.
Input program Anda harus berupa bilangan bulat.
20 angka pertama dari urutan disediakan di sini untuk kesenangan Anda:
0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769
Celah standar dilarang.
Kemenangan program terpendek.
EDIT: Menambahkan catatan untuk memperjelas bahwa urutan dimulai dengan elemen n
nol dan harus dimasukkan jika nol.
Contoh kemungkinan IO:
0 -> 0
1 -> 0 1
6 -> 0 1 1 2 3 5 8
17 -> [0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297]
Sekarang ada beberapa jawaban, di bawah ini adalah implementasi saya di Python 2 yang saya susah payah sembunyikan dengan markup:
Berulang:
#Tutup untuk program awal saya. 73 byte. Perlu dicatat juga bahwa program ini tidak dapat mencapai stack overflow. Ini berjalan selama n = 5000 dalam waktu kurang dari 10 detik.i,a,b=input(),0,1 print a while i:print b;i,a,b=i-1,b,int(str(a+b)[::-1])
Rekursif:
# Perhatikan bahwa ini akan mencetakn
baris baru. 64 byte Akan mengenai kesalahan stack overflow untuk nilai n yang besar.def f(n,i=0,j=1):print i,n and f(n-1,j,int(str(i+j)[::-1]))or'';
Jawaban:
Pyth,
171514Cobalah online
Implementasi yang sangat mendasar, dimulai dengan
range(2)
dan menambahkan sejumlah elemen yang sama dengan input, kemudianmemotong ekstra yangmuncul dari elemen terakhir.Terima kasih @ Jakube untuk menunjukkan
>
pembalikan arah.Penjelasan
sumber
Python 2, 58 byte
Penggunaan
str
untuk mengkonversi daripada backticks karena angka yang cukup besar di Python 2 ditulis dengan huruf L di bagian akhir. Saya mencoba fungsi rekursif, tetapi ternyata lebih lama (61):sumber
Julia, 79 byte
Ini menciptakan fungsi yang menerima integer sebagai input dan mengembalikan array integer.
Penjelasan + tidak dikumpulkan:
Contoh:
sumber
T-SQL, 149
Fungsi tabel inline sangat lurus ke depan yang menggunakan kueri CTE rekursif. Karena menggunakan INT, ini akan keluar di 37. Menambahkan CAST untuk bigints akan memungkinkannya untuk melangkah lebih jauh ke 63
Ini digunakan sebagai berikut
sumber
K,
2523 byteModifikasi sederhana dari salah satu contoh di No Stinking Loops .
Ungkapan
.|$
melemparkan angka ke string, membalikkannya dan kemudian mengevaluasinya.Edit:
Ceroboh memperhatikan kondisi batas di pihak saya. Lebih benar sekarang:
Edit 2:
(x+1)#
dapat diganti dengan-1_
, menghemat 2 karakter. Ruang diperlukan karena jika tidak_x
akan menjadi pengidentifikasi, ketika saya ingin operator "drop" diterapkan pada variabel yang dipanggilx
.sumber
Haskell,
6449 byteContoh penggunaan:
q 15
->[0,1,1,2,3,5,8,31,93,421,415,638,3501,9314,51821,53116]
Cara kerjanya:
!
secara rekursif membuat daftar nomor iccanobif yang tak terbatas dimulai dengan argumen pertama (argumen kedua harus nomor iccanobif berikutnya).q
mengambiln
angka pertama dari daftar iccanobif yang dimulai dengan1, 1
dan diawali dengan a0
.sumber
CJam, 18 byte
Bagaimana itu bekerja
Cobalah online di sini
sumber
Jawa -
126124Saya belum melihat Java di sekitar situs ini dalam beberapa saat ...
f(5)
cetakan0 1 1 2 3 5 8 31 93 421 415 638
sumber
...System.out.println(c);
Integer.valueOf(
dengannew Long(
(dan kemudian mengubahint
dalam untuk loop untuklong
juga). Jika Anda lebih suka hanya bekerja dengan bilangan bulat,new Integer(
masih lebih pendek dariInteger.valueOf(
.SWI-Prolog,
141131121 byteMenjalankan
a(17,X).
output:Membutuhkan waktu sekitar 10 detik untuk menampilkan hasil
a(10000,X).
di komputer saya.Sunting: Versi 121 byte di atas adalah definisi satu predikat = satu liner. Versi 131 byte yang lama adalah sebagai berikut (harus dijalankan sebagai
p(17,X)
):sumber
> <> (Ikan)
592254 BytesBukan super golf (42/43 kosong yang tidak melakukan apa-apa dan total 30 token redirection), tetapi merupakan latihan yang menarik untuk membuatnya bekerja di tempat pertama.
Anda dapat mengujinya di sini , memberikan panjang yang diinginkan di tumpukan awal.
EDIT: Lebih dari setengah jumlah byte
sumber
PHP,
114, 109 byteTidak ada yang mewah, hanya algoritma fibonacci rata-rata dengan sihir string terbalik.
Tidak Disatukan:
sumber
Excel VBA, 279 byte
Menjalankan makro akan meminta pengguna untuk memasukkan nilai untuk n.
Hasilnya kemudian akan dicetak baris demi baris di kolom A:
sumber
JavaScript (ES2015),
8173 byteMenjalankan fungsi ini (dinamai
f
) dengan6
:sumber
Pip , 13 byte
Saya cukup yakin semua fitur yang digunakan dalam program ini hadir di Pip sebelum pertanyaan ini diajukan.
Mengambil input sebagai argumen baris perintah. Cobalah online!
Penjelasan
Nilai dua variabel berevolusi seperti ini:
sumber
Pushy , 18 byte (tidak bersaing)
Cobalah online!
Ini bukan program yang paling elegan, tetapi berhasil.
sumber
Jelly , 9 byte (tidak bersaing)
Cobalah online!
sumber
R, 134 byte
Contoh:
Ingin melihat apakah seseorang memiliki alternatif R yang lebih baik daripada mengambil nomor Anda, menjadikannya string, membalikkannya, dan mengubahnya kembali menjadi angka lagi.
sumber
Groovy, 70 byte
sumber