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
beregnern
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 for0,1
. +1 - Dette er ikke lenger gyldig, du må skrive det som
|^2,*+*...*
, som er samme antall byte som0,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
Svar
Haskell, 17 15 14 tegn
f=1:scanl(+)1f
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 enuint
,n==0
kan forkortes tiln<1
. Og strømmen kan lagre noen tegn ved å slippe plassen etter den generiske typen og erklærex
i et bredere omfang enn nødvendig.Faktisk, grøftx
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æren
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
er64 729
der p er jevn. J er sannsynligvis bra for hva den gjør gåter. 🙂 - Enda bedre:
(<:^-^:>) 4
er81
og<:^-^:> 4
er53.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 ; . . . . . . .
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.
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
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 tarn
på bunken og larF_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 dette0, 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
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+
Kommentarer
- Hei, og velkommen til PPCG! Fint første innlegg!
Svar
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/+!)
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.
+[[<+>->+>+<<]>]
+[.[>+>+<<-]>]