Ciąg Fibonacciego to ciąg liczb, w którym każda liczba w sekwencji jest sumą dwóch poprzedzających ją liczb. Pierwsze dwie liczby w sekwencji to 1.

Oto kilka pierwszych terminów

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

Wpisz najkrótszy kod to albo:

  • Generuje ciąg Fibonacciego bez końca.

  • Biorąc pod uwagę n oblicza n termin sekwencji. (Indeksowane 1 lub zero)

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

(Podałem obie opcje na wypadek, gdyby jedna była łatwiejsza zrobić w wybranym przez siebie języku.)


W przypadku funkcji, która przyjmuje n, odpowiednio dużą wartość zwracaną (największą liczbę Fibonacciego, która pasuje przynajmniej do normalnego rozmiaru słowa Twojego komputera).


Leaderboard

 /* Configuration */ var QUESTION_ID = 85; // Obtain this from the url // It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 3; // This should be the user ID of the challenge author. /* App */ var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(";") + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = "<h1>" + c.body.replace(OVERRIDE_REG, "") + "</h1>"; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery("<a>"+lang+"</a>").text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1; if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } } 
 body { text-align: left !important; display: block !important; } #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/all.css?v=ffb5d0584c5f"> <div> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody> </tbody> </table> </div> <div> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody> </tbody> </table> </div> <table style="display: none"> <tbody> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> 

Komentarze

  • W pewnym sensie czekam na odpowiedź typu " f ", 1 bajt, w moim matematycznym języku golfa.

Odpowiedź

Perl 6, 10 znaków:

Anonimowa nieskończona lista sekwencji fibonacciego:

^2,*+*...* 

To samo co:

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 pobierz pierwsze jedenaście wartości (od 0 do 10) za pomocą:

say @short-fibs[^11]; 

lub:

say @fibs[^11]; 

Czekaj, możesz też pobrać pierwsze 50 liczb z samej listy anonimowej:

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 porównawczych:

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

Z:

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

EOF

Komentarze

  • Nie ' nawet bym nie pomyślał z ^2 jako zamiennik dla 0,1. +1
  • To już nie jest poprawne, będziesz musiał zapisać go jako |^2,*+*...*, czyli tyle samo bajtów, co 0,1,*+*...*.
  • Perl jest taki dziwny.
  • W której wersji Perla 6 została napisana ta odpowiedź?
  • @CalculatorFeline Nastąpiła duża zmiana znany jako GLR (Great List Refactor), który wydarzył się na krótko przed pierwszym oficjalnym wydaniem, które miało miejsce 25.12.2015. Ten kod działałby do tego czasu.

Odpowiedź

Brainfuck, 22 uderzenia

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

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

Komentarze

  • Piękne ! Pięknie miotowo! A może nie … w każdym razie +1 za to 🙂
  • To jest 3,344 lub 4 bajty w skompresowanym mózgu. (6 ln (22)) / ln (256)
  • 16 bajtów: +[[<+>->+>+<<]>]
  • 14 bajtów: +[.[>+>+<<-]>]
  • @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.

Odpowiedź

Haskell, 17 15 14 znaków

f=1:scanl(+)1f 

Wypróbuj online!

Komentarze

  • Dlaczego nie wyciąć dwóch spacji do f=0:scanl(+)1 f?
  • @Martinho: Edytowano, dziękuję.
  • Wow, że ' jest nawet krótszy niż zwykle f@(_:x)=0:1:zipWith(+)f x! Musisz o tym pamiętać.
  • Możesz nawet usunąć kolejną spację: f=0:scanl(+)1f.

Odpowiedź

C # 4, 58 bajtów

Stream (69; 65, jeśli wpisano słabo do IEnumerable)

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

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

Pojedyncza wartość (58)

int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);} 

Komentarze

  • Biorąc pod uwagę, że n to uint, n==0 można skrócić do n<1. Strumień może zaoszczędzić kilka znaków, usuwając spację po typie ogólnym i deklarując x w szerszym zakresie niż to konieczne.W rzeczywistości ditch x w całości: n+=c;c=n-c;
  • @Peter: Dzięki, wyedytuję, gdy będę miał trochę czasu.
  • Twoja pojedyncza wersja jest tak długa, jak moje rekurencyjne wyrażenie lambda odpowiada … fajnie!
  • @ wizzwizz4 if I ' m nie pomylony, jeśli !n działa, to po prostu n jeśli zmienisz warunek.
  • @JonSkeet Aw. I tutaj pomyślałem, że ' pokonałem Jona Skeeta w C # … 🙂

Odpowiedź

GolfScript, 12

Teraz tylko 12 znaków!

1.{[email protected]+.}do 

Komentarze

  • +1 niezła robota. Jeśli zredukujesz jej długość do 13 znaków, ' natychmiast zaakceptuję twoją odpowiedź (chyba że ktoś poda jeszcze krótszą odpowiedź). 😛
  • Uwielbiam wyzwania. Gotowy! 😉
  • Świetnie, wygrywasz. Przynajmniej dopóki ktoś nie zrobi czegoś jeszcze krótszego (jeśli to ' jest w ogóle możliwe). 😛
  • ta definicja jest prawie tak krótka, jak sama nazwa ' Fibonacci '! +1

Odpowiedź

J, 10 znaków

Korzystanie z wbudowanego obliczenia Współczynniki szeregu Taylora, więc może trochę oszukańcze. Nauczyłem się tego tutaj .

 (%-.-*:)t. (%-.-*:)t. 0 1 2 3 4 5 10 100 0 1 1 2 3 5 55 354224848179261915075 

Komentarze

  • @aditsu (q:^-^:p) 6 to 64 729, gdzie p jest parzyste. J prawdopodobnie nadaje się do zagadek tego, co robi . 🙂
  • Jeszcze lepiej: (<:^-^:>) 4 to 81 i <:^-^:> 4 to 53.5982.
  • Przedstawione tutaj emotikony są tym, do czego powinien dążyć cały kod J. Na marginesie, inną alternatywą jest +/@:!&i.- przy użyciu 9 bajtów.
  • @ mil. Bardzo fajnie! Powinieneś go opublikować, ponieważ jest całkowicie inny od mojego.

Odpowiedź

> < > – 15 znaków

0:nao1v a+@:n:<o 

Komentarze

  • Możesz go skrócić do 0:nao1v LF a+@:n:<o jeśli chcesz. Daje 15 🙂 Właściwie to również sprawia, że wynik jest nieco bardziej czytelny …
  • 13 znaków: 01r:nao$:@+$r

Odpowiedź

Hexagony , 18 14 12

Dziękuję Marcinowi za 6 bajtów!

1="/}.!+/M8; 

Rozszerzony:

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

Wypróbuj online


Stara odpowiedź. Zostało to pozostawione, ponieważ obrazy i wyjaśnienia mogą być pomocne dla nowych użytkowników Hexagony.

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

Rozwinięty:

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

Spowoduje to wydrukowanie sekwencji Fibonacciego oddzielonej znakami nowej linii.

Wypróbuj online! Uważaj jednak, interpreter naprawdę nie lubi nieskończonego wyjścia.

Wyjaśnienie

W tym programie są dwa „podprogramy”, każdy jest uruchamiany przez jeden z dwóch używanych adresów IP. Pierwsza procedura wypisuje znaki nowej linii , a drugi wykonuje obliczenia i dane wyjściowe Fibonacciego.

Pierwszy podprogram zaczyna się w pierwszej linii i przez cały czas przesuwa się od lewej do prawej. Najpierw wypisuje wartość na wskaźniku pamięci (zainicjowaną do zera), a następnie zwiększa wartość wskaźnika pamięci o 1. Po niepowodzeniu IP przeskakuje do trzeciej linii, która najpierw przełącza się do innej komórki pamięci, a następnie drukuje znak nowej linii. nowa linia ma wartość dodatnią (jej wartość to 10), th Kod zawsze przeskoczy do piątej linii, następnej. Piąta linia zwraca wskaźnik pamięci do naszej liczby Fibonacciego, a następnie przełącza się na inny podprogram. Kiedy wrócimy z tego podprogramu, IP przeskoczy z powrotem do trzeciej linii, po wykonaniu operacji no-op.

Drugi podprogram zaczyna się w prawym górnym rogu i zaczyna poruszać się na południowy wschód. Po nieudanej próbie zostajemy zmuszeni do podróży na zachód drugą linią. Ta linia wypisuje bieżącą liczbę Fibonacciego, przed przeniesieniem wskaźnika pamięci do następnej lokalizacji. Następnie adres IP przeskakuje do czwartej linii, gdzie oblicza następną liczbę Fibonacciego na podstawie dwóch poprzednich. Następnie przekazuje kontrolę z powrotem do pierwszego podprogramu, ale kiedy odzyskuje kontrolę nad programem, kontynuuje, dopóki nie napotka skoku, gdzie odbija się od lustra, które pierwotnie było używane do skierowania go na zachód, podczas powrotu do drugiej linii.


Wstępne ładne obrazki!

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

tutaj wprowadź opis obrazu

Uwaga: zdjęcia mogą wydają się ładne tylko dla osób, które mają podobnie ograniczone umiejętności z programami do edycji obrazów: PI doda co najmniej 2 kolejne iteracje, dzięki czemu użycie operatora * stanie się bardziej przejrzyste.

Uwaga 2: po napisaniu większości z nich widziałem tylko odpowiedź alephalpha , doszedłem do wniosku, że jest nadal cenna ze względu na separację, ale faktyczny Fibonacci części naszych programów są bardzo podobne. Ponadto jest to najmniejszy program Hexagony, jaki widziałem, wykorzystujący więcej niż jeden adres IP, więc pomyślałem, że i tak dobrze byłoby zachować: P

Komentarze

  • Powinieneś podać link do tego, czego użyłeś do zrobienia ładnych obrazków, a następnie umieścić link na esolangs.org/wiki/ Hexagony .
  • @ mbomb007 Użyłem programu Gimp, aby ręcznie utworzyć każdą klatkę, a następnie załadowałem obrazy do jakiegoś gi tworzenie strony internetowej. Chociaż kilka razy w trakcie tego procesu rozważałem stworzenie narzędzia do tego, biorąc pod uwagę, jakie to było żmudne.
  • @FryAmTheEggman Imponujące! Podejmij wyzwanie. Jestem ' Jestem pewien, że ktoś opublikuje odpowiedź. : D Jeszcze lepiej, gdybyś mógł stworzyć stronę internetową podobną do narzędzia do tłumaczenia online '.
  • @ mbomb007 To może być odrobinę ambitne jak na wyzwanie na tej stronie , nie wspominając o tym, że prawdopodobnie bardzo ucierpiałoby, gdyby był naprawdę szeroki. Nie ' nie sądzę, żebym to opublikował, ale nie krępuj się zrobić to sam, jeśli uważasz, że potrafisz to dobrze przedstawić. Uważam również, że Timwi stworzył C # ide dla hexagony, chociaż nigdy ' go nie używałem, ponieważ nie ' nie przejmowałem się monofonią.
  • @ mbomb007 Ide żyje tutaj , nawiasem mówiąc, zapomniał połączyć go ostatnim razem.

Odpowiedź

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 

Odpowiedź

Python 2, 34 bajty

Python, używając rekurencji … tutaj przychodzi StackOverflow!

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

Odpowiedź

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. 

¡ zerka na dwa linki po lewej stronie. Ponieważ jest tylko jeden, musi to być korpus pętli. Dlatego z wejścia odczytywana jest liczba. Ponieważ nie ma argumentów wiersza poleceń, ta liczba jest odczytywana z STDIN.

Odpowiedź

Heksagonia , 6 bajtów

Brak konkurencji, ponieważ język jest nowszy niż pytanie.

1.}=+! 

Ungolfed:

 1 . } = + ! . 

Drukuje ciąg Fibonacciego bez żadnego separatora.

Komentarze

  • Ma to niewielki problem, że nie ' nie wyświetla żadnego separatora między liczbami. Nie jest to jednak ' całkowicie dobrze określone w wyzwaniu. (I ' jestem naprawdę szczęśliwy, że ktoś używa Hexagony. :))

Odpowiedź

Golfscript – pojedyncza liczba – 11.12.10

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

~0 1@{.@+}*; 

11 znaków do wprowadzenia już na stosie:

0 1@{.@+}*; 

10 znaków do dalszego zdefiniowania 1 jako zerowej liczby Fibonacciego:

1.@{.@+}*; 

Komentarze

  • Ta opcja to " Oblicza, biorąc pod uwagę n, n-tą liczbę Fibonacciego ". Porzuć więc ~ i masz 11 znaków, które zajmują n na stosie i pozostaw F_n na stosie.

Odpowiedź

Ruby

29 27 25 24 znaki

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

Edycja: uczyniłem z niego nieskończoną pętlę. 😉

Komentarze

  • czy ktoś zauważył, że b=a+a=b to palindrom? 🙂
  • tak, st0le zrobił 🙂
  • Wiem, że ' spóźniłem się na imprezę, ale czy ktoś może wyjaśnić, jak b=a+a=b część działa? Czy ' nie wydaje się owijać wokół tego głowy.
  • @GigaWatt, Pomyśl o tym w ten sposób, instrukcje są wykonywane od lewej do prawej …więc newb=olda+(a=oldb)
  • możesz zapisać 2 znaki, używając loop: p 1,a=b=1;loop{p b=a+a=b}

Odpowiedź

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 czekasz wystarczająco długo.

Komentarze

  • Nie ' nie nazywałbym tego zaciemnionym – zaciemnionym kodem powinien być trudny do zrozumienia, a jeśli chodzi o dc, kod tutaj jest całkowicie prosty.

Odpowiedź

Mathematica, 9 znaków

Fibonacci 

Jeśli wbudowane funkcje są niedozwolone. Oto wyraźne rozwiązanie:

Mathematica, 33 32 31 znaków

#&@@Nest[{+##,#}&@@#&,{0,1},#]& 

Komentarze

  • #&@@Nest[{#+#2,#}&@@#&,{0,1},#]& 32 znaki.
  • @chyanog 31: #&@@Nest[{+##,#}&@@#&,{0,1},#]&
  • @ Mr.Wizard 24 znaki (26 bajtów): Round[GoldenRatio^#/√5]&
  • lub 23 znaki (27 bajtów): Round[((1+√5)/2)^#/√5]&

Odpowiedź

Prelude , 12 bajtów

Jedno z niewielu wyzwań, w których Prelude jest rzeczywiście dość konkurencyjny:

1(v!v) ^+^ 

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

Wyjaśnienie

W programie Prelude, wszystkie wiersze są wykonywane równolegle, przy czym wskaźnik instrukcji przechodzi przez kolumny programu. Każda linia ma swój własny stos, który jest inicjalizowany 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ę w nieskończoność, ponieważ pierwszy stos nigdy nie będzie miał 0 na górze.

Zwróć uwagę, że zaczyna to ciąg Fibonacciego od 0.

Odpowiedź

TI-BASIC, 11

Legendarny golfista TI-BASIC, Kenneth Hammond („Weregoose”), z tej strony . Działa w czasie O (1) i uważa 0 za zerowy człon ciągu Fibonacciego.

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

Do użycia:

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

Jak to działa? Po obliczeniu okaże się, że sinh‾¹(.5) jest równe ln φ, więc jest to zmodyfikowana wersja formuły Bineta, która zaokrągla w dół zamiast używać składnika korygującego (1/φ)^n. round( (zaokrąglenie do 9 miejsc po przecinku) jest potrzebne, aby zapobiec błędom zaokrągleń.

Odpowiedź

K – 12

Oblicza n i n-1 liczbę Fibonacciego.

{x(|+\)/0 1} 

Tylko nth liczba Fibonacciego.

{*x(|+\)/0 1} 

Komentarze

  • +1 Nieźle! Gdybyś mógł zmniejszyć to tylko o jeden znak (i podać mi sposób na przetestowanie), ' zaakceptuję twoją odpowiedź. 🙂
  • Jedynym sposobem na zmniejszenie tej funkcji byłoby zastąpienie funkcji wywołaniem znanego numeru: n (| + \ ) / 0 1 Przetestuj za pomocą tego interpretera .

Odpowiedź

Java, 55

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

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

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

Komentarze

  • Uwielbiam to rozwiązanie
  • To nie ' wydaje się działać w moim przypadku, ale ' jest wcześnie i być może czegoś brakuje! Zakładając, że 0 jest pierwszą liczbą w sekwencji, daje to 0, 0, 1, 1, 3, 4, 8, 12, 21, 33 na początek t 10 liczb
  • @Shaggy Ups! Przepraszamy, wprowadziłem błąd – już naprawiony.

Odpowiedź

Julia, 18 bajtów

n->([1 1;1 0]^n)[] 

Odpowiedź

Dodos , 26 bajtów

	dot F F 	F dip 	F dip dip 

Wypróbuj online!

Jak to działa

Funkcja F wykonuje całe podnoszenie ciężarów; jest zdefiniowany rekurencyjnie w następujący sposób.

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

Zawsze, gdy n> 1 , mamy | n – 1 | = n – 1 < n i || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , więc funkcja zwraca (F (n – 1), F (n – 2)) .

Jeśli n = 0 , a następnie | n – 1 | = 1> 0 ; jeśli n = 1 , to || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . W obu przypadkach próby wywołań rekurencyjnych F (1) zgłaszają wyjątek Surrender , 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) .

Na koniec funkcja główna jest zdefiniowana jako

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

, więc sumuje wszystkie współrzędne zwróconego wektora autor: F .

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

Komentarze

  • Czytałem twój README (DODOS) i jestem bardzo zaintrygowany; to naprawdę fajna koncepcja! Ale nie mogę go znaleźć na Esolangs ani nigdzie indziej. Czy to wymyśliłeś?

Odpowiedź

Ruby, 25 znaków

st0le „odpowiedź skrócona.

p 1,a=b=1;loop{p b=a+a=b} 

Komentarze

  • Właściwie możesz skrócić ją jeszcze bardziej, używając a=b=1;loop{p a;b=a+a=b}
  • Więc zastanawiasz się nad jego odpowiedzią?: P

Odpowiedź

FAC: Funkcjonalny APL, 4 znaki (!!)

Nie mój, dlatego został opublikowany jako wiki społeczności. FAC to dialekt APL, który Hai-Chen Tu najwyraźniej zasugerował jako swoją rozprawę doktorską w 1985 roku. Później napisał artykuł wraz z Alanem J. Perlisem zatytułowany „ FAC: funkcjonalny język APL ”. Ten dialekt APL używa „leniwych tablic” i zezwalaj na tablice o nieskończonej długości. Definiuje operator „iter” (), aby umożliwić zwięzłą definicję niektórych sekwencji rekurencyjnych.

Monadyczny („jednoargumentowy „) przypadek to w zasadzie Haskell” s i jest zdefiniowany jako (F⌼) A ≡ A, (F A), (F (F A)), …. Przypadek diadyczny („binarny”) jest definiowany nieco analogicznie dla dwóch zmiennych: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Dlaczego jest to przydatne? Cóż, jak się okazuje, jest to dokładnie taki rodzaj nawrotu, jaki ma ciąg Fibonacciego. W rzeczywistości jednym z podanych przykładów jest

1+⌼1 

tworzenie znanej sekwencji 1 1 2 3 5 8 ….

A więc proszę bardzo, najprawdopodobniej najkrótsza możliwa implementacja Fibonacciego w nie nowatorskim języku programowania. : D

Komentarze

  • Och, przypadkowo usunąłem ze społeczności Twój post w wikipedii jako część mojego (ręcznego) masowego usuwania bez użycia znaków. No cóż. 😉

Odpowiedź

R, 40 bajtów

Nie widziałem R, więc:

f=function(n)ifelse(n<3,1,f(n-1)+f(n-2)) 

Komentarze

  • Wiem, że to stara odpowiedź, ale Ty można skrócić do 38 bajtów

Odpowiedź

05AB1E, 7 bajtów

Kod:

1$<FDr+ 

Wypróbuj online!

Komentarze

  • Cześć i witaj w PPCG! Niezły pierwszy post!

Odpowiedź

GolfScript, 13 znaków

2,~{..p@+.}do 

(Moja odpowiedź z poprzednie pytanie dotyczące przepełnienia stosu .)

Odpowiedź

Desmos , 61 bajtów

Golfed

Kliknij przycisk add slider przycisk n.

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

Ostatnia linia to wynik.

Ungolfed

To funkcja.

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

Odpowiedź

Cubix , 10 bajtów

Niekwestionująca odpowiedź, ponieważ język jest nowszy niż pytanie.

Cubix to nowy dwuwymiarowy język autorstwa @ETHproductions, w którym kod jest zawinięty w sześcian o odpowiednim rozmiarze.

;.o.ON/+!) 

Wypróbuj online

To kończy się na 2 x 2 w następujący sposób

 ; . o . O N / + ! ) . . . . . . . . . . . . . . 
  • O wyświetla wartość TOS
  • N umieść znak nowej linii na stosie
  • / odzwierciedl północ
  • o wyświetla znak TOS
  • ; pop TOS
  • / odbij 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 wypisuje sekwencję z separatorem nowej linii. Wykorzystuje to fakt, że większość poleceń nie zdejmuje wartości ze stosu.
Jeśli separator jest zignorowany, można to zrobić za pomocą 5 bajtów .O+!)

Odpowiedź

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

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

Generuje ciąg Fibonacciego i niczego nie drukuje. Ponadto jest krótszy niż powyższy.

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

To jeden ma 14 znaków, ale wypisuje znaki ASCII z wartościami sekwencji Fibonacciego.

Komentarze

  • To dobrze, ale czy byłbym niepoprawny mówiąc, że wersja 14-bajtowa wyprowadza tylko od drugiego 1? Jak w " 1 2 3 5 8 " zamiast " 1 1 2 3 5 8 "?
  • @Charlim Och, ty ' racja. Nie mam pojęcia, co myślał ja z 2014. W każdym razie naprawiłem to przez mov umieszczanie instrukcji print na początku pętli.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *