Fibonacci-sekvens er en sekvens av tall, der hvert tall i sekvensen er summen av de to tallene som går foran den. De to første tallene i sekvensen er begge 1.

Her er de første få ordene

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

Skriv den korteste koden at enten:

  • Genererer Fibonacci-sekvensen uten ende.

  • Gitt n beregner n sekvensens term. (Enten 1 eller null indeksert)

Du kan bruke standard former for input og output.

(Jeg ga begge alternativene i tilfelle en er lettere å gjør på det valgte språket enn det andre.)


For funksjonen som tar en n, en rimelig stor returverdi (det største Fibonacci-tallet som som passer til datamaskinens normale ordstørrelse, må det minimum støttes.


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> 

Kommentarer

  • Jeg venter på et svar som " f ", 1 byte, på mitt mattebaserte golfspråk.

Svar

Perl 6, 10 tegn:

Anonym uendelig liste over listefibre med sekvens:

^2,*+*...* 

Samme som:

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

Så du kan tilordne det til en matrise:

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

eller

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

Og få de første elleve verdiene (fra 0 til 10) med:

say @short-fibs[^11]; 

eller med:

say @fibs[^11]; 

Vent, du kan få også de første 50 numrene fra selve den anonyme listen:

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

Som returnerer:

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 

Og noen enkle målestokk:

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

Med:

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

EOF

Kommentarer

  • Jeg vil ikke ' ikke engang tenke av ^2 som erstatning for 0,1. +1
  • Dette er ikke lenger gyldig, du må skrive det som |^2,*+*...*, som er samme antall byte som 0,1,*+*...*.
  • Perl er så rar.
  • Hvilken versjon av Perl 6 ble dette svaret skrevet i?
  • @CalculatorFeline Det var en stor endring kjent som GLR (Great List Refactor) som skjedde kort tid før den første offisielle utgivelsen som var på 2015-12-25. Denne koden ville fungert helt fram til den tiden.

Svar

Brainfuck, 22 slag

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

Genererer Fibonacci-sekvensen som gradvis beveger seg over minnebåndet.

Kommentarer

  • Vakker ! Litteralt vakker! Eller kanskje ikke … allikevel +1 for dette 🙂
  • Dette er 3.344 eller 4 byte i komprimert hjernefokk. (6 ln (22)) / ln (256)
  • 16 byte: +[[<+>->+>+<<]>]
  • 14 byte: +[.[>+>+<<-]>]
  • @Stefnotch selvfølgelig, den kortere er destruktiv. Løsningen ovenfor avsluttes med Fibonacci-sekvensen på båndet, og det er også 16 byte-løsningen.

Svar

Haskell, 17 15 14 tegn

f=1:scanl(+)1f 

Prøv det online!

Kommentarer

  • Hvorfor ikke kutte to mellomrom til f=0:scanl(+)1 f?
  • @Martinho: Redigert, takk.
  • Wow, at ' er enda kortere enn vanlig f@(_:x)=0:1:zipWith(+)f x! Må huske det.
  • Du kan til og med strippe et annet mellomrom: f=0:scanl(+)1f.

Svar

C # 4, 58 byte

Stream (69; 65 hvis svakt skrevet til IEnumerable)

(Forutsatt et using -direktiv for System.Collections.Generic.)

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

Enkeltverdi (58)

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

Kommentarer

  • Gitt at n er en uint, n==0 kan forkortes til n<1. Og strømmen kan lagre noen tegn ved å slippe plassen etter den generiske typen og erklære x i et bredere omfang enn nødvendig.Faktisk, grøft x helt: n+=c;c=n-c;
  • @Peter: Takk, vil redigere når jeg får litt tid.
  • Den enkeltverdige versjonen din er så lenge mitt rekursive lambdauttrykk svarer … hyggelig!
  • @ wizzwizz4 hvis jeg ' ikke feil, hvis !n fungerer, så burde det bare være n hvis du snur den betingede.
  • @JonSkeet Aw. Og her tenkte jeg at jeg ' slo Jon Skeet på C # … 🙂

Svar

GolfScript, 12

Nå bare 12 tegn!

1.{[email protected]+.}do 

Kommentarer

  • +1 fint arbeid. Hvis du gjør det kortere enn 13 tegn, godtar jeg ' svaret ditt umiddelbart (med mindre noen selvfølgelig gir et enda kortere svar). 😛
  • Jeg elsker en utfordring. Ferdig! 😉
  • Fint, du vinner. I det minste til noen gjør noe enda kortere (hvis det ' er mulig). 😛
  • den definisjonen er nesten like kort som navnet ' Fibonacci ' seg selv! +1

Svar

J, 10 tegn

Ved hjelp av innebygd beregning av Taylor-serien koeffisienter så kanskje lite jukse. Lærte det her .

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

Kommentarer

  • @aditsu (q:^-^:p) 6 er 64 729 der p er jevn. J er sannsynligvis bra for hva den gjør gåter. 🙂
  • Enda bedre: (<:^-^:>) 4 er 81 og <:^-^:> 4 er 53.5982.
  • Emojien som er demonstrert her er hva all J-kode skal streve mot. På et sidemerk er et annet alternativ +/@:!&i.- ved bruk av 9 byte.
  • @miles Veldig hyggelig! Du bør legge den ut, siden den er helt annerledes enn min.

Svar

> < > – 15 tegn

0:nao1v a+@:n:<o 

Kommentarer

  • Selv om du kan forkorte det til 0:nao1v LF a+@:n:<o hvis du vil. Gir 15 🙂 Faktisk gjør dette også utgangen litt mer lesbar …
  • 13 tegn: 01r:nao$:@+$r

Svar

Hexagony , 18 14 12

Takk Martin for 6 byte!

1="/}.!+/M8; 

Utvidet:

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

Prøv det online


Gammelt, svar. Dette blir liggende igjen fordi bildene og forklaringen kan være nyttige for nye Hexagony-brukere.

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

Utvidet:

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

Dette skriver ut Fibonacci-sekvensen atskilt med nye linjer.

Prøv det online! Vær forsiktig, online tolk liker ikke uendelig utgang.

Forklaring

Det er to «underrutiner» til dette programmet, hver drives av en av de to benyttede IP-ene. Den første rutinen skriver ut nye linjer , og den andre gjør Fibonacci-beregningen og utdataene.

Den første underrutinen starter på første linje og beveger seg fra venstre mot høyre hele tiden. Den skriver først ut verdien ved minnepekeren (initialisert til null), og deretter øker verdien ved minnepekeren med 1. Etter no-op hopper IP-en til den tredje linjen som først bytter til en annen minnecelle og deretter skriver ut en ny linje. en ny linje har en positiv verdi (verdien er 10), th e-koden vil alltid hoppe til den femte linjen, neste. Den femte linjen returnerer minnepekeren til vårt Fibonacci-nummer og bytter deretter til den andre subrutinen. Når vi kommer tilbake fra denne underrutinen, vil IP-en hoppe tilbake til tredje linje etter å ha utført en no-op.

Den andre subrutinen begynner øverst til høyre og begynner å bevege seg sørøst. Etter en no-op blir vi spratt for å reise vestover langs den andre linjen. Denne linjen skriver ut det nåværende Fibonacci-nummeret, før minnepekeren flyttes til neste sted. Deretter hopper IP-en til fjerde linje, hvor den beregner neste Fibonacci-nummer ved hjelp av de to foregående. Deretter gir den kontroll tilbake til den første subrutinen, men når den gjenvinner kontrollen over programmet, fortsetter den til den møter et hopp, der den spretter over speilet som opprinnelig ble brukt til å peke det vest, når det går tilbake til andre linje.


Foreløpige vakre bilder!

Venstre side av bildet er programmet, høyre side representerer minnet. Den blå boksen er den første IP-en, og begge IP-ene peker på neste instruksjon som skal utføres.

skriv inn bildebeskrivelse her

Merk: Bilder kan virker bare pen for folk som har like begrensede ferdigheter med bilderedigeringsprogrammer: PI vil legge til minst 2 flere iterasjoner slik at bruken av * -operatøren blir tydeligere.

Merknad 2: Jeg så bare alephalphas svar etter å ha skrevet det meste av dette, jeg skjønte at det fortsatt var verdifullt på grunn av separasjonen, men den faktiske Fibonacci deler av programmene våre er veldig like. I tillegg er dette det minste Hexagony-programmet jeg har sett å bruke mer enn en IP, så jeg tenkte at det kunne være greit å beholde uansett: P

Kommentarer

  • Du bør koble til det du pleide å lage de vakre bildene, og deretter sette lenken på esolangs.org/wiki/ Hexagony .
  • @ mbomb007 Jeg brukte gimp til å lage hver ramme manuelt, og lastet deretter opp bildene til noen gi f lage nettsted. Selv om jeg flere ganger i løpet av denne prosessen vurderte å lage et verktøy for å gjøre det, med tanke på hvor kjedelig det var.
  • @FryAmTheEggman Imponerende! Gjør det til en utfordring. Jeg ' er sikker på at noen vil legge ut et svar. : D Enda bedre hvis du kunne lage et nettsted som ligner på fisk ' s online tolk.
  • @ mbomb007 Det kan være litt ambisiøst for en utfordring på dette nettstedet. , for ikke å nevne at det sannsynligvis ville lide mye av å være veldig bred. Jeg tror ikke ' jeg vil legge ut det, men gjør det gjerne selv hvis du tror du har en god måte å presentere det på. Også, jeg tror Timwi opprettet en C # ide for heksagoni, selv om jeg ' aldri har brukt det fordi jeg ikke har ' ikke brydd meg om mono.
  • @ mbomb007 Ideen lever her , glemte forresten å koble den forrige gang.

Svar

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 

Svar

Python 2, 34 byte

Python, ved hjelp av rekursjon … her kommer en StackOverflow!

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

Svar

Jelly , 3 byte

+¡1 

Prøv det online!

Slik fungerer det

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

¡ kikker på de to koblingene til venstre. Siden det bare er en, må det være kroppen til sløyfen. Derfor leses et tall fra innspill. Siden det ikke er noen kommandolinjeargumenter, blir dette tallet lest fra STDIN.

Svar

Hexagony , 6 byte

Ikke-konkurrerende fordi språket er nyere enn spørsmålet.

1.}=+! 

Ungolfed:

 1 . } = + ! . 

Den skriver ut Fibonacci-sekvensen uten skilletegn.

Kommentarer

  • Dette har det mindre problemet at det ikke ' ikke skriver ut noen skilletegn mellom tallene. Dette er ikke ' ikke helt spesifisert i utfordringen. (Og jeg ' er veldig glad for at noen bruker Hexagony. :))

Svar

Golfscript – enkelt nummer – 12/11/10

12 tegn for å ta input fra stdin:

~0 1@{.@+}*; 

11 tegn for input allerede på bunken:

0 1@{.@+}*; 

10 tegn for ytterligere å definere 1 som det Fibonacci-tallet 0:

1.@{.@+}*; 

Kommentarer

  • Alternativet er " Beregner, gitt n, det niende Fibonacci-tallet ". Så grøft ~, og du har 11 tegn som tar n på bunken og lar F_n på bunken.

Svar

Ruby

29 27 25 24 tegn

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

Rediger: gjorde det til en uendelig løkke. 😉

Kommentarer

  • la noen merke til at b=a+a=b er et palindrom? 🙂
  • ja st0le gjorde 🙂
  • Jeg vet at jeg ' kommer sent til festen, men kan noen forklare hvordan b=a+a=b del fungerer? Kan ' ikke synes å pakke hodet rundt det.
  • @GigaWatt, Tenk på det på denne måten, Instruksjoner blir utført fra venstre mot høyre …så newb=olda+(a=oldb)
  • kan du lagre to tegn ved å bruke loop: p 1,a=b=1;loop{p b=a+a=b}

Svar

DC (20 byte)

Som en bonus er det «er til og med tilslørt;)

zzr[dsb+lbrplax]dsax 

EDIT: Jeg kan påpeke at den skriver ut alle tallene i Fibonacci-sekvensen, hvis du venter lenge nok.

Kommentarer

  • Jeg vil ikke ' t kaller det forvirret – forvirret kode skal være vanskelig å forstå, og så langt det gjelder DC er koden her helt grei.

Svar

Mathematica, 9 tegn

Fibonacci 

Hvis innebygde funksjoner er ikke tillatt, her er det en eksplisitt løsning:

Mathematica, 33 32 31 tegn

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

Kommentarer

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

Svar

Prelude , 12 byte

En av få utfordringer der Prelude faktisk er ganske konkurransedyktig:

1(v!v) ^+^ 

Dette krever Python-tolken som skriver ut verdier som desimaltall i stedet for tegn.

Forklaring

I Prelude, alle linjene utføres parallelt, med instruksjonspekeren som krysser kolonnene i programmet. Hver linje har sin egen stabel som initialiseres til null.

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. 

Sløyfen gjentas for alltid, fordi den første stabelen aldri vil ha en 0 på toppen.

Merk at dette starter Fibonacci-sekvensen fra 0.

Svar

TI-BASIC, 11

Av legendariske TI-BASIC golfspiller Kenneth Hammond («Weregoose»), fra dette nettstedet . Kjører i O (1) tid, og anser 0 som den 0. Termen for Fibonacci-sekvensen.

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

For å bruke:

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

Hvordan fungerer dette? Hvis du gjør matte, viser det seg at sinh‾¹(.5) er lik ln φ, så det er en modifisert versjon av Binets formel som runder ned i stedet for å bruke (1/φ)^n korrigeringsuttrykket. round( (runde til ni desimaler) er nødvendig for å forhindre avrundingsfeil.

Svar

K – 12

Beregner n og n-1 Fibonacci-nummer.

{x(|+\)/0 1} 

Bare nth Fibonacci-nummer.

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

Kommentarer

  • +1 Ikke verst! Hvis du kunne krympe det bare ett tegn (og gi meg en måte å teste det på), godtar jeg ' svaret ditt. 🙂
  • Den eneste måten å krympe det på ville være å erstatte funksjonen med et anrop til et kjent nummer: n (| + \ ) / 0 1 Test det med denne tolk .

Svar

Java, 55

Jeg kan ikke konkurrere med kortfattetheten til de fleste språk her, men jeg kan tilby en vesentlig annerledes og muligens mye raskere (konstant tid) måte å beregne n-tallet:

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

n er inngangen (int eller lang), og begynner med n = 1. Den bruker Binets formel og runder i stedet for subtraksjonen.

Kommentarer

  • Jeg elsker denne løsningen
  • Dette virker ikke ', men det ' er tidlig, og jeg kan være mangler noe! Forutsatt at 0 er det første tallet i sekvensen, gir dette 0, 0, 1, 1, 3, 4, 8, 12, 21, 33 for firs t 10 tall
  • @Shaggy Ups! Beklager, jeg introduserte en feil – løst nå.

Svar

Julia, 18 byte

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

Svar

Dodos , 26 byte

	dot F F 	F dip 	F dip dip 

Prøv det online!

Hvordan det fungerer

Funksjonen F gjør alt tungt løft; den defineres rekursivt som følger.

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

Når n> 1 | n – 1 | = n – 1 < n og || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , slik at funksjonen returnerer (F (n – 1), F (n – 2)) .

Hvis n = 0 , deretter | n – 1 | = 1> 0 ; hvis n = 1 , så || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . I begge tilfeller forsøker rekursive anrop F (1) et Surrender unntak, så F (0) returnerer 0 og F (1) returnerer 1 .

For eksempel, F (3) = (F (1), F (2)) = (1 , F (0), F (1)) = (1, 0, 1) .

Til slutt, hoved funksjon er definert som

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

slik at den legger opp alle koordinatene til den returnerte vektoren av F .

For eksempel main (3) = sum (F (3)) = sum (1, 0, 1) = 2 .

Kommentarer

  • Jeg leste README (DODOS) og er veldig fascinert; det er et veldig pent konsept! Men jeg finner den ikke på Esolangs eller andre steder. Fant du det?

Svar

Ruby, 25 tegn

st0le «s svar forkortet.

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

Kommentarer

  • Egentlig kan du forkorte det ytterligere ved å bruke a=b=1;loop{p a;b=a+a=b}
  • Så du stiller svaret hans?: P

Svar

FAC: Funksjonell APL, 4 tegn (!!)

Ikke min, derfor lagt ut som community wiki. FAC er en dialekt av APL som Hai-Chen Tu tilsynelatende foreslo som sin doktoravhandling i 1985. Han skrev senere en artikkel sammen med Alan J. Perlis kalt « FAC: A Functional APL Language «. Denne dialekten av APL bruker «late arrays» og tillate matriser av uendelig lengde. Den definerer en operator «iter» () for å tillate kompakt definisjon av noen rekursive sekvenser.

Den monadiske («unary «) tilfelle av er i utgangspunktet Haskell» s , og er definert som (F⌼) A ≡ A, (F A), (F (F A)), …. Det dyadiske («binære») tilfellet er definert noe analogt for to variabler: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Hvorfor er dette nyttig? Vel, det viser seg at dette er nettopp den typen gjentakelse Fibonacci-sekvensen har. Faktisk er et av eksemplene gitt av det

1+⌼1 

å produsere den kjente sekvensen 1 1 2 3 5 8 ….

Så det er mulig, kortest mulig Fibonacci-implementering i et ikke-nytt programmeringsspråk. : D

Kommentarer

  • Åh, jeg har ved et uhell un-community-wikied innlegget ditt som en del av min (manuelle) masse-avvikling. Jaja. 😉

Svar

R, 40 byte

Har ikke sett en R-løsning, så:

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

Kommentarer

  • Jeg vet at dette er et gammelt svar, men du kan forkorte til 38 byte

Svar

05AB1E, 7 byte

Kode:

1$<FDr+ 

Prøv det online!

Kommentarer

  • Hei, og velkommen til PPCG! Fint første innlegg!

Svar

GolfScript, 13 tegn

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

(Mitt svar fra en forrige spørsmål om stackoverløp .)

Svar

Desmos , 61 byte

Golfet

Klikk på add slider knapp for n.

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

Den siste linjen er utdata.

Ungolfed

Er en funksjon.

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

Svar

Cubix , 10 byte

Ikke-konkurrerende svar fordi språket er nyere enn spørsmålet.

Cubix er et nytt todimensjonalt språk av @ETHproductions hvor koden er pakket inn i en kube som er tilpasset.

;.o.ON/+!) 

Prøv det online

Dette pakkes inn på en 2 x 2 kube på følgende måte

 ; . o . O N / + ! ) . . . . . . . . . . . . . . 
  • O send ut verdien av TOS
  • N skyv newline på stakken
  • / reflekter nordover
  • o send karakteren til TOS
  • ; pop-TOS
  • / reflekterer øst etter å ha gått rundt kuben
  • + legg til topp 2-verdiene i stakken
  • ! hopp over neste kommando hvis TOS er 0
  • ) øk TOS med 1. Dette starter i hovedsak sekvensen.

Dette er en endeløs sløyfe som skriver ut sekvensen med en ny linjeseparator. Det utnytter det faktum at de fleste kommandoer ikke spretter verdiene fra bunken.
Hvis skilletegn ignoreres, kan dette gjøres med 5 byte .O+!)

Svar

Brainfuck, 16,15, 14/13 tegn

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

Genererer Fibonacci-sekvensen og skriver ikke ut noe. Dessuten er den kortere enn den ovenfor.

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

Dette den ene har 14 tegn, men skriver ut ASCII-tegn med verdiene til Fibonacci-sekvensen.

Kommentarer

  • Dette er bra, men ville jeg være feil ved å si at 14 byte-versjonen bare leverer fra 2. 1 på? Som i " 1 2 3 5 8 " i stedet for " 1 1 2 3 5 8 "?
  • @Charlim Å, du ' har rett. Jeg aner ikke hva jeg fra 2014 trodde. Uansett fikset jeg det bare med mov på utskriftsinstruksjonene foran på løkken.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *