Fibonacciho posloupnost je posloupnost čísel, kde každé číslo v sekvenci je součet dvou čísel, která mu předcházejí. První dvě čísla v pořadí jsou obě 1.

Zde je několik prvních výrazů

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

Napište nejkratší kód že buď:

  • Generuje Fibonacciho sekvenci bez konce.

  • Vzhledem k n vypočítá n ten člen posloupnosti. (Indexováno 1 nebo nula)

Můžete použít standardní formy vstupu a výstupu.

(Dal jsem obě možnosti, pokud je jednodušší dělat ve zvoleném jazyce než v druhém.)


U funkce, která přebírá n, přiměřeně velkou návratovou hodnotu (největší číslo Fibonacci, které musí odpovídat normální velikosti vašeho počítače, musí být podporována.


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> 

Komentáře

  • Tak nějak čekám na odpověď jako " f ", 1 bajt, v mém matematickém golfovém jazyce.

Odpověď

Perl 6, 10 znaků:

Anonymní nekonečný seznam sekvencí fibonacci:

^2,*+*...* 

Stejné jako:

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

Takže jej můžete přiřadit k poli:

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

nebo

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

A získejte prvních jedenáct hodnot (od 0 do 10) pomocí:

say @short-fibs[^11]; 

nebo pomocí:

say @fibs[^11]; 

Počkejte, prvních 50 čísel můžete získat také ze samotného anonymního seznamu:

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

Tím se vrátí:

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 

A některé jednoduché měřítko:

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

S:

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

EOF

Komentáře

  • Nechtěl bych ' ani myslet z ^2 jako náhrada za 0,1. +1
  • Toto již není platné, budete jej muset napsat jako |^2,*+*...*, což je stejný počet bajtů jako 0,1,*+*...*.
  • Perl je tak divný.
  • Ve které verzi Perlu 6 byla napsána tato odpověď?
  • @CalculatorFeline Došlo k velké změně známý jako GLR (Great List Refactor), ke kterému došlo krátce před prvním oficiálním vydáním, které bylo 25. 12. 2015. Tento kód by fungoval až do té doby.

Odpověď

Brainfuck, 22 tahů

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

Generuje sekvenci Fibonacci, která se postupně pohybuje přes paměťovou pásku.

Komentáře

  • Krásná ! Skutečně krásná! Nebo možná ne … každopádně +1 za toto 🙂
  • Toto je 3,344 nebo 4 bajtů v komprimovaném brainfucku. (6 ln (22)) / ln (256)
  • 16 bajtů: +[[<+>->+>+<<]>]
  • 14 bajtů: +[.[>+>+<<-]>]
  • @Stefnotch je samozřejmě kratší destruktivní. Výše uvedené řešení končí fibonacciho sekvencí na pásku, což také dělá 16bajtové řešení.

Odpověď

Haskell, 17 15 14 znaků

f=1:scanl(+)1f 

Vyzkoušejte online!

Komentáře

  • Proč nevyříznout dvě mezery na f=0:scanl(+)1 f?
  • @Martinho: Upraveno, děkuji.
  • Páni, to je ' ještě kratší než obvyklé f@(_:x)=0:1:zipWith(+)f x! Musíte si to pamatovat.
  • Můžete dokonce odstranit další prostor: f=0:scanl(+)1f.

Odpovědět

C # 4, 58 bajtů

stream (69; 65, je-li slabě zadán do IEnumerable)

(Za předpokladu using směrnice pro System.Collections.Generic.)

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

Jedna hodnota (58)

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

Komentáře

  • Vzhledem k tomu, že n je uint, n==0 lze zkrátit na n<1. A stream může ušetřit několik znaků tím, že se zbaví prostoru po obecném typu a vyhlásí x v širším rozsahu, než je nutné.Ve skutečnosti se příkop x úplně: n+=c;c=n-c;
  • @Peter: Díky, upravím, až dostanu nějaký čas.
  • Vaše verze s jednou hodnotou je tak dlouho, dokud můj rekurzivní výraz lambda odpoví … pěkně!
  • @ wizzwizz4, pokud ' nejsem mylně, pokud !n funguje, mělo by to být jen n, pokud podmínku převrátíte.
  • @JonSkeet Aw. A tady jsem myslel, že jsem ' porazil Jon Skeeta na C # … 🙂

Odpovědět

GolfScript, 12

Nyní, pouze 12 znaků!

1.{[email protected]+.}do 

Komentáře

  • +1 pěkná práce. Pokud nastavíte méně než 13 znaků, okamžitě přijmu ' vaši odpověď (samozřejmě, pokud někdo neposkytne ještě kratší odpověď). 😛
  • Miluji výzvu. Hotovo! 😉
  • Hezké, vyhráváte. Alespoň do té doby, než někdo něco zkrátí (pokud je to ' vůbec možné). 😛
  • tato definice je téměř stejně krátká jako samotný název ' Fibonacci '! +1

Odpověď

J, 10 znaků

Použití integrovaného výpočtu Koeficienty Taylorovy řady, takže možná trochu levný. Naučili jsme se zde .

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

Komentáře

  • @aditsu (q:^-^:p) 6 je 64 729 kde p je sudé. J je pravděpodobně dobré pro co dělá hádanky. 🙂
  • Ještě lepší: (<:^-^:>) 4 je 81 a <:^-^:> 4 je 53.5982.
  • Zde ukázaný emoji je to, k čemu by se měl snažit celý kód J. Na okraj je další alternativou +/@:!&i.- využití 9 bajtů.
  • @miles Velmi pěkné! Měli byste to zveřejnit, protože se úplně liší od mého.

Odpověď

> < > – 15 znaků

0:nao1v a+@:n:<o 

Komentáře

  • I když to můžete zkrátit na 0:nao1v LF a+@:n:<o pokud chcete. Dává 15 🙂 Ve skutečnosti to také činí výstup o něco čitelnějším …
  • 13 znaků: 01r:nao$:@+$r

Odpověď

Hexagony , 18 14 12

Děkujeme Martinovi za 6 bajtů!

1="/}.!+/M8; 

Rozšířeno:

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

Vyzkoušejte online


Staré, odpovězte. Toto je ponecháno, protože obrázky a vysvětlení mohou být užitečné pro nové uživatele Hexagony.

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

Rozšířeno:

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

Tím se vytiskne sekvence Fibonacci oddělená novými řádky.

Zkuste to online! Buďte opatrní, online interpret opravdu nemá rád nekonečný výstup.

Vysvětlení

K tomuto programu existují dva „podprogramy“, každý běží jednou ze dvou použitých IP adres. První rutina vytiskne nové řádky a druhý provádí výpočet a výstup Fibonacciho.

První podprogram začíná na prvním řádku a po celou dobu se pohybuje zleva doprava. Nejprve vytiskne hodnotu na ukazateli paměti (inicializovaný na nulu), a poté zvýší hodnotu na ukazateli paměti o 1. Po no-op IP skočí na třetí řádek, který nejprve přepne na jinou paměťovou buňku, poté vytiskne nový řádek. nový řádek má kladnou hodnotu (jeho hodnota je 10), th Kód vždy přeskočí na pátý řádek, další. Pátý řádek vrací ukazatel paměti na naše Fibonacciho číslo a poté přepne na další podprogram. Když se vrátíme z tohoto podprogramu, IP přeskočí zpět na třetí řádek po provedení no-op.

Druhý podprogram začíná v pravém horním rohu a začíná se pohybovat na jihovýchod. Po no-op jsme odraženi cestovat západem podél druhé linie. Tento řádek vytiskne aktuální číslo Fibonacciho, než přesune ukazatel paměti na další místo. Poté IP přeskočí na čtvrtý řádek, kde pomocí předchozích dvou vypočítá další Fibonacciho číslo. Potom dává kontrolu zpět prvnímu podprogramu, ale když získá kontrolu nad programem, pokračuje, dokud nenarazí na skok, kde se odrazí přes zrcadlo, které bylo původně použito k jeho nasměrování na západ, když se vrátí na druhý řádek.


Předběžné hezké obrázky!

Levá strana obrázku je program, pravá strana představuje paměť. Modré pole je první IP a obě IP ukazují na další instrukci, která má být provedena.

zde zadejte popis obrázku

Poznámka: Obrázky mohou být vypadají hezky pouze lidem, kteří mají podobně omezené dovednosti v programech pro úpravu obrázků: PI přidá alespoň 2 další iterace, aby bylo jasnější použití operátoru *.

Poznámka 2: Po napsání většiny z nich jsem viděl odpověď alephalpha , myslel jsem si, že je to stále cenné kvůli odloučení, ale skutečný Fibonacci části našich programů jsou si velmi podobné. Kromě toho se jedná o nejmenší program Hexagony, který jsem viděl využívat více než jednu IP, a proto jsem si myslel, že by bylo dobré si ho přesto ponechat: P

Komentáře

  • Měli byste odkazovat na cokoli, co jste použili k vytvoření krásných obrázků, a poté odkaz umístit na esolangs.org/wiki/ Hexagony .
  • @ mbomb007 K ručnímu vytvoření každého rámečku jsem použil gimp, poté jsem obrázky nahrál do nějakého gi f dělat webové stránky. I když jsem během tohoto procesu několikrát uvažoval o vytvoření nástroje, jak to udělat, vzhledem k tomu, jak zdlouhavé to bylo.
  • @FryAmTheEggman Působivé! Udělejte z toho výzvu. Jsem si ' jistý, že někdo pošle odpověď. : D Ještě lepší je, kdybyste mohli vytvořit web podobný online online tlumočníkovi '.
  • @ mbomb007 To by mohl být ambiciózní úkol na tomto webu. , nemluvě o tom, že by pravděpodobně hodně trpěl tím, že bude opravdu široký. Nemyslím si ', že to zveřejním, ale klidně to udělejte sami, pokud si myslíte, že to máte dobrý způsob, jak to prezentovat. Věřím také, že Timwi vytvořil C # ide pro hexagony, i když jsem ho ' nikdy nepoužíval, protože jsem se ' neobtěžoval s mono.
  • @ mbomb007 Ide žije mimochodem zde , mimochodem, zapomněl jej naposledy propojit.

Odpověď

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 

Odpověď

Python 2, 34 bajtů

Python, pomocí rekurze … zde přichází StackOverflow!

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

odpověď

Jelly , 3 bytes

+¡1 

Vyzkoušejte online!

Jak to funguje

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

¡ pokukuje po dvou odkazech vlevo. Protože existuje pouze jeden, musí to být tělo smyčky. Proto je ze vstupu načteno číslo. Protože neexistují žádné argumenty příkazového řádku, toto číslo se čte z STDIN.

Odpověď

Hexagony , 6 bytes

Nesoutěží, protože jazyk je novější než otázka.

1.}=+! 

Ungolfed:

 1 . } = + ! . 

Vytiskne Fibonacciho sekvenci bez oddělovače.

Komentáře

  • To má menší problém, že nevytiskne ' žádný oddělovač mezi čísly. To však není ' ve výzvě zcela dobře specifikováno. (A jsem ' opravdu šťastný, že někdo používá Hexagony. :))

Odpovědět

Golfscript – jedno číslo – 12/12/10

12 znaků pro převzetí vstupu od stdin:

~0 1@{.@+}*; 

11 znaků pro vstup již v zásobníku:

0 1@{.@+}*; 

10 znaků pro další definování 1 jako 0. Fibonacciho čísla:

1.@{.@+}*; 

Komentáře

  • Tato možnost je " Vypočítá vzhledem k n, ntému Fibonacciho číslu ". Vypusťte tedy ~ a máte 11 znaků, které vezmou n do zásobníku a ponechají F_n na zásobníku.

Odpověď

Ruby

29 27 25 24 znaků

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

Upravit: udělal z něj nekonečnou smyčku. 😉

Komentáře

  • všiml si někdo, že b=a+a=b je palindrom? 🙂
  • ano st0le ano 🙂
  • vím, že jsem ' m pozdě na večírek, ale může někdo vysvětlit, jak b=a+a=b část funguje? Zdá se mi, že mi to ' neobtočí hlavu.
  • @GigaWatt, přemýšlejte o tom takto, pokyny se provádějí zleva doprava …takže newb=olda+(a=oldb)
  • můžete uložit 2 znaky pomocí loop: p 1,a=b=1;loop{p b=a+a=b}

Odpověď

DC (20 bajtů)

Jako bonus to „s dokonce zmatený;)

zzr[dsb+lbrplax]dsax 

EDIT: Mohu upozornit, že vytiskne všechna čísla v sekvenci fibonacci, pokud počkáte dostatečně dlouho.

Komentáře

  • Nenazval bych to ' obfuskovaným – popleteným kódem má být obtížně pochopitelné a pokud jde o dc, kód je zde zcela přímočarý.

Odpověď

Mathematica, 9 znaků

Fibonacci 

Pokud integrované funkce nejsou povoleny, tady je explicitní řešení:

Mathematica, 33 32 31 znaků

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

Komentáře

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

odpověď

Prelude , 12 bajtů

Jedna z mála výzev, kde je Prelude ve skutečnosti docela konkurenceschopný:

1(v!v) ^+^ 

To vyžaduje překladač Pythonu , který tiskne hodnoty jako desetinná čísla místo znaků.

Vysvětlení

V Prelude, všechny řádky jsou prováděny paralelně, přičemž ukazatel instrukce prochází sloupci programu. Každý řádek má svůj vlastní zásobník, který je inicializován na nulu.

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. 

Smyčka se opakuje navždy, protože první zásobník nikdy nebude mít 0 nahoře.

Všimněte si, že tím se spustí Fibonacciho sekvence z 0.

Odpovědět

TI-BASIC, 11

Legendární TI-BASIC golfista Kenneth Hammond („Weregoose“) z tohoto webu . Běží v čase O (1) a považuje 0 za 0. termín Fibonacciho posloupnosti.

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

Použití:

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

Jak to funguje? Pokud uděláte matematiku, ukáže se, že sinh‾¹(.5) se rovná ln φ, takže se jedná o upravenou verzi Binetova vzorce, který místo použití (1/φ)^n opravného výrazu zaokrouhluje dolů. round( (zaokrouhleno na 9 desetinných míst) je potřeba, aby se zabránilo chybám zaokrouhlování.

Odpovědět

K – 12

Vypočítá n a n-1 Fibonacciho číslo.

{x(|+\)/0 1} 

Pouze nth číslo Fibonacci.

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

komentáře

  • +1 Není to špatné! Pokud byste jej mohli zmenšit pouze na jeden znak (a poskytnout mi způsob, jak to otestovat), přijmu ' vaši odpověď. 🙂
  • Jediným způsobem, jak to zmenšit, by bylo nahradit funkci voláním na známé číslo: n (| + \ ) / 0 1 Vyzkoušejte to pomocí tohoto tlumočníka .

Odpovědět

Java, 55

Nemohu zde konkurovat stručnosti většiny jazyků, ale mohu nabídnout podstatně odlišný a možná mnohem rychlejší (konstantní čas) způsob výpočtu n-tého čísla:

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

n je vstup (int nebo dlouhý), počínaje n = 1. Používá Binetův vzorec a zaokrouhlí se místo odečtení.

Komentáře

  • Miluji toto řešení
  • Zdá se mi, že to ' nefunguje, ale ' je to brzy a já možná něco chybí! Za předpokladu, že 0 bude první číslo v pořadí, dává to 0, 0, 1, 1, 3, 4, 8, 12, 21, 33 pro první t 10 čísel
  • @Shaggy Jejda! Omlouváme se, ale nyní jsem opravil chybu.

Odpověď

Julia, 18 bajtů

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

odpověď

Dodos , 26 bajtů

	dot F F 	F dip 	F dip dip 

Vyzkoušejte to online!

Jak to funguje

Funkce F provádí všechny těžké práce; je definován rekurzivně následujícím způsobem.

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

Kdykoli n> 1 máme | n – 1 | = n – 1 < n a || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , takže funkce vrátí (F (n – 1), F (n – 2)) .

Pokud n = 0 , pak | n – 1 | = 1> 0 ; pokud n = 1 , pak || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . V obou případech pokus o rekurzivní volání F (1) vyvolá Surrender výjimku, takže F (0) vrátí 0 a F (1) vrátí 1 .

Například F (3) = (F (1), F (2)) = (1 , F (0), F (1)) = (1, 0, 1) .

Nakonec main funkce je definována jako

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

, takže sčítá všechny souřadnice vráceného vektoru autor F .

Například main (3) = sum (F (3)) = sum (1, 0, 1) = 2 .

Komentáře

  • Četl jsem vaše README (DODOS) a jsem velmi zaujatý; je to opravdu elegantní koncept! Ale nemohu ho najít na Esolangu ani nikde jinde. Přišli jste s tím?

Odpověď

Ruby, 25 znaků

st0le Zkrácená odpověď.

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

Komentáře

  • Ve skutečnosti ji můžete ještě zkrátit pomocí a=b=1;loop{p a;b=a+a=b}
  • Takže stále odpovídáš na jeho odpověď?: P

Odpovědět

FAC: Funkční APL, 4 znaky (!!)

Není moje, proto se zveřejňuje jako komunitní wiki. FAC je dialekt APL, který Hai-Chen Tu zjevně navrhl jako svou disertační práci v roce 1985. Později napsal spolu s Alanem J. Perlisem článek s názvem „ FAC: A Functional APL Language „. Tento dialekt APL používá „líná pole“ a umožňují pole nekonečné délky. Definuje operátor „iter“ (), který umožňuje kompaktní definici některých rekurzivních sekvencí.

Monadický („unární“ „) případ je v podstatě Haskellův a je definován jako (F⌼) A ≡ A, (F A), (F (F A)), …. Dyadický („binární“) případ je definován poněkud analogicky pro dvě proměnné: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Proč je to užitečné? Jak se ukázalo, je to přesně ten druh opakování, který má Fibonacciho sekvence. Jedním z uvedených příkladů je ve skutečnosti

1+⌼1 

vytvoření známé sekvence 1 1 2 3 5 8 ….

Takže, tady máte, možná nejkratší možná implementace Fibonacci v programovacím jazyce, který není novinkou. : D

Komentáře

  • Ach, omylem jsem váš příspěvek zrušil v komunitě jako součást mého (manuálního) hromadného odhalování. Ach, dobře. 😉

Odpověď

R, 40 bajtů

Neviděl jsem Řešení R, takže:

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

Komentáře

  • Vím, že se jedná o starou odpověď, ale vy lze zkrátit na 38 bajtů

odpověď

05AB1E, 7 bajtů

Kód:

1$<FDr+ 

Vyzkoušejte to online!

Komentáře

  • Ahoj, vítejte v PPCG! Hezký první příspěvek!

Odpověď

GolfScript, 13 znaků

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

(Moje odpověď z předchozí otázka přetečení zásobníku .)

odpověď

Desmos , 61 bajtů

golfový

Klikněte na add slider tlačítko pro n.

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

Poslední řádek je výstup.

Ungolfed

je funkce.

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

Odpověď

Cubix , 10 bajtů

Nesoutěžící odpověď, protože jazyk je novější než otázka.

Cubix je nový dvourozměrný jazyk od společnosti @ETHproductions, pokud byl kód zabalen do krychle o velikosti vhodné pro přizpůsobení.

;.o.ON/+!) 

Vyzkoušejte online

Tím se zalomí do 2 x 2 krychle následujícím způsobem

 ; . o . O N / + ! ) . . . . . . . . . . . . . . 
  • O výstup hodnoty TOS
  • N posunout nový řádek do zásobníku
  • / odrážet sever
  • o vypíše charakter TOS
  • ; pop TOS
  • / odrážejí východ poté, co obejdou kostku
  • + přidají 2 nejlepší hodnoty zásobníku
  • ! přeskočit další příkaz, pokud je TOS 0
  • ) zvýšení TOS o 1. Tím se v zásadě odstartuje sekvence.

Toto je nekonečná smyčka, která vytiskne sekvenci pomocí oddělovače nového řádku. Využijte toho, že většina příkazů nevypíná hodnoty ze zásobníku.
Pokud je oddělovač ignorován, lze to provést s 5 bajty .O+!)

Odpověď

Brainfuck, 16,15, 14/13 znaků

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

Generuje sekvenci Fibonacci a nic nevytiskne. Je také kratší než výše uvedená.

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

Toto jeden má 14 znaků, ale vytiskne znaky ASCII s hodnotami Fibonacciho posloupnosti.

Komentáře

  • To je dobré, ale byl bych nesprávný tím, že říká, že 14bajtová verze vychází pouze od 2. 1.? Jako v " 1 2 3 5 8 " místo " 1 1 2 3 5 8 "?
  • @Charlim Ach, vy ' máte pravdu. Nemám tušení, co si myslel já z roku 2014. Každopádně jsem to napravil pomocí mov tiskové instrukce na začátek smyčky.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *