Funkcja lub sekwencja Fibonacciego

115

Sekwencja Fibonacciego to ciąg liczb, gdzie każda liczba w ciągu jest sumą dwóch liczb poprzednich ją. Dwie pierwsze liczby w sekwencji to 1.

Oto kilka pierwszych warunków

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

Napisz najkrótszy kod, który:

  • Generuje sekwencję Fibonacciego bez końca.

  • Biorąc pod uwagę noblicza nth termin sekwencji. (Zindeksowany 1 lub zero)

Możesz użyć standardowych form wejścia i wyjścia.

(Podałem obie opcje na wypadek, gdyby jedna była łatwiejsza do wykonania w wybranym języku niż drugi).


W przypadku funkcji, która przyjmuje n, musi być obsługiwana stosunkowo duża wartość zwracana (największa liczba Fibonacciego, która odpowiada co najmniej normalnemu rozmiarowi słowa w komputerze).


Tabela liderów

Chris Jester-Young
źródło

Odpowiedzi:

48

Perl 6, 10 znaków:

Anonimowa nieskończona lista sekwencji Fibonacciego:

^2,*+*...*

Taki sam jak:

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

Możesz więc przypisać go do tablicy:

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

lub

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

I uzyskaj pierwsze jedenaście wartości (od 0 do 10) za pomocą:

say @short-fibs[^11];

lub z:

say @fibs[^11];

Poczekaj, z pierwszych anonimowych list możesz też pobrać pierwsze 50 liczb:

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

To zwraca:

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

I kilka prostych testów:

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

Z:

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

EOF

Marco Aurélio da Silva
źródło
Nawet nie pomyślałbym o ^2zastępstwie 0,1. +1
Konrad Borowski
2
To już nie jest poprawne, będziesz musiał zapisać jako |^2,*+*...*, co jest taką samą liczbą bajtów jak 0,1,*+*...*.
Brad Gilbert b2gills
5
Perl jest taki dziwny.
Cyoce
W jakiej wersji Perla 6 napisano tę odpowiedź?
CalculatorFeline
3
@CalculatorFeline Nastąpiła duża zmiana znana jako GLR (Great List Refactor), która nastąpiła na krótko przed pierwszym oficjalnym wydaniem, które miało miejsce 25.12.2015. Ten kod działałby do tego czasu.
Brad Gilbert b2gills
73

Brainfuck, 22 uderzeń

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

Generuje sekwencję Fibonacciego stopniowo przesuwającą się po taśmie pamięci.

R. Martinho Fernandes
źródło
5
Piękny! Dosłownie piękna! A może nie ... w każdym razie +1 za to :)
Per Hornshøj-Schierbeck
2
To jest 3,344 lub 4 bajty w skompresowanym pieprzeniu mózgu. (6 ln (22)) / ln (256)
Will Sherwood
24
16 bajtów:+[[<+>->+>+<<]>]
primo
3
14 bajtów:+[.[>+>+<<-]>]
Charlim
2
@Stefnotch, oczywiście krótszy jest destrukcyjny. Powyższe rozwiązanie kończy się sekwencją Fibonacciego na taśmie, co również robi 16-bajtowe rozwiązanie.
primo
51

Haskell, 17 15 14 znaków

f=1:scanl(+)1f

Wypróbuj online!

Zaraz.
źródło
4
Dlaczego nie wyciąć dwóch spacji f=0:scanl(+)1 f?
R. Martinho Fernandes
@Martinho: Edytowane, dzięki.
Anon.
Wow, to nawet krótsze niż zwykle f@(_:x)=0:1:zipWith(+)f x! Muszę to pamiętać.
FUZxxl,
4
Można nawet rozebrać innego miejsca: f=0:scanl(+)1f.
FUZxxl,
37

C # 4, 58 bajtów

Strumień (69; 65, jeśli słabo wpisany IEnumerable)

(Zakładając usingdyrektywę dla System.Collections.Generic.)

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

Jedna wartość (58)

int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}
Jon Skeet
źródło
6
Biorąc pod uwagę, że njest to uint, n==0można je skrócić n<1. Strumień może zaoszczędzić kilka znaków, porzucając przestrzeń po typie ogólnym i deklarując xw szerszym zakresie niż to konieczne. W rzeczywistości porzuć xcałkowicie:n+=c;c=n-c;
Peter Taylor
1
@Peter: Dzięki, dokonam edycji, kiedy będę miał trochę czasu.
Jon Skeet,
Twoja wersja z jedną wartością jest tak długa, jak odpowiedź na moje rekurencyjne wyrażenie lambda ... fajnie!
Andrew Gray,
1
@ wizzwizz4, jeśli się nie mylę, jeśli !ndziała, to tak też powinno, njeśli zmienisz warunek.
Cyoce
3
@JonSkeet Aw. I tutaj myślałem, że
pokonałem
32

GolfScript, 12

Teraz tylko 12 znaków!

1.{[email protected]+.}do
jtjacques
źródło
+1 dobra robota. Jeśli zmniejszysz go do 13 znaków, natychmiast zaakceptuję twoją odpowiedź (chyba że ktoś oczywiście udzieli jeszcze krótszej odpowiedzi). :-P
Chris Jester-Young
1
Uwielbiam wyzwanie. Gotowy! ;-)
jtjacques 30.01.11
Fajnie, wygrałeś. Przynajmniej dopóki ktoś nie zrobi czegoś jeszcze krótszego (jeśli to w ogóle możliwe). :-P
Chris Jester-Young
5
ta definicja jest prawie tak krótka jak sama nazwa „Fibonacci”! +1
agent-j
23

> <> - 15 znaków

0:nao1v LF a+@:n:<o
Kevin Brown
źródło
Chociaż możesz to skrócić, 0:nao1v LF a+@:n:<ojeśli chcesz. Daje 15 :) W rzeczywistości powoduje to również, że dane wyjściowe są nieco bardziej czytelne ...
tomsmeding
5
13 znaków:01r:nao$:@+$r
randomra
21

J, 10 znaków

Korzystanie z wbudowanego obliczania współczynników serii Taylora, więc może trochę oszukiwać. Nauczyłem się tutaj .

   (%-.-*:)t.

   (%-.-*:)t. 0 1 2 3 4 5 10 100
0 1 1 2 3 5 55 354224848179261915075
randomra
źródło
2
@ aditsu (q:^-^:p) 6jest 64 729tam, gdzie p jest parzyste. J jest prawdopodobnie dobry do tego, co robi zagadki. :)
randomra,
2
Jeszcze lepiej: (<:^-^:>) 4jest 81i <:^-^:> 4jest 53.5982.
randomra
2
Pokazane tutaj emoji jest tym, do czego powinien dążyć cały kod J. Na marginesie, inną alternatywą jest +/@:!&i.-użycie 9 bajtów.
mile
1
@miles Very nice! Powinieneś to opublikować, ponieważ jest to zupełnie inne niż moje.
randomra
21

Sześciokąt ,18 14 12

Dzięki Martin za 6 bajtów!

1="/}.!+/M8;

Rozszerzony:

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

Wypróbuj online


Stary, odpowiedz. Pozostaje, ponieważ obrazy i objaśnienia mogą być pomocne dla nowych użytkowników Hexagony.

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

Rozszerzony:

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

Spowoduje to wydrukowanie sekwencji Fibonacciego oddzielonej znakami nowej linii.

Wypróbuj online! Uważaj jednak, tłumacz online tak naprawdę nie lubi nieskończonej wydajności.

Wyjaśnienie

Istnieją dwa „podprogramy” tego programu, z których każdy jest obsługiwany przez jeden z dwóch używanych adresów IP. Pierwsza procedura drukuje znaki nowej linii, a druga wykonuje obliczenia i wyniki Fibonacciego.

Pierwszy podprogram rozpoczyna się w pierwszym wierszu i przez cały czas przesuwa się od lewej do prawej. Najpierw drukuje wartość wskaźnika pamięci (inicjowana na zero), a następnie zwiększa wartość wskaźnika pamięci o 1. Po braku operacji adres IP przeskakuje do trzeciej linii, która najpierw przełącza się na inną komórkę pamięci, a następnie drukuje nową linię. Ponieważ nowa linia ma wartość dodatnią (jej wartość wynosi 10), kod zawsze przeskakuje do piątej linii, następnie. Piąta linia zwraca wskaźnik pamięci do naszego numeru Fibonacciego, a następnie przełącza się na inny podprogram. Kiedy wrócimy z tego podprogramu, adres IP przeskoczy z powrotem do trzeciej linii po wykonaniu braku operacji.

Drugi podprogram rozpoczyna się w prawym górnym rogu i rozpoczyna ruch na południowy wschód. Po przerwie wracamy do drugiej linii na zachód. Ta linia wypisuje aktualny numer Fibonacciego, przed przeniesieniem wskaźnika pamięci do następnej lokalizacji. Następnie IP przeskakuje do czwartej linii, gdzie oblicza następną liczbę Fibonacciego za pomocą poprzednich dwóch. Następnie przekazuje kontrolę z powrotem do pierwszego podprogramu, ale gdy odzyskuje kontrolę nad programem, kontynuuje działanie, aż napotka skok, w którym odbija się od lustra, które pierwotnie służyło do wskazywania go na zachód, gdy wraca do drugiej linii.


Wstępne ładne zdjęcia!

Lewa strona obrazu to program, prawa strona reprezentuje pamięć. Niebieska ramka to pierwszy adres IP, a oba adresy IP wskazują następną instrukcję do wykonania.

enter image description here

Uwaga: Zdjęcia mogą wyglądać ładnie tylko dla osób o podobnie ograniczonych umiejętnościach w programach do edycji obrazów: PI doda co najmniej 2 kolejne iteracje, aby korzystanie z *operatora stało się bardziej przejrzyste.

Uwaga 2: Zobaczyłem odpowiedź alephalpha dopiero po napisaniu większości tego, pomyślałem, że wciąż była cenna z powodu separacji, ale rzeczywiste części Fibonacciego naszych programów są bardzo podobne. Ponadto jest to najmniejszy program Hexagony, który widziałem przy użyciu więcej niż jednego adresu IP, więc pomyślałem, że warto go zachować: P

FryAmTheEggman
źródło
Powinieneś zamieścić link do tego, co robiłeś, aby zrobić piękne zdjęcia, a następnie umieść link na esolangs.org/wiki/Hexagony .
mbomb007
1
@ mbomb007 Użyłem gimpa, aby ręcznie utworzyć każdą ramkę, a następnie przesłałem zdjęcia na jakąś stronę tworzącą gif. Chociaż kilka razy w trakcie tego procesu zastanawiałem się nad stworzeniem narzędzia do tego, biorąc pod uwagę jego żmudność.
FryAmTheEggman
@FryAmTheEggman Imponujące! Zrób to wyzwanie. Jestem pewien, że ktoś opublikuje odpowiedź. : D Jeszcze lepiej, jeśli możesz stworzyć stronę internetową podobną do internetowego tłumacza ryb.
mbomb007
@ mbomb007 To może być odrobinę ambitne, jeśli chodzi o wyzwanie na tej stronie, nie wspominając o tym, że prawdopodobnie bardzo ucierpiałby z powodu bardzo szerokiego zakresu. Nie sądzę, żebym to opublikował, ale możesz to zrobić samodzielnie, jeśli uważasz, że masz dobry sposób na przedstawienie tego. Ponadto uważam, że Timwi stworzył ideał C # dla heksagonii, chociaż nigdy go nie użyłem, ponieważ nie zawracałem sobie głowy mono.
FryAmTheEggman
1
@ mbomb007 Nawiasem mówiąc, ide mieszka tutaj , zapomniałem połączyć go ostatnim razem.
FryAmTheEggman
18

COW , 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
źródło
17

Python 2, 34 bajty

Python, używając rekurencji ... oto nadchodzi StackOverflow!

def f(i,j):print i;f(j,i+j)
f(1,1)
jtjacques
źródło
15

Galaretka , 3 bajty

+¡1

Wypróbuj online!

Jak to działa

+¡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.

¡ zagląda do dwóch linków po lewej stronie. Ponieważ jest tylko jeden, musi być ciałem pętli. Dlatego liczba jest odczytywana z wejścia. Ponieważ nie ma argumentów wiersza polecenia, liczba ta jest odczytywana ze STDIN.

Dennis
źródło
12

Golfscript - pojedynczy numer - 12/11/10

12 znaków do pobierania danych wejściowych ze standardowego wejścia:

~0 1@{.@+}*;

11 znaków dla danych wejściowych już na stosie:

0 1@{.@+}*;

10 znaków dla dalszego zdefiniowania 1 jako 0. liczby Fibonacciego:

1.@{.@+}*;
aaaaaaaaaaaa
źródło
1
Opcją jest „Oblicza, biorąc pod uwagę n, ntą liczbę Fibonacciego”. Więc porzuć ~i masz 11 znaków, które biorą nna stos i pozostawiają F_nna stosie.
Peter Taylor
12

Rubin

29 27 25 24 znaków

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

Edycja: uczyniła go nieskończoną pętlą. ;)

st0le
źródło
13
czy ktoś zauważył b=a+a=bpalindrom? :)
st0le
2
tak st0le zrobił :)
gnibbler
Wiem, że jestem spóźniony na przyjęcie, ale czy ktoś może wyjaśnić, jak b=a+a=bdziała ta część? Nie mogę się wokół tego owinąć.
Pan Llama,
3
@GigaWatt, Pomyśl o tym w ten sposób, instrukcje są wykonywane od lewej do prawej ... więcnewb=olda+(a=oldb)
st0le
możesz zapisać 2 znaki, używając loop:p 1,a=b=1;loop{p b=a+a=b}
Patrick Oscity
11

Mathematica, 9 znaków

Fibonacci

Jeśli wbudowane funkcje nie są dozwolone, oto wyraźne rozwiązanie:

Mathematica, 33 32 31 znaków

#&@@Nest[{+##,#}&@@#&,{0,1},#]&
celtschk
źródło
#&@@Nest[{#+#2,#}&@@#&,{0,1},#]&32 znaki.
chyanog,
1
@chyanog 31:#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Mr.Wizard
1
@ Mr.Wizard 24 znaki (26 bajtów):Round[GoldenRatio^#/√5]&
JungHwan Min
1
lub 23 znaki (27 bajtów):Round[((1+√5)/2)^#/√5]&
JungHwan Min
10

DC (20 bajtów)

Jako bonus jest nawet zaciemniony;)

zzr[dsb+lbrplax]dsax

EDYCJA: Mogę zaznaczyć, że wypisuje wszystkie liczby w sekwencji Fibonacciego, jeśli zaczekasz wystarczająco długo.

Hiato
źródło
13
Nie nazwałbym tego zaciemnionym - zaciemniony kod powinien być trudny do zrozumienia, a jeśli chodzi o dc, kod tutaj jest całkowicie prosty.
Nabb
10

Preludium , 12 bajtów

Jedno z niewielu wyzwań, w których Preludium jest dość konkurencyjne:

1(v!v)
  ^+^

Wymaga to interpretera Pythona, który drukuje wartości jako liczby dziesiętne zamiast znaków.

Wyjaśnienie

W Preludium wszystkie wiersze są wykonywane równolegle, a kolumny instrukcji przechodzą przez program. Każda linia ma własny stos, który jest inicjowany na zero.

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.

Pętla powtarza się na zawsze, ponieważ pierwszy stos nigdy nie będzie miał 0na wierzchu.

Zauważ, że zaczyna się sekwencja Fibonacciego od 0.

Martin Ender
źródło
10

Sześciokąt , 6 bajtów

Nie konkuruje, ponieważ język jest nowszy niż pytanie.

1.}=+!

Nie golfowany:

  1 .
 } = +
  ! .

Drukuje sekwencję Fibonacciego bez żadnego separatora.

alephalpha
źródło
2
Ma to niewielki problem, ponieważ nie drukuje żadnego separatora między liczbami. Nie jest to jednak dokładnie określone w wyzwaniu. (I naprawdę się cieszę, że ktoś używa Sześciokąta. :))
Martin Ender
9

TI-BASIC, 11

Legendarny golfista TI-BASIC Kenneth Hammond („Weregoose”) z tej strony . Działa w czasie O (1) i uważa, że ​​0 jest 0 terminem sekwencji Fibonacciego.

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

Używać:

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

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

Jak to działa? Jeśli wykonasz matematykę, okaże się, że sinh‾¹(.5)jest ona równa ln φ, więc jest to zmodyfikowana wersja formuły Bineta, która zaokrągla w dół zamiast używać (1/φ)^nterminu korygującego. round(Konieczna jest (okrągły do 9 miejsc po przecinku), aby uniknąć błędów zaokrągleń.

Thomas Kwa
źródło
8

K - 12

Oblicza ni n-1liczby Fibonacciego.

{x(|+\)/0 1}

Tylko nthliczba Fibonacciego.

{*x(|+\)/0 1}
izawdrony
źródło
+1 Nieźle! Jeśli możesz ją zmniejszyć tylko o jedną postać (i zapewnisz mi sposób jej przetestowania), zaakceptuję twoją odpowiedź. :-)
Chris Jester-Young
Jedynym sposobem jej zmniejszenia byłoby zastąpienie funkcji wywołaniem znanego numeru: n (| + \) / 0 1 Przetestuj ją za pomocą tego interpretera .
isawdrones
7

Julia, 18 bajtów

n->([1 1;1 0]^n)[]
Rɪᴋᴇʀ
źródło
7

Java, 55

Nie mogę tutaj konkurować ze zwięzłością większości języków, ale mogę zaoferować znacznie inny i być może znacznie szybszy (stały czas) sposób obliczenia n-tej liczby:

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

nto wejście (int lub long), zaczynające się od n = 1. Używa formuły Bineta i zaokrągla zamiast odejmowania.

Hans-Peter Störr
źródło
Uwielbiam to rozwiązanie
Andreas
Wydaje mi się, że to nie działa, ale jest wcześnie i być może czegoś mi brakuje! Zakładając, 0że jest to pierwsza liczba w sekwencji, daje 0, 0, 1, 1, 3, 4, 8, 12, 21, 33to pierwsze 10 liczb
Shaggy
@Shaggy Oops! Przepraszam, wprowadziłem błąd - naprawiony teraz.
Hans-Peter Störr
6

Ruby, 25 znaków

Odpowiedź st0le skrócona.

p 1,a=b=1;loop{p b=a+a=b}
Matma Rex
źródło
6
W rzeczywistości możesz go jeszcze bardziej skrócić, używająca=b=1;loop{p a;b=a+a=b}
Ventero
6
Więc st0le jego odpowiedź? : P
mbomb007,
6

FAC: funkcjonalne APL, 4 znaki (!!)

Nie moja, dlatego opublikowana jako wiki społeczności. FAC jest dialektem APL, który Hai-Chen Tu najwyraźniej zasugerował jako swoją pracę doktorską w 1985 roku. Później wraz z Alanem J. Perlisem napisał artykuł zatytułowany „ FAC: A Functional APL Language ”. Ten dialekt APL używa „leniwych tablic” i pozwala na tablice o nieskończonej długości. Definiuje operator „iter” ( ), aby umożliwić kompaktową definicję niektórych sekwencji rekurencyjnych.

Przypadek monadyczny („unarny”) jest w zasadzie przypadkiem Haskella iteratei jest zdefiniowany jako (F⌼) A ≡ A, (F A), (F (F A)), …. Dwójkowym ( „binarny”) sprawa jest nieco zdefiniowane analogicznie do dwóch zmiennych A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Dlaczego to jest przydatne? Jak się okazuje, jest to dokładnie taki rodzaj nawrotu, jaki ma sekwencja Fibonacciego. W rzeczywistości jednym z podanych przykładów jest

1+⌼1

tworząc znaną sekwencję 1 1 2 3 5 8 ….

A więc proszę bardzo krótka możliwa implementacja Fibonacciego w nieinnowacyjnym języku programowania. :RE

Robaczek świętojański
źródło
Och, przypadkowo nie opublikowałem w społeczności Twojego postu w ramach mojego (ręcznego) masowego odpakowywania. No cóż. ;-)
Chris Jester-Young
6

R, 40 bajtów

Nie widziałem rozwiązania R, więc:

f=function(n)ifelse(n<3,1,f(n-1)+f(n-2))
plannapus
źródło
1
Wiem, że to stara odpowiedź, ale możesz skrócić do 38 bajtów
Robert S.
6

Dodos , 26 bajtów

	dot F
F
	F dip
	F dip dip

Wypróbuj online!

Jak to działa

Funkcja F wykonuje wszystkie ciężkie podnoszenie; zdefiniowano go rekurencyjnie w następujący sposób.

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

Ilekroć n> 1 , mamy | n - 1 | = n - 1 <n oraz || n - 1 | - 1 | = | n - 1 - 1 | = n - 2 <n , więc funkcja zwraca (F (n - 1), F (n - 2)) .

Jeśli n = 0 , to | n - 1 | = 1> 0 ; jeśli n = 1 , to || n - 1 | - 1 | = | 0 - 1 | = 1 = 1 . W obu przypadkach, próba połączenia rekurencyjne F (1) podnieść Surrender wyjątek, więc F (0) zwraca 0 i F (1) zwraca 1 .

Na przykład F (3) = (F (1), F (2)) = (1, F (0), F (1)) = (1, 0, 1) .

Wreszcie, główna funkcja jest zdefiniowana jako

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

więc sumuje wszystkie współrzędne wektora zwrócone przez F. .

Na przykład main (3) = suma (F (3)) = suma (1, 0, 1) = 2 .

Dennis
źródło
5

Desmos , 61 bajtów

Grał w golfa

Kliknij add sliderprzycisk dla n.

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

Ostatni wiersz to wynik.

Nie golfił

Jest funkcją.

\phi =\frac{1+\sqrt{5}}{2}
f_{ibonacci}\left(n\right)=\frac{\phi ^n-\left(-\phi \right)^{-n}}{\sqrt{5}}
Conor O'Brien
źródło
5

Cubix , 10 bajtów

Odpowiedź niekonkurencyjna, ponieważ język jest nowszy niż pytanie.

Cubix to nowy, dwuwymiarowy język autorstwa @ETHproductions, w którym kod jest zawijany na kostkę o odpowiednim rozmiarze.

;.o.ON/+!)

Wypróbuj online

Zawija się to na kostkę 2 x 2 w następujący sposób

    ; .
    o .
O N / + ! ) . .
. . . . . . . .
    . .
    . .
  • O wyprowadza wartość TOS
  • N pchnij nową linię na stos
  • / odzwierciedlają północ
  • o wypisuje znak TOS
  • ; pop TOS
  • / odbij się na wschód po obejściu sześcianu
  • + dodaj 2 górne wartości stosu
  • ! pomiń następne polecenie, jeśli TOS wynosi 0
  • ) zwiększ TOS o 1. To zasadniczo rozpoczyna sekwencję.

Jest to nieskończona pętla, która drukuje sekwencję z separatorem nowej linii. Wykorzystuje to, że większość poleceń nie wyrzuca wartości ze stosu.
Jeśli separator zostanie zignorowany, można to zrobić za pomocą 5 bajtów.O+!)

MickyT
źródło
5

Brainfuck, 16,15, 14/13 znaków

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

Generuje sekwencję Fibonacciego i niczego nie drukuje. Jest także krótszy niż powyższy.

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

Ten ma 14 znaków, ale drukuje znaki ASCII z wartościami sekwencji Fibonacciego.

Stefnotch
źródło
1
To dobrze, ale czy nie miałbym racji twierdząc, że wersja 14-bajtowa wyprowadza dane tylko z drugiej 1? Jak w „1 2 3 5 8” zamiast „1 1 2 3 5 8”?
Charlim
1
@Charlim Och, masz rację. Nie mam pojęcia, co pomyślałem o mnie w 2014 roku. W każdym razie właśnie to naprawiłem, przenosząc instrukcję drukowania na przód pętli.
Stefnotch