Fungsi atau urutan Fibonacci

115

The deret Fibonacci adalah urutan angka, di mana setiap nomor dalam urutan adalah jumlah dari dua angka sebelumnya itu. Dua angka pertama dalam urutan keduanya adalah 1.

Inilah beberapa istilah pertama

1 1 2 3 5 8 13 21 34 55 89 ...

Tulis kode terpendek yang baik:

  • Menghasilkan urutan Fibonacci tanpa akhir.

  • Diberi nmenghitung njangka waktu urutan. (Baik 1 atau nol diindeks)

Anda dapat menggunakan bentuk input dan output standar.

(Saya memberikan kedua opsi jika salah satu lebih mudah dilakukan dalam bahasa yang Anda pilih daripada yang lain.)


Untuk fungsi yang membutuhkan n, nilai pengembalian yang cukup besar (angka Fibonacci terbesar yang sesuai dengan ukuran kata normal komputer Anda, minimal) harus didukung.


Papan peringkat

Chris Jester-Young
sumber

Jawaban:

48

Perl 6, 10 karakter:

Daftar urutan fibonacci tak terbatas anonim:

^2,*+*...*

Sama dengan:

0, 1, -> $x, $y { $x + $y } ... Inf;

Jadi, Anda bisa menetapkannya ke array:

my @short-fibs = ^2, * + * ... *;

atau

my @fibs = 0, 1, -> $x, $y { $x + $y } ... Inf;

Dan dapatkan sebelas nilai pertama (dari 0 hingga 10) dengan:

say @short-fibs[^11];

atau dengan:

say @fibs[^11];

Tunggu, Anda bisa mendapatkan juga 50 nomor pertama dari daftar anonim itu sendiri:

say (^2,*+*...*)[^50]

Itu kembali:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
10946 17711 28657 46368 75025 121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169
63245986 102334155 165580141 267914296 433494437 701408733 1134903170 
1836311903 2971215073 4807526976 7778742049

Dan beberapa tolok ukur sederhana:

real    0m0.966s
user    0m0.842s
sys     0m0.080s

Dengan:

$ time perl6 -e 'say (^2, *+* ... *)[^50]'

EOF

Marco Aurélio da Silva
sumber
Saya bahkan tidak akan berpikir ^2sebagai pengganti 0,1. +1
Konrad Borowski
2
Ini tidak lagi valid, Anda harus menuliskannya |^2,*+*...*, yang merupakan jumlah byte yang sama dengan 0,1,*+*...*.
Brad Gilbert b2gills
5
Perl sangat aneh.
Cyoce
1
Versi Perl 6 yang mana jawaban ini ditulis?
CalculatorFeline
3
@CalculatorFeline Ada perubahan besar yang dikenal sebagai GLR (Great List Refactor) yang terjadi sesaat sebelum rilis resmi pertama yaitu pada 2015-12-25. Kode ini akan berfungsi hingga saat itu.
Brad Gilbert b2gills
73

Brainfuck, 22 pukulan

+>++[-<<[->+>+<<]>>>+]

Menghasilkan urutan Fibonacci secara bertahap bergerak melintasi pita memori.

R. Martinho Fernandes
sumber
5
Cantik! Sangat indah! Atau mungkin tidak ... lagian +1 untuk ini :)
Per Hornshøj-Schierbeck
2
Ini adalah 3,344 atau 4 byte dalam brainfuck terkompresi. (6 ln (22)) / ln (256)
Will Sherwood
24
16 bytes:+[[<+>->+>+<<]>]
primo
3
14 byte:+[.[>+>+<<-]>]
Charlim
2
@Stefnotch tentu saja, yang lebih pendek bersifat destruktif. Solusi di atas diakhiri dengan urutan Fibonacci pada kaset, yang juga merupakan solusi 16 byte.
Primo
51

Haskell, 17 15 14 karakter

f=1:scanl(+)1f

Cobalah online!

Segera.
sumber
4
Mengapa tidak memotong dua ruang f=0:scanl(+)1 f?
R. Martinho Fernandes
@ Martinho: Diedit, terima kasih.
Anon.
Wow, itu bahkan lebih pendek dari biasanya f@(_:x)=0:1:zipWith(+)f x! Harus mengingatnya.
FUZxxl
4
Anda bahkan dapat menghapus ruang lain: f=0:scanl(+)1f.
FUZxxl
37

C # 4, 58 byte

Streaming (69; 65 jika diketik dengan lemah IEnumerable)

(Dengan asumsi usingarahan untuk System.Collections.Generic.)

IEnumerable<int>F(){int c=0,n=1;for(;;){yield return c;n+=c;c=n-c;}}

Nilai tunggal (58)

int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}
Jon Skeet
sumber
6
Mengingat itu nadalah uint, n==0dapat disingkat menjadi n<1. Dan stream dapat menghemat beberapa karakter dengan membuang ruang setelah tipe generik dan mendeklarasikan xdalam cakupan yang lebih luas dari yang diperlukan. Bahkan, parit xseluruhnya:n+=c;c=n-c;
Peter Taylor
1
@ Peter: Terima kasih, akan mengedit ketika saya punya waktu.
Jon Skeet
Versi nilai tunggal Anda selama jawaban ekspresi lambda rekursif saya ... bagus!
Andrew Gray
1
@ wizzwizz4 jika saya tidak salah, jika !nbekerja, maka seharusnya hanya njika Anda membalik kondisional.
Cyoce
3
@JonSkeet Aw. Dan di sini saya berpikir saya akan mengalahkan Jon Skeet di C # ... :-)
wizzwizz4
32

GolfScript, 12

Sekarang, hanya 12 karakter!

1.{[email protected]+.}do
jtjacques
sumber
+1 kerja bagus. Jika Anda membuatnya lebih pendek dari 13 karakter, saya akan langsung menerima jawaban Anda (kecuali seseorang membuat jawaban yang lebih pendek, tentu saja). :-P
Chris Jester-Young
1
Saya suka tantangan. Selesai! ;-)
jtjacques
Bagus, kamu menang. Setidaknya, sampai seseorang membuat sesuatu lebih pendek (jika itu mungkin). :-P
Chris Jester-Young
5
definisi itu hampir sesingkat nama 'Fibonacci' itu sendiri! +1
agent-j
23

> <> - 15 karakter

0:nao1v LF a+@:n:<o
Kevin Brown
sumber
Meskipun Anda dapat mempersingkat 0:nao1v LF a+@:n:<ojika Anda mau. Memberikan 15 :) Bahkan, ini juga membuat output sedikit lebih mudah dibaca ...
tomsmeding
5
13 karakter:01r:nao$:@+$r
randomra
21

J, 10 karakter

Menggunakan perhitungan koefisien deret Taylor bawaan jadi mungkin sedikit curang. Belajar di sini .

   (%-.-*:)t.

   (%-.-*:)t. 0 1 2 3 4 5 10 100
0 1 1 2 3 5 55 354224848179261915075
randomra
sumber
2
@aditsu (q:^-^:p) 6adalah 64 729tempat p berada. J mungkin bagus untuk teka - teki. :)
randomra
2
Bahkan lebih baik: (<:^-^:>) 4adalah 81dan <:^-^:> 4adalah 53.5982.
randomra
2
Emoji yang diperlihatkan di sini adalah tujuan semua kode J. Di samping catatan, alternatif lain +/@:!&i.-menggunakan 9 byte.
mil
1
@miles Sangat bagus! Anda harus mempostingnya karena sama sekali berbeda dari milik saya.
randomra
21

Segi enam ,18 14 12

Terima kasih Martin untuk 6 byte!

1="/}.!+/M8;

Diperluas:

  1 = "
 / } . !
+ / M 8 ;
 . . . .
  . . .

Cobalah online


Tua, jawab. Ini dibiarkan masuk karena gambar dan penjelasannya mungkin bermanfaat bagi pengguna Hexagony baru.

!).={!/"*10;$.[+{]

Diperluas:

  ! ) .
 = { ! /
" * 1 0 ;
 $ . [ +
  { ] .

Ini mencetak urutan Fibonacci yang dipisahkan oleh baris baru.

Cobalah online! Namun berhati-hatilah, penerjemah online tidak terlalu menyukai hasil yang tidak terbatas.

Penjelasan

Ada dua "subrutin" untuk program ini, masing-masing dijalankan oleh salah satu dari dua IP yang digunakan. Rutin pertama mencetak baris baru, dan yang kedua melakukan perhitungan dan output Fibonacci.

Subrutin pertama dimulai pada baris pertama dan bergerak dari kiri ke kanan sepanjang waktu. Pertama mencetak nilai pada penunjuk memori (diinisialisasi ke nol), dan kemudian meningkatkan nilai pada penunjuk memori oleh 1. Setelah no-op, IP melompat ke baris ketiga yang pertama-tama beralih ke sel memori lain, kemudian mencetak baris baru. Karena baris baru memiliki nilai positif (nilainya 10), kode akan selalu melompat ke baris kelima, berikutnya. Baris kelima mengembalikan penunjuk memori ke nomor Fibonacci kami dan kemudian beralih ke subrutin lainnya. Ketika kami kembali dari subrutin ini, IP akan melompat kembali ke baris ketiga, setelah menjalankan no-op.

Subrutin kedua dimulai di sudut kanan atas dan mulai bergerak ke Tenggara. Setelah no-op, kita terpental untuk melakukan perjalanan ke Barat di sepanjang baris kedua. Baris ini mencetak angka Fibonacci saat ini, sebelum memindahkan penunjuk memori ke lokasi berikutnya. Kemudian IP melompat ke baris keempat, di mana ia menghitung angka Fibonacci berikutnya menggunakan dua sebelumnya. Ia kemudian memberikan kontrol kembali ke subrutin pertama, tetapi ketika ia mendapatkan kembali kendali atas program, ia melanjutkan hingga bertemu lompatan, di mana ia memantul di atas cermin yang awalnya digunakan untuk mengarahkannya ke Barat, saat ia kembali ke baris kedua.


Gambar-gambar Cantik Pendahuluan!

Sisi kiri gambar adalah program, sisi kanan mewakili memori. Kotak biru adalah IP pertama, dan kedua IP menunjuk pada instruksi selanjutnya yang akan dieksekusi.

masukkan deskripsi gambar di sini

Catatan: Gambar mungkin hanya tampak cantik bagi orang-orang yang memiliki keterampilan yang sama terbatasnya dengan program pengeditan gambar: PI akan menambahkan setidaknya 2 iterasi lebih banyak sehingga penggunaan *operator menjadi lebih jelas.

Catatan 2: Saya hanya melihat jawaban alephalpha setelah menulis sebagian besar dari ini, saya pikir itu masih berharga karena pemisahan, tetapi bagian Fibonacci sebenarnya dari program kami sangat mirip. Selain itu, ini adalah program Hexagony terkecil yang saya lihat menggunakan lebih dari satu IP, jadi saya pikir mungkin lebih baik untuk tetap menyimpannya: P

FryAmTheEggman
sumber
Anda harus menautkan ke apa pun yang Anda gunakan untuk membuat gambar-gambar cantik, lalu taruh tautan itu di esolangs.org/wiki/Hexagony .
mbomb007
1
@ mbomb007 Saya menggunakan gimp untuk secara manual membuat setiap frame, lalu mengunggah gambar ke beberapa situs web pembuat gif. Meskipun, beberapa kali selama proses ini saya mempertimbangkan membuat alat untuk melakukannya, mengingat betapa membosankannya itu.
FryAmTheEggman
@FryAmTheEggman Mengesankan! Buat itu menjadi tantangan. Saya yakin seseorang akan memposting jawaban. : D Lebih baik lagi jika Anda bisa membuat situs web yang mirip dengan juru bahasa online ikan.
mbomb007
@ mbomb007 Itu mungkin agak ambisius untuk tantangan di situs ini, belum lagi mungkin akan sangat menderita karena menjadi sangat luas. Saya tidak berpikir saya akan memposting itu, tetapi jangan ragu untuk melakukannya sendiri jika Anda pikir Anda memiliki cara yang baik untuk menyajikannya. Juga, saya percaya Timwi menciptakan ide C # untuk hexagony, meskipun saya belum pernah menggunakannya karena saya belum pernah repot-repot dengan mono.
FryAmTheEggman
1
@ mbomb007 Idenya tinggal di sini , omong-omong, lupa menghubungkannya terakhir kali.
FryAmTheEggman
18

SAPI , 108

 MoO moO MoO mOo MOO OOM MMM moO moO
 MMM mOo mOo moO MMM mOo MMM moO moO
 MOO MOo mOo MoO moO moo mOo mOo moo
Timtech
sumber
17

Python 2, 34 byte

Python, menggunakan rekursi ... inilah StackOverflow!

def f(i,j):print i;f(j,i+j)
f(1,1)
jtjacques
sumber
15

Jelly , 3 byte

+¡1

Cobalah online!

Bagaimana itu bekerja

+¡1    Niladic link. No implicit input.
       Since the link doesn't start with a nilad, the argument 0 is used.

  1    Yield 1.
+      Add the left and right argument.
 ¡     For reasons‡, read a number n from STDIN.
       Repeatedly call the dyadic link +, updating the right argument with
       the value of the left one, and the left one with the return value.

¡ mengintip dua tautan ke kiri. Karena hanya ada satu, itu harus menjadi badan loop. Oleh karena itu, angka dibaca dari input. Karena tidak ada argumen baris perintah, angka itu dibaca dari STDIN.

Dennis
sumber
12

Golfscript - nomor tunggal - 12/11/10

12 karakter untuk mengambil input dari stdin:

~0 1@{.@+}*;

11 karakter untuk input sudah ada di tumpukan:

0 1@{.@+}*;

10 karakter untuk mendefinisikan 1 lebih lanjut sebagai angka Fibonacci 0:

1.@{.@+}*;
aaaaaaaaaaaa
sumber
1
Pilihannya adalah "Menghitung, mengingat n, angka Fibonacci ke-n". Jadi parit ~dan Anda memiliki 11 karakter yang mengambil ntumpukan dan meninggalkan F_ntumpukan.
Peter Taylor
12

Rubi

29 27 25 24 Karakter

p a=b=1;loop{b=a+a=p(b)}

Sunting: menjadikannya loop tak terbatas. ;)

st0le
sumber
13
Adakah yang tahu b=a+a=bada palindrome? :)
st0le
2
ya st0le lakukan :)
gnibbler
Saya tahu saya terlambat ke pesta, tetapi bisakah seseorang menjelaskan cara b=a+a=bkerjanya? Sepertinya tidak bisa membungkus kepalaku di sekitarnya.
Tn. Llama
3
@ GigaWatt, Pikirkan seperti ini, Instruksi dijalankan dari kiri ke kanan ... jadinewb=olda+(a=oldb)
st0le
Anda dapat menyimpan 2 karakter dengan menggunakan loop:p 1,a=b=1;loop{p b=a+a=b}
Patrick Oscity
11

Mathematica, 9 karakter

Fibonacci

Jika fungsi bawaan tidak diizinkan, berikut ini adalah solusi eksplisit:

Mathematica, 33 32 31 karakter

#&@@Nest[{+##,#}&@@#&,{0,1},#]&
celtschk
sumber
#&@@Nest[{#+#2,#}&@@#&,{0,1},#]&32 karakter.
chyanog
1
@chyanog 31:#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Mr.Wizard
1
@ Mr.Wizard 24 karakter (26 byte):Round[GoldenRatio^#/√5]&
JungHwan Min
1
atau 23 karakter (27 byte):Round[((1+√5)/2)^#/√5]&
JungHwan Min
10

DC (20 byte)

Sebagai bonus, itu bahkan dikaburkan;)

zzr[dsb+lbrplax]dsax

EDIT: Saya dapat menunjukkan bahwa itu mencetak semua angka dalam urutan fibonacci, jika Anda menunggu cukup lama.

Hiato
sumber
13
Saya tidak akan menyebutnya itu dikaburkan - kode dikaburkan seharusnya sulit untuk dipahami, dan sejauh dc pergi kode di sini benar-benar mudah.
Nabb
10

Pendahuluan , 12 byte

Salah satu dari sedikit tantangan di mana Prelude sebenarnya cukup kompetitif:

1(v!v)
  ^+^

Ini membutuhkan juru bahasa Python yang mencetak nilai sebagai angka desimal alih-alih karakter.

Penjelasan

Di Prelude, semua baris dieksekusi secara paralel, dengan penunjuk instruksi melintasi kolom program. Setiap baris memiliki tumpukan sendiri yang diinisialisasi ke nol.

1(v!v)
  ^+^
| Push a 1 onto the first stack.
 | Start a loop from here to the closing ).
  | Copy the top value from the first stack to the second and vice-versa.
   | Print the value on the first stack, add the top two numbers on the second stack.
    | Copy the top value from the first stack to the second and vice-versa.

Pengulangan berulang selamanya, karena tumpukan pertama tidak akan pernah ada 0di atas.

Perhatikan bahwa ini mulai dari urutan Fibonacci 0.

Martin Ender
sumber
10

Hexagony , 6 byte

Non-bersaing karena bahasa lebih baru daripada pertanyaan.

1.}=+!

Tidak Terkumpul:

  1 .
 } = +
  ! .

Ini mencetak urutan Fibonacci tanpa pemisah apa pun.

alephalpha
sumber
2
Ini memiliki masalah kecil yaitu tidak mencetak pemisah antara angka-angka. Ini tidak sepenuhnya ditentukan dalam tantangan. (Dan saya benar-benar senang seseorang menggunakan Hexagony. :))
Martin Ender
9

TI-BASIC, 11

Oleh pegolf TI-BASIC legendaris Kenneth Hammond ("Weregoose"), dari situs ini . Berjalan dalam waktu O (1), dan menganggap 0 sebagai istilah ke-0 dari deret Fibonacci.

int(round(√(.8)cosh(Anssinh‾¹(.5

Menggunakan:

2:int(round(√(.8)cosh(Anssinh‾¹(.5
                                     1

12:int(round(√(.8)cosh(Anssinh‾¹(.5
                                     144

Bagaimana cara kerjanya? Jika Anda menghitungnya, ternyata sinh‾¹(.5)sama dengan ln φ, jadi ini adalah versi modifikasi dari rumus Binet yang membulatkan ke bawah alih-alih menggunakan (1/φ)^nistilah koreksi. The round((bulat untuk 9 tempat desimal) diperlukan untuk mencegah kesalahan pembulatan.

Thomas Kwa
sumber
8

K - 12

Menghitung ndan n-1angka Fibonacci.

{x(|+\)/0 1}

Hanya angka nthFibonacci.

{*x(|+\)/0 1}
isawdrones
sumber
+1 Tidak buruk! Jika Anda dapat mengecilkannya hanya satu karakter (dan memberi saya cara untuk mengujinya), saya akan menerima jawaban Anda. :-)
Chris Jester-Young
Satu-satunya cara untuk mengecilkannya adalah dengan mengganti fungsi dengan panggilan ke nomor yang diketahui: n (| + \) / 0 1 Uji dengan menggunakan juru bahasa ini .
isawdrones
7

Julia, 18 byte

n->([1 1;1 0]^n)[]
Rɪᴋᴇʀ
sumber
7

Jawa, 55

Saya tidak dapat bersaing dengan keringkasan sebagian besar bahasa di sini, tetapi saya dapat menawarkan cara yang jauh berbeda dan mungkin jauh lebih cepat (waktu konstan) untuk menghitung angka ke-n:

Math.floor(Math.pow((Math.sqrt(5)+1)/2,n)/Math.sqrt(5))

nadalah input (int atau panjang), dimulai dengan n = 1. Ini menggunakan rumus dan putaran Binet bukan pengurangan.

Hans-Peter Störr
sumber
Saya suka solusi ini
Andreas
Ini sepertinya tidak berhasil untuk saya, tetapi ini masih dini dan saya mungkin kehilangan sesuatu! Diasumsikan 0sebagai angka pertama dalam urutan, ini memberikan 0, 0, 1, 1, 3, 4, 8, 12, 21, 33untuk 10 angka pertama
Shaggy
@Shaggy Ups! Maaf, saya memperkenalkan bug - diperbaiki sekarang.
Hans-Peter Störr
6

Ruby, 25 karakter

Jawaban st0le disingkat.

p 1,a=b=1;loop{p b=a+a=b}
Matma Rex
sumber
6
Sebenarnya Anda dapat mempersingkat lebih jauh menggunakana=b=1;loop{p a;b=a+a=b}
Ventero
6
Jadi, Anda masih menjawabnya? : P
mbomb007
6

FAC: APL Fungsional, 4 karakter (!!)

Bukan milik saya, karena itu diposting sebagai komunitas wiki. FAC adalah dialek APL yang tampaknya disarankan Hai-Chen Tu sebagai disertasi PhD-nya pada tahun 1985. Dia kemudian menulis sebuah artikel bersama dengan Alan J. Perlis yang disebut " FAC: A Functional APL Language ". Dialek APL ini menggunakan "array malas" dan memungkinkan array dengan panjang tak terbatas. Ini mendefinisikan operator "iter" ( ) untuk memungkinkan definisi ringkas dari beberapa urutan rekursif.

Kasus monadik ("unary") pada dasarnya adalah kasus Haskell iterate, dan didefinisikan sebagai (F⌼) A ≡ A, (F A), (F (F A)), …. The diad ( "binary") kasus didefinisikan agak analog untuk dua variabel: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Mengapa ini berguna? Nah, ternyata inilah jenis pengulangan yang dimiliki urutan Fibonacci. Bahkan, salah satu contoh yang diberikan adalah

1+⌼1

menghasilkan urutan yang akrab 1 1 2 3 5 8 ….

Jadi, begitulah, sangat mungkin implementasi Fibonacci terpendek dalam bahasa pemrograman yang tidak baru. : D

FireFly
sumber
Oh, secara tidak sengaja saya membatalkan posting Anda di komunitas sebagai bagian dari non-manual saya (manual). Baiklah. ;-)
Chris Jester-Young
6

R, 40 byte

Belum melihat solusi R, jadi:

f=function(n)ifelse(n<3,1,f(n-1)+f(n-2))
plannapus
sumber
1
Saya tahu ini adalah jawaban lama, tetapi Anda dapat mempersingkat menjadi 38 byte
Robert S.
6

05AB1E, 7 byte

Kode:

1$<FDr+

Cobalah online!

Vimlesh
sumber
3
Hai, dan selamat datang di PPCG! Posting pertama yang bagus!
Rɪᴋᴇʀ
6

Dodos , 26 byte

	dot F
F
	F dip
	F dip dip

Cobalah online!

Bagaimana itu bekerja

Fungsi F melakukan semua pengangkatan berat; itu didefinisikan secara rekursif sebagai berikut.

F(n) = ( F(|n - 1|), F(||n - 1| - 1|) )

Setiap kali n> 1 , kita memiliki | n - 1 | = n - 1 <n dan || n - 1 | - 1 | = | n - 1 - 1 | = n - 2 <n , sehingga fungsinya kembali (F (n - 1), F (n - 2)) .

Jika n = 0 , maka | n - 1 | = 1> 0 ; jika n = 1 , maka || n - 1 | - 1 | = | 0 - 1 | = 1 = 1 . Dalam kedua kasus, upaya panggilan rekursif F (1) meningkatkan pengecualian Menyerah , sehingga F (0) mengembalikan 0 dan F (1) mengembalikan 1 .

Misalnya, F (3) = (F (1), F (2)) = (1, F (0), F (1)) = (1, 0, 1) .

Akhirnya, fungsi utama didefinisikan sebagai

main(n) = sum(F(n))

sehingga hal itu menambah semua koordinat vektor dikembalikan oleh F .

Misalnya, main (3) = jumlah (F (3)) = jumlah (1, 0, 1) = 2 .

Dennis
sumber
5

Desmos , 61 byte

Golf

Klik add slidertombol untuk n.

p=.5+.5\sqrt{5}
n=0
f=5^{-.5}\left(p^n-\left(-p\right)^{-n}\right)

Baris terakhir adalah output.

Tidak disatukan

Apakah fungsi.

\phi =\frac{1+\sqrt{5}}{2}
f_{ibonacci}\left(n\right)=\frac{\phi ^n-\left(-\phi \right)^{-n}}{\sqrt{5}}
Conor O'Brien
sumber
5

Cubix , 10 byte

Jawaban tidak bersaing karena bahasa lebih baru daripada pertanyaan.

Cubix adalah bahasa 2 dimensi baru oleh @ ETHproductions adalah kode yang dibungkus ke dalam ukuran kubus agar sesuai.

;.o.ON/+!)

Cobalah online

Ini membungkus 2 x 2 kubus dengan cara berikut

    ; .
    o .
O N / + ! ) . .
. . . . . . . .
    . .
    . .
  • O output nilai dari TOS
  • N dorong baris baru ke tumpukan
  • / mencerminkan utara
  • o Keluarkan karakter dari TOS
  • ; pop TOS
  • / mencerminkan timur setelah berkeliling kubus
  • + tambahkan 2 nilai teratas tumpukan
  • ! lewati perintah berikutnya jika TOS adalah 0
  • ) menambah TOS dengan 1. Ini memulai urutan pada dasarnya.

Ini adalah loop tanpa akhir yang mencetak urutan dengan pemisah baris baru. Itu mengambil keuntungan dari kenyataan bahwa sebagian besar perintah tidak memunculkan nilai dari stack.
Jika separator diabaikan maka ini dapat dilakukan dengan 5 byte.O+!)

MickyT
sumber
5

Brainfuck, 16,15, 14/13 karakter

+[[->+>+<<]>]  

Menghasilkan urutan Fibonacci dan tidak mencetak apa pun. Juga, lebih pendek dari yang di atas.

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

Yang ini memiliki 14 karakter tetapi mencetak karakter ASCII dengan nilai-nilai deret Fibonacci.

Stefnotch
sumber
1
Ini bagus, tetapi apakah saya akan salah mengatakan bahwa versi 14 byte hanya keluaran dari tanggal 1 1? Seperti dalam "1 2 3 5 8" bukannya "1 1 2 3 5 8"?
Charlim
1
@ Charlim Oh, kamu benar. Saya tidak tahu apa yang saya pikirkan 2014. Bagaimanapun, saya baru saja memperbaikinya dengan memindahkan instruksi cetak ke bagian depan loop.
Stefnotch