Fibonacci-sekvenssi on numerosarja, jossa jokainen luku järjestyksessä on sitä edeltävien kahden luvun summa. Sarjan kaksi ensimmäistä numeroa ovat molemmat 1.

Tässä ovat ensimmäiset termit

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

Kirjoita lyhin koodi että joko:

  • Luo Fibonacci-sekvenssin ilman loppua.

  • Annettu n laskee sekvenssin n kolmannen termin. (Joko 1 tai nolla indeksoitu)

Voit käyttää vakiomuotoisia syöttö- ja tulostusmuotoja.

(Annoin molemmat vaihtoehdot siinä tapauksessa, että yksi on helpompi tehdä valitsemallasi kielellä kuin toinen.)


Funktiolle, joka vie n, kohtuullisen suuren palautusarvon (suurin Fibonacci-luku, joka on sopii tietokoneesi normaaliin sanakokoon vähintään) on tuettava.


Tulostaulukko

 /* 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> 

kommentit

  • Odotan tavallaan vastausta, kuten " f ", 1 tavu, matematiikkaperusteisella golfkielelläni.

Vastaa

Perl 6, 10 merkkiä:

Nimetön ääretön fibonacci-sekvenssiluettelo:

^2,*+*...* 

Sama kuin:

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

Voit siis määrittää sen matriisiin:

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

tai

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

Ja hae ensimmäiset yksitoista arvoa (0-10):

say @short-fibs[^11]; 

tai:

say @fibs[^11]; 

Odota, voit saada myös ensimmäiset 50 numeroa itse nimettömästä luettelosta:

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

Tämä palauttaa:

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 

Ja yksinkertainen vertailuarvo:

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

Kanssa:

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

EOF

kommentit

  • En edes ajattelisi ' ^2 korvaa 0,1. +1
  • Tämä ei ole enää voimassa, sinun on kirjoitettava se nimellä |^2,*+*...*, joka on sama määrä tavuja kuin 0,1,*+*...*.
  • Perl on niin outo.
  • Mihin Perl 6 -versioon tämä vastaus kirjoitettiin?
  • @CalculatorFeline Oli suuri muutos tunnetaan nimellä GLR (Great List Refactor), joka tapahtui vähän ennen ensimmäistä virallista julkaisua, joka oli 25.12.2015. Tämä koodi olisi toiminut siihen asti.

Vastaa

Brainfuck, 22 lyöntiä

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

Luo Fibonacci-jakson, joka liikkuu vähitellen muistinauhan yli.

Kommentit

  • kaunis ! Kertauksellisen kaunis! Tai ehkä ei … joka tapauksessa +1 tälle 🙂
  • Tämä on 3 344 tai 4 tavua pakatussa aivoriihissä. (6 ln (22)) / ln (256)
  • 16 tavua: +[[<+>->+>+<<]>]
  • 14 tavua: +[.[>+>+<<-]>]
  • @Stefnotch, tietysti, lyhyempi on tuhoisa. Yllä oleva ratkaisu päättyy nauhan fibonacci-sekvenssiin, minkä tekee myös 16 tavun ratkaisu.

Vastaa

Haskell, 17 15 14 merkkiä

f=1:scanl(+)1f 

Kokeile verkossa!

Kommentit

  • Miksi ei leikata kahta välilyöntiä f=0:scanl(+)1 f?
  • @Martinho: Muokattu, kiitos.
  • Vau, että ' on jopa lyhyempi kuin tavallinen f@(_:x)=0:1:zipWith(+)f x! Täytyy muistaa se.
  • Voit jopa poistaa toisen välilyönnin: f=0:scanl(+)1f.

Vastaa

C # 4, 58 tavua

Stream (69; 65, jos kirjoitetaan heikosti IEnumerable)

(Oletetaan using -direktiivi System.Collections.Generic.)

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

Yksi arvo (58)

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

Kommentit

  • Koska n on uint, n==0 voidaan lyhentää muotoon n<1. Ja virta voi säästää muutaman merkin, kun ojitetaan tila geneerisen tyypin jälkeen ja ilmoitetaan x laajemmalle alueelle kuin on tarpeen.Itse asiassa oja x kokonaan: n+=c;c=n-c;
  • @Peter: Kiitos, muokkaan, kun saan jonkin aikaa.
  • Yksiarvoinen versiosi on niin kauan kuin rekursiivinen lambda-lauseke vastaa … mukavaa!
  • @ wizzwizz4 jos en ' en väärin, jos !n toimii, niin niin pitäisi olla vain n, jos käännät ehdollista.
  • @JonSkeet Aw. Ja tässä ajattelin, että ' lyöin Jon Skeetia C #: ssä 🙂

vastaus

GolfScript, 12

Nyt vain 12 merkkiä!

1.{[email protected]+.}do 

Kommentit

  • +1 mukavaa työtä. Jos teet sen lyhyemmäksi kuin 13 merkkiä, ' hyväksyn vastauksesi heti (ellei joku vastaa vieläkin lyhyempää vastausta). 😛
  • Rakastan haastetta. Tehty! 😉
  • Hienoa, voitat. Ainakin, kunnes joku tekee jotain vielä lyhyempää (jos se on ' mahdollista). 😛
  • tämä määritelmä on melkein yhtä lyhyt kuin itse nimi ' Fibonacci '! +1

vastaus

J, 10 merkkiä

Sisäänrakennetun laskennan käyttö Taylor-sarjan kertoimet, joten ehkä vähän huijaavia. Opi sen täällä .

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

Kommentit

  • @aditsu (q:^-^:p) 6 on 64 729 missä p on tasainen. J on todennäköisesti hyvä mitä se tekee arvoituksille. 🙂
  • Vielä parempi: (<:^-^:>) 4 on 81 ja <:^-^:> 4 on 53.5982.
  • Tässä osoitettu emoji on se, mihin kaikkien J-koodien tulisi pyrkiä. Sivuhuomautuksessa toinen vaihtoehto on +/@:!&i.-, jossa käytetään 9 tavua.
  • @miles Very nice! Sinun tulee lähettää se, koska se on täysin erilainen kuin minun.

Vastaa

> < > – 15 merkkiä

0:nao1v a+@:n:<o 

Kommentit

  • Vaikka voitkin lyhentää sen muotoon 0:nao1v LF a+@:n:<o jos haluat. Antaa 15 🙂 Itse asiassa tämä tekee myös lähdön hieman luettavammaksi …
  • 13 merkkiä: 01r:nao$:@+$r

vastaus

kuusikulmio , 18 14 12

Kiitos Martin 6 tavusta!

1="/}.!+/M8; 

Laajennettu:

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

Kokeile online-tilassa


Vanha, vastaa. Tämä jätetään sisään, koska kuvat ja selitykset voivat olla hyödyllisiä uusille Hexagony-käyttäjille.

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

Laajennettu:

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

Tämä tulostaa Fibonacci-sarjan uusilla viivoilla erotettuna.

Kokeile verkossa! Ole kuitenkin varovainen, online tulkki ei todellakaan pidä äärettömästä ulostulosta.

Selitys

Tässä ohjelmassa on kaksi ”aliohjelmaa”, joista kukin toimii yhdellä kahdesta käytetystä IP: stä. Ensimmäinen rutiini tulostaa uudet rivit , ja toinen suorittaa Fibonaccin laskennan ja tulostuksen.

Ensimmäinen aliohjelma alkaa ensimmäiseltä riviltä ja liikkuu koko ajan vasemmalta oikealle. Tulostaa ensin arvon muistiosoittimessa (alustetaan nollaan), ja lisää sitten muistiosoittimen arvoa 1. Ei-op-toiminnon jälkeen IP hyppää kolmannelle riville, joka vaihtaa ensin toiseen muistisoluun ja tulostaa sitten uuden rivin. uudella rivillä on positiivinen arvo (sen arvo on 10), th e-koodi siirtyy aina seuraavaan viidenteen riviin. Viides rivi palauttaa muistiosoittimen Fibonacci-numerollemme ja vaihtaa sitten toiseen aliohjelmaan. Kun palaamme tästä aliohjelmasta, IP hyppää takaisin kolmannelle riville suorittaessaan ei-opin.

Toinen aliohjelma alkaa oikeasta yläkulmasta ja alkaa liikkua kaakkoon. Kieltäytymisen jälkeen meidät palautetaan matkustamaan länteen toista linjaa pitkin. Tämä rivi tulostaa nykyisen Fibonacci-numeron ennen muistiosoittimen siirtämistä seuraavaan sijaintiin. Sitten IP hyppää neljännelle riville, jossa se laskee seuraavan Fibonacci-numeron käyttämällä kahta edellistä. Sitten se antaa hallinnan takaisin ensimmäiseen alirutiiniin, mutta kun se saa takaisin ohjelman hallinnan, se jatkuu, kunnes se kohtaa hyppyn, jossa se hyppää yli peilin, jota alun perin käytettiin osoittamaan sitä länteen, kun se palaa toiselle riville.


Alustavat kauniit kuvat!

Kuvan vasen puoli on ohjelma, oikea puoli edustaa muistia. Sininen ruutu on ensimmäinen IP ja molemmat IP osoittavat seuraavaa suoritettavaa käskyä.

kirjoita kuvan kuvaus tähän

Huomaa: Kuvia voi näyttää kauniilta vain ihmisille, joilla on yhtä rajoitetusti taidot kuvankäsittelyohjelmissa: PI lisää vielä vähintään 2 iteraatiota, jotta * -operaattorin käyttö selkeytyy.

Huomautus 2: Näin vasta alephalpha ”vastauksen kirjoitettuani suurimman osan tästä, ajattelin, että se oli edelleen arvokas erotuksen takia, mutta varsinainen Fibonacci osat ohjelmistamme ovat hyvin samankaltaisia. Lisäksi tämä on pienin Hexagony-ohjelma, jonka olen nähnyt käyttävän useampaa kuin yhtä IP-osoitetta, joten ajattelin, että on silti hyvä pitää joka tapauksessa: P

Kommentit

  • Sinun tulee linkittää mihin tahansa tapaan, jolla teit kauniita kuvia, ja laita sitten linkki osoitteeseen esolangs.org/wiki/ Hexagony .
  • @ mbomb007 Luoin gimpin avulla kukin kehys manuaalisesti, ja sitten lähetin kuvat joihinkin gi: iin f verkkosivujen tekeminen. Harkitsin useita kertoja prosessin aikana tehdä työkalun sen tekemiseen, ottaen huomioon kuinka tylsiä se oli.
  • @FryAmTheEggman Vaikuttava! Tee siitä haaste. ' olen varma, että joku lähettää vastauksen. : D Vielä parempi, jos voisit luoda samanlaisen verkkosivuston kuin kala ' -tulkki.
  • @ mbomb007 Se voi olla oivaltava kunnianhimoinen haaste tällä sivustolla , puhumattakaan siitä, että se todennäköisesti kärsisi paljon siitä, että se olisi todella laaja. En ' usko, että lähetän sen, mutta voit tehdä sen itse, jos luulet, että sinulla on hyvä tapa esittää se. Uskon myös, että Timwi loi C # ideen kuusikulmioon, vaikka en ' en ole koskaan käyttänyt sitä, koska en ole ' vaivautunut mustavalkoiseen.
  • @ mbomb007 Ide asuu täällä , muuten, unohti linkittää sen viimeksi.

vastaus

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 

Vastaa

Python 2, 34 tavua

Python, käyttäen rekursiota … tässä tulee StackOverflow!

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

Vastaa

Hyytelö , 3 tavua

+¡1 

Kokeile verkossa!

Kuinka se toimii

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

¡ kurkistaa kahta linkkiä vasemmalle. Koska niitä on vain yksi, sen on oltava silmukan runko. Siksi luku luetaan syötteestä. Koska komentoriviargumentteja ei ole, luku luetaan STDIN: stä.

Vastaa

kuusikulmio , 6 tavua

Ei kilpaile, koska kieli on kysymystä uudempi.

1.}=+! 

Ungleded:

 1 . } = + ! . 

Se tulostaa Fibonacci-sekvenssin ilman erottimia.

Kommentit

  • Tässä on pieni ongelma, että se ei tulosta ' t erottimia numeroiden väliin. Tämä ei ole ' täsmälleen täsmälleen haasteessa. (Ja olen ' todella onnellinen, että joku käyttää kuusikulmiota. :))

Vastaa

Golfscript – yksi numero – 11/11/10

12 merkkiä stdin-syötteen ottamiseksi:

~0 1@{.@+}*; 

11 merkkiä jo pinossa olevalle syötteelle:

0 1@{.@+}*; 

10 merkkiä 1: n määrittelemiseksi edelleen 0. Fibonacci-numeroksi:

1.@{.@+}*; 

kommentit

  • Vaihtoehto on " Laskee n: n n: n Fibonacci-luvun ". Joten ojaa ~ ja sinulla on 11 merkkiä, jotka vievät pinoon n ja jättävät F_n pinossa.

Vastaa

Ruby

29 27 25 24 merkkiä

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

Muokkaa: teki siitä äärettömän silmukan. 😉

kommentit

  • huomasi kukaan b=a+a=b on palindromi? 🙂
  • kyllä st0le teki 🙂
  • tiedän, että ' myöhään juhliin, mutta voisiko joku selittää, miten b=a+a=b osa toimii? Ei voi ' näyttää käärittävän pääni sen ympärille.
  • @GigaWatt, Ajattele sitä tällä tavalla, ohjeet suoritetaan vasemmalta oikealle …joten newb=olda+(a=oldb)
  • voit tallentaa kaksi merkkiä käyttämällä loop: p 1,a=b=1;loop{p b=a+a=b}

vastaus

DC (20 tavua)

Bonuksena se ”s jopa hämmentynyt;)

zzr[dsb+lbrplax]dsax 

MUOKKAA: Voin huomauttaa, että se tulostaa kaikki fibonacci-sarjan numerot, jos odotat tarpeeksi kauan.

Kommentit

  • En halua ' t kutsua sitä hämärtyneeksi – hämmentyneeksi koodiksi oletetaan olevan vaikea ymmärtää, ja niin pitkälle kuin dc menee, koodi on tässä täysin yksinkertainen.

Vastaa

Mathematica, 9 merkkiä

Fibonacci 

Jos sisäänrakennettuja toimintoja ei sallita, tässä on nimenomainen ratkaisu:

Mathematica, 33 32 31 merkkiä

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

Kommentit

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

vastaus

Prelude , 12 tavua

Yksi harvoista haasteista, joissa Prelude on todella kilpailukykyinen:

1(v!v) ^+^ 

Tämä vaatii Python-tulkin , joka tulostaa arvot desimaalilukuina merkkien sijaan.

Selitys

Alkusanassa kaikki rivit suoritetaan rinnakkain, käskyosoittimen kulkiessa ohjelman sarakkeita. Jokaisella rivillä on oma pino, joka alustetaan nollaan.

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. 

Silmukka toistuu ikuisesti, koska ensimmäisen pinon yläosassa ei koskaan ole 0.

Huomaa, että tämä aloittaa Fibonacci-sekvenssin kohdasta 0.

Vastaa

TI-BASIC, 11

Legendaarinen TI-BASIC-golfaaja Kenneth Hammond (”Weregoose”), tältä sivustolta . Toimii O (1) -ajalla ja pitää 0: ta Fibonacci-sekvenssin 0. terminä.

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

Käyttö:

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

Kuinka tämä toimii? Jos teet matematiikan, käy ilmi, että sinh‾¹(.5) on yhtä suuri kuin ln φ, joten se on muokattu Binet-kaavan versio, joka pyöristää alaspäin (1/φ)^n -korjauksen sijaan. round( (pyöristetään 9 desimaaliin) tarvitaan pyöristysvirheiden estämiseksi.

Vastaa

K – 12

Laskee n ja n-1 Fibonacci-numeron.

{x(|+\)/0 1} 

Vain nth Fibonacci-numero.

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

Kommentit

  • +1 Ei paha! Jos pystyt kutistamaan sen vain yhdeksi merkiksi (ja tarjoamaan minulle tapaa testata sitä), hyväksyn vastaukseni '. 🙂
  • Ainoa tapa pienentää sitä olisi korvata funktio kutsulla tunnetulle numerolle: n (| + \ ) / 0 1 Testaa se käyttämällä tätä tulkkia .

Vastaa

Java, 55

En voi kilpailla useimpien kielten ytimekkyyden kanssa, mutta voin tarjota olennaisesti toisenlaisen ja mahdollisesti paljon nopeamman (vakioajan) tavan laskea n: s numero:

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

n on tulo (int tai pitkä) alkaen n = 1. Se käyttää Binetin kaava ja pyöristetään vähennyksen sijasta.

Kommentit

  • Rakastan tämä ratkaisu
  • Tämä ' ei näytä toimivan minulle, mutta se ' on varhaisessa vaiheessa ja olen ehkä jos jotain puuttuu! Oletetaan, että 0 on sekvenssin ensimmäinen numero, mikä antaa 0, 0, 1, 1, 3, 4, 8, 12, 21, 33 kuusille t 10 numeroa
  • @Shaggy Hups! Valitettavasti esitin virheen – korjattu nyt.

Vastaa

Julia, 18 tavua

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

vastaus

Dodot , 26 tavua

	dot F F 	F dip 	F dip dip 

Kokeile verkossa!

Kuinka se toimii

Toiminto F tekee kaiken raskaan nostamisen; se määritetään rekursiivisesti seuraavasti.

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

Aina kun n> 1 | n – 1 | = n – 1 < n ja || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , joten funktio palauttaa (F (n – 1), F (n – 2)) .

Jos n = 0 , sitten | n – 1 | = 1> 0 ; jos n = 1 , niin || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . Molemmissa tapauksissa rekursiiviset puhelut F (1) herättävät luopuminen -poikkeuksen, joten F (0) palauttaa 0 ja F (1) palauttaa 1 .

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

Lopuksi main -funktio määritellään nimellä

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

joten se laskee yhteen kaikki palautetun vektorin koordinaatit kirjoittanut F .

Esimerkiksi main (3) = summa (F (3)) = summa (1, 0, 1) = 2 .

Kommentit

  • Luin README-tiedostosi (DODOS) ja olen erittäin kiinnostunut; se on todella siisti konsepti! Mutta en löydä sitä Esolangsista tai mistään muualta. Tulitko keksimään sen?

Vastaa

Rubiini, 25 merkkiä

st0le ”vastausta lyhennettiin.

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

Kommentit

  • Itse asiassa voit lyhentää sitä entisestään käyttämällä a=b=1;loop{p a;b=a+a=b}
  • Joten estät hänen vastauksensa: P

Vastaa

FAC: Toimiva APL, 4 merkkiä (!!)

Ei minun, siksi lähetetty yhteisöwikiksi. FAC on APL: n murre, jonka Hai-Chen Tu ilmeisesti ehdotti väitöskirjaansa vuonna 1985. Hän kirjoitti myöhemmin yhdessä Alan J. Perlisin kanssa artikkelin nimeltä ” FAC: toiminnallinen APL-kieli ”. Tämä APL: n murre käyttää ”laiska matriiseja” ja Salli äärettömän matriisit. Se määrittelee operaattorin ”iter” (), jotta tietyt rekursiiviset sekvenssit voidaan määritellä kompaktisti.

Monadic (”unary ”) -tapa on periaatteessa Haskell” s , ja se määritellään nimellä (F⌼) A ≡ A, (F A), (F (F A)), …. Diadinen (”binaarinen”) tapaus määritellään jonkin verran analogisesti kahdelle muuttujalle: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Miksi tämä on hyödyllistä? No, kuten käy ilmi, tämä on juuri sellainen toistuminen, jolla Fibonacci-sekvenssi on. Itse asiassa yksi siitä annetuista esimerkeistä on

1+⌼1 

tutun sekvenssin tuottaminen 1 1 2 3 5 8 ….

Joten, tässä on, mahdollisimman lyhyt Fibonacci-toteutus ei-uutuusohjelmointikielellä. : D

kommentit

  • Voi, olen vahingossa poistanut yhteisöstä wikisen viestisi osana (manuaalista) joukkoviestintäni. Noh. 😉

vastaus

R, 40 tavua

Haven ei ole nähnyt R-ratkaisu, joten:

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

kommentit

  • Tiedän, että tämä on vanha vastaus, mutta sinä voi lyhentää 38 tavua

vastaus

05AB1E, 7 tavua

Koodi:

1$<FDr+ 

Kokeile verkossa!

Kommentit

  • Hei, tervetuloa PPCG: hen! Hieno ensimmäinen viesti!

Vastaus

GolfScript, 13 merkkiä

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

(Vastaukseni edellinen pinon ylivuotokysymys .)

Vastaa

Desmos , 61 tavua

golfia

Napsauta add slider -painike mallille n.

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

Viimeinen rivi on tulos.

Ungolfed

Onko funktio.

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

vastaus

Cubix , 10 tavua

Ei kilpaileva vastaus, koska kieli on kysymystä uudempi.

Cubix on uusi 2-ulotteinen kieli, jonka on kirjoittanut @ETHproductions, kun koodi on kääritty sopivaan kokoiseen kuutioon.

;.o.ON/+!) 

Kokeile online-tilassa

Tämä kietoutuu 2 x 2 kuutio seuraavalla tavalla

 ; . o . O N / + ! ) . . . . . . . . . . . . . . 
  • O antaa TOS: n arvon
  • N työnnä uusi rivi pinoon
  • / heijastavat pohjoista
  • o tulosta TOS-merkki
  • ; pop TOS
  • / heijastavat itää kuution kiertämisen jälkeen
  • + lisää pinon 2 ylin arvoa
  • ! ohita seuraava komento, jos TOS on 0
  • ) lisää TOS: ta 1. Tämä käynnistää sekvenssin olennaisesti.

Tämä on loputon silmukka, joka tulostaa sekvenssin uuden rivin erottimella. Siinä hyödynnetään sitä, että useimmat komennot eivät tue arvoja pinosta.
Jos erotinta ei oteta huomioon, se voidaan tehdä 5 tavulla .O+!)

Vastaa

Brainfuck, 16,15, 14/13 merkkiä

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

Luo Fibonacci-sekvenssin eikä tulosta mitään. Lisäksi se on lyhyempi kuin yllä oleva.

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

Tämä yhdessä on 14 merkkiä, mutta se tulostaa ASCII-merkit Fibonacci-sarjan arvoilla.

Kommentit

  • Tämä on hyvä, mutta olenko väärä sanomalla, että 14-tavuinen versio tuottaa vain toisesta 1: stä? Kuten " 1 2 3 5 8 " " 1 1 2 3 5 8 "?
  • @Charlim Voi sinä ' olen oikeassa. Minulla ei ole aavistustakaan, mitä minä vuodelta 2014 ajattelin. Joka tapauksessa korjasin sen vain movilla tulostusohjeet silmukan etuosaan.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *