Fibonacci-sekvens er en sekvens af tal, hvor hvert tal i sekvensen er summen af de to tal, der går forud for den. De første to tal i sekvensen er begge 1.
Her er de første par udtryk
1 1 2 3 5 8 13 21 34 55 89 ...
Skriv den korteste kode at enten:
-
Genererer Fibonacci-sekvensen uden ende.
-
Givet
n
beregnern
sekvensens term. (Enten 1 eller nul indekseret)
Du kan bruge standardformer for input og output.
(Jeg gav begge muligheder, hvis en er lettere at gør på dit valgte sprog end det andet.)
For den funktion, der tager en n
, en rimelig stor returværdi (det største Fibonacci-tal, der passer til din computers normale ordstørrelse, som minimum) skal understø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å mit matematiske golfsprog.
Svar
Perl 6, 10 tegn:
Anonym uendelig liste over liste over sekvenser for Fibonacci:
^2,*+*...*
Samme som:
0, 1, -> $x, $y { $x + $y } ... Inf;
Så du kan tildele den til en matrix:
my @short-fibs = ^2, * + * ... *;
eller
my @fibs = 0, 1, -> $x, $y { $x + $y } ... Inf;
Og få de første elleve værdier (fra 0 til 10) med:
say @short-fibs[^11];
eller med:
say @fibs[^11];
Vent, du kan også få de første 50 numre fra selve den anonyme liste:
say (^2,*+*...*)[^50]
Det 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 noget simpelt benchmark:
real 0m0.966s user 0m0.842s sys 0m0.080s
Med:
$ time perl6 -e "say (^2, *+* ... *)[^50]"
EOF
Kommentarer
- Jeg ville ikke ' ikke engang tænke af
^2
som erstatning for0,1
. +1 - Dette er ikke længere gyldigt, du bliver nødt til at skrive det som
|^2,*+*...*
, hvilket er det samme antal bytes som0,1,*+*...*
. - Perl er så underlig.
- Hvilken version af Perl 6 blev dette svar skrevet i?
- @CalculatorFeline Der var en stor ændring kendt som GLR (Great List Refactor), der skete kort før den første officielle frigivelse, som var den 2015-12-25. Denne kode ville have fungeret lige indtil det tidspunkt.
Svar
Brainfuck, 22 slag
+>++[-<<[->+>+<<]>>>+]
Genererer Fibonacci-sekvensen, der gradvist bevæger sig hen over hukommelsestapen.
Kommentarer
Svar
Haskell, 17 15 14 tegn
f=1:scanl(+)1f
Kommentarer
- Hvorfor ikke klippe to mellemrum til
f=0:scanl(+)1 f
? - @Martinho: Redigeret, tak.
- Wow, at ' er endnu kortere end den sædvanlige
f@(_:x)=0:1:zipWith(+)f x
! Må huske det. - Du kan endda strippe et andet mellemrum:
f=0:scanl(+)1f
.
Svar
C # 4, 58 bytes
Stream (69; 65 hvis svagt skrevet til IEnumerable
)
(forudsat et using
-direktiv til System.Collections.Generic
.)
IEnumerable<int>F(){int c=0,n=1;for(;;){yield return c;n+=c;c=n-c;}}
Enkelt værdi (58)
int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}
Kommentarer
- I betragtning af at
n
er enuint
,n==0
kan afkortes tiln<1
. Og strømmen kan gemme et par tegn ved at droppe rummet efter den generiske type og erklærex
i et bredere omfang end nødvendigt.Faktisk grøftx
helt:n+=c;c=n-c;
- @Peter: Tak, redigerer, når jeg får noget tid.
- Din version med en enkelt værdi er så længe mit rekursive lambda-udtryk svarer … dejligt!
- @ wizzwizz4 hvis jeg ' ikke forkert, hvis
!n
fungerer, så skal det bare væren
, hvis du vender det betingede. - @JonSkeet Aw. Og her tænkte jeg, at jeg ' slog Jon Skeet ved C # … 🙂
Svar
GolfScript, 12
Nu er det kun 12 tegn!
1.{[email protected]+.}do
Kommentarer
- +1 dejligt arbejde. Hvis du gør det kortere end 13 tegn, accepterer jeg ' straks dit svar (medmindre nogen selvfølgelig svarer endnu kortere). 😛
- Jeg elsker en udfordring. Færdig! 😉
- Dejligt, du vinder. I det mindste indtil nogen gør noget endnu kortere (hvis det ' endda er muligt). 😛
- denne definition er næsten lige så kort som navnet ' Fibonacci ' selv! +1
Svar
J, 10 tegn
Brug af indbygget beregning af Taylor-serien koefficienter så måske lidt snydende. 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
hvor p er jævn. J er sandsynligvis godt for hvad det gør gåder. 🙂 - Endnu bedre:
(<:^-^:>) 4
er81
og<:^-^:> 4
er53.5982
. - Den demonstrerede emoji her er, hvad alle J-koder skal stræbe efter. På en sidebemærkning er et andet alternativ
+/@:!&i.-
ved hjælp af 9 byte. - @miles Meget flot! Du skal sende den, da den er helt forskellig fra min.
Svar
> < > – 15 tegn
0:nao1v a+@:n:<o
Kommentarer
- Selvom du kan forkorte det til
0:nao1v LF a+@:n:<o
hvis du vil. Giver 15 🙂 Faktisk gør dette også output lidt mere læsbart … - 13 tegn:
01r:nao$:@+$r
Svar
Hexagony , 18 14 12
Tak Martin for 6 byte!
1="/}.!+/M8;
Udvidet:
1 = " / } . ! + / M 8 ; . . . . . . .
Gammelt, svar. Dette efterlades, fordi billederne og forklaringen kan være nyttige for nye Hexagony-brugere.
!).={!/"*10;$.[+{]
Udvidet:
! ) . = { ! / " * 1 0 ; $ . [ + { ] .
Dette udskriver Fibonacci-sekvensen adskilt af nye linjer.
Prøv det online! Vær dog forsigtig med online tolk kan ikke rigtig lide uendelig output.
Forklaring
Der er to “underrutiner” til dette program, der hver drives af en af de to anvendte IPer. Den første rutine udskriver nye linjer , og det andet foretager Fibonacci-beregning og output.
Den første subrutine starter på første linje og bevæger sig fra venstre mod højre hele tiden. Den udskriver først værdien ved hukommelsesmarkøren (initialiseret til nul), og derefter øger værdien ved hukommelsesmarkøren med 1
. Efter no-op hopper IPen til den tredje linje, der først skifter til en anden hukommelsescelle og derefter udskriver en ny linje. en ny linje har en positiv værdi (dens værdi er 10), th e-kode springer altid til den femte linje, næste. Den femte linje returnerer hukommelsesmarkøren til vores Fibonacci-nummer og skifter derefter til den anden subrutine. Når vi kommer tilbage fra denne subrutine, springer IPen tilbage til tredje linje efter udførelse af en no-op.
Den anden subrutine begynder i øverste højre hjørne og begynder at bevæge sig sydøst. Efter en no-op hoppes vi for at rejse vest ad anden linje. Denne linje udskriver det aktuelle Fibonacci-nummer, før hukommelsesmarkøren flyttes til den næste placering. Derefter hopper IPen til den fjerde linje, hvor den beregner det næste Fibonacci-nummer ved hjælp af de to foregående. Derefter giver den kontrol tilbage til den første subrutine, men når den genvinder kontrollen over programmet, fortsætter det, indtil det møder et spring, hvor det hopper over spejlet, der oprindeligt blev brugt til at pege det mod vest, da det vender tilbage til anden linje.
Foreløbige smukke billeder!
Venstre side af billedet er programmet, højre side repræsenterer hukommelsen. Den blå boks er den første IP, og begge IPer peger på den næste instruktion, der skal udføres.
Bemærk: Billeder kan virker kun smuk for folk, der har samme begrænsede færdigheder med billedredigeringsprogrammer: PI tilføjer mindst 2 gentagelser, så brugen af *
-operatøren bliver mere tydelig.
Note 2: Jeg så kun alephalphas svar efter at have skrevet det meste af dette, jeg regnede med at det stadig var værdifuldt på grund af adskillelsen, men den faktiske Fibonacci dele af vores programmer er meget ens. Desuden er dette det mindste Hexagony-program, som jeg har set brugt mere end en IP, så jeg tænkte, at det kunne være godt at beholde alligevel: P
Kommentarer
- Du skal linke til det, du brugte til at lave de smukke billeder, og derefter sætte linket på esolangs.org/wiki/ Hexagony .
- @ mbomb007 Jeg brugte gimp til manuelt at oprette hver ramme og uploadede derefter billederne til nogle gi f at lave websted. Skønt jeg flere gange i løbet af denne proces overvejede at lave et værktøj til at gøre det, i betragtning af hvor kedeligt det var.
- @FryAmTheEggman Imponerende! Gør det til en udfordring. Jeg ' er sikker på, at nogen vil sende et svar. : D Endnu bedre, hvis du kunne oprette et websted, der ligner fisk ' s online-tolk.
- @ mbomb007 Det er måske en smule ambitiøst for en udfordring på dette websted For ikke at nævne, ville det sandsynligvis lide meget af at være rigtig bred. Jeg tror ikke ' at jeg vil skrive det, men du er velkommen til at gøre det selv, hvis du synes, du har en god måde at præsentere det på. Jeg tror også, at Timwi skabte en C # ide til hexagony, selvom jeg ' aldrig har brugt det, fordi jeg ikke har ' ikke gidet med mono.
- @ mbomb007 Ideen lever her glemte forresten at linke den sidste 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 hjælp af rekursion … her kommer en StackOverflow!
def f(i,j):print i;f(j,i+j) f(1,1)
Svar
Jelly , 3 byte
+¡1
Sådan 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.
‡ ¡
kigger på de to links til venstre. Da der kun er én, skal det være kroppen af sløjfen. Derfor læses et tal fra input. Da der ikke er nogen kommandolinjeargumenter, læses dette tal fra STDIN.
Svar
Hexagony , 6 byte
Ikke-konkurrerende, fordi sproget er nyere end spørgsmålet.
1.}=+!
Ungolfed:
1 . } = + ! .
Den udskriver Fibonacci-sekvensen uden nogen separator.
Kommentarer
- Dette har det mindre problem, at det ikke ' ikke udskriver nogen separator mellem tallene. Dette er dog ikke ' ikke helt specificeret i udfordringen. (Og jeg ' er virkelig glad for, at nogen bruger Hexagony. :))
Svar
Golfscript – enkelt nummer – 12/11/10
12 tegn til optagelse af input fra stdin:
~0 1@{.@+}*;
11 tegn til input, der allerede er på stakken:
0 1@{.@+}*;
10 tegn til yderligere at definere 1 som det 0. Fibonacci-tal:
1.@{.@+}*;
Kommentarer
- Indstillingen er " Beregner, givet n, det niende Fibonacci-nummer ". Så grøft
~
, og du har 11 tegn, der tagern
på stakken og efterladerF_n
på stakken.
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
- bemærkede nogen
b=a+a=b
er et palindrom? 🙂 - ja st0le gjorde 🙂
- Jeg ved, at jeg ' kommer sent til festen, men kan nogen forklare, hvordan
b=a+a=b
del fungerer? Kan ' ikke synes at pakke mit hoved rundt om det. - @GigaWatt, tænk på det på denne måde, instruktioner udføres fra venstre mod højre …så
newb=olda+(a=oldb)
- kan du gemme 2 tegn ved hjælp af
loop
:p 1,a=b=1;loop{p b=a+a=b}
Svar
DC (20 byte)
Som en bonus er det “er endog tilsløret;)
zzr[dsb+lbrplax]dsax
REDIGERING: Jeg kan påpege, at den udskriver alle tallene i Fibonacci-sekvensen, hvis du venter længe nok.
Kommentarer
- Jeg ville ikke ' ikke kalde det tilsløret – tilsløret kode formodes at være vanskelig at forstå, og så vidt DC går, er koden her helt ligefrem.
Svar
Mathematica, 9 tegn
Fibonacci
Hvis indbyggede funktioner er ikke tilladt, her er en eksplicit 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 bytes):
Round[GoldenRatio^#/√5]&
- eller 23 tegn (27 bytes):
Round[((1+√5)/2)^#/√5]&
Svar
Prelude , 12 byte
En af de få udfordringer, hvor Prelude faktisk er ret konkurrencedygtig:
1(v!v) ^+^
Dette kræver Python-tolken , der udskriver værdier som decimaltal i stedet for tegn.
Forklaring
I Prelude, alle linjer udføres parallelt, hvor instruktionsmarkøren krydser programmets kolonner. Hver linje har sin egen stak, der initialiseres til nul.
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øjfen gentages for evigt, fordi den første stak aldrig vil have en 0
øverst.
Bemærk, at dette starter Fibonacci-sekvensen fra 0
.
Svar
TI-BASIC, 11
Af den legendariske TI-BASIC golfspiller Kenneth Hammond (“Weregoose”) fra dette site . Kører i O (1) tid og betragter 0 som den 0. Term for Fibonacci-sekvensen.
int(round(√(.8)cosh(Anssinh‾¹(.5
Brug:
2:int(round(√(.8)cosh(Anssinh‾¹(.5 1 12:int(round(√(.8)cosh(Anssinh‾¹(.5 144
Hvordan fungerer dette? Hvis du laver matematikken, viser det sig, at sinh‾¹(.5)
er lig med ln φ
, så det er en ændret version af Binets formel, der afrunder i stedet for at bruge (1/φ)^n
korrektionsudtrykket. round(
(runde til 9 decimaler) er nødvendig for at forhindre afrundingsfejl.
Svar
K – 12
Beregner n
og n-1
Fibonacci-nummer.
{x(|+\)/0 1}
Bare nth
Fibonacci-nummer.
{*x(|+\)/0 1}
Kommentarer
- +1 Ikke dårligt! Hvis du kun kunne krympe det med et tegn (og give mig en måde at teste det på), accepterer jeg ' dit svar. 🙂
- Den eneste måde at krympe det på ville være at erstatte funktionen med et opkald til et kendt nummer: n (| + \ ) / 0 1 Test det ved hjælp af denne tolk .
Svar
Java, 55
Jeg kan ikke konkurrere med kortfattetheden af de fleste sprog her, men jeg kan tilbyde en væsentligt anden og muligvis meget hurtigere (konstant tid) måde at beregne det n-tal op:
Math.floor(Math.pow((Math.sqrt(5)+1)/2,n)/Math.sqrt(5))
n
er input (int eller lang), startende med n = 1. Den bruger Binets formel og afrunder i stedet for subtraktionen.
Kommentarer
- Jeg elsker denne løsning
- Dette virker ikke ' virker ikke for mig, men det ' er tidligt, og jeg kan være mangler noget! Forudsat at
0
er det første tal i sekvensen, giver dette0, 0, 1, 1, 3, 4, 8, 12, 21, 33
for firs t 10 tal - @Shaggy Ups! Undskyld, jeg introducerede en fejl – rettet nu.
Svar
Julia, 18 byte
n->([1 1;1 0]^n)[]
Svar
Dodos , 26 byte
dot F F F dip F dip dip
Sådan fungerer det
Funktionen F gør alt det tunge løft; den defineres rekursivt som følger.
F(n) = ( F(|n - 1|), F(||n - 1| - 1|) )
Hver gang n> 1 | n – 1 | = n – 1 < n og || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , så funktionen returnerer (F (n – 1), F (n – 2)) .
Hvis n = 0 , derefter | n – 1 | = 1> 0 ; hvis n = 1 , så || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . I begge tilfælde rejser de forsøgte rekursive opkald F (1) en undtagelse Overgivelse , 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) .
Endelig er hoved -funktion er defineret som
main(n) = sum(F(n))
så den tilføjer alle koordinater for den returnerede vektor af F .
For eksempel main (3) = sum (F (3)) = sum (1, 0, 1) = 2 .
Kommentarer
- Jeg læste din README (DODOS) og er super fascineret; det er et rigtig pænt koncept! Men jeg kan ikke finde det på Esolangs eller andre steder. Kom du med det?
Svar
Ruby, 25 tegn
st0le “s svar forkortet.
p 1,a=b=1;loop{p b=a+a=b}
Kommentarer
- Faktisk kan du forkorte det yderligere ved hjælp af
a=b=1;loop{p a;b=a+a=b}
- Så du stiller hans svar?: P
Svar
FAC: Funktionel APL, 4 tegn (!!)
Ikke min, derfor indsendt som community wiki. FAC er en dialekt af APL, som Hai-Chen Tu tilsyneladende foreslog som sin ph.d.-afhandling i 1985. Han skrev senere en artikel sammen med Alan J. Perlis kaldet “ FAC: A Functional APL Language “. Denne dialekt af APL bruger “dovne arrays” og tillade arrays af uendelig længde. Den definerer en operator “iter” (⌼
) for at muliggøre kompakt definition af nogle rekursive sekvenser.
Monadic (“unary “) tilfælde af ⌼
er grundlæggende Haskell” s , og er defineret som (F⌼) A ≡ A, (F A), (F (F A)), …
. Det dyadiske (“binære”) tilfælde defineres noget analogt for to variabler: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …
. Hvorfor er dette nyttigt? Nå, som det viser sig, er dette netop den slags gentagelse, som Fibonacci-sekvensen har. Faktisk er et af eksemplerne der gives
1+⌼1
der producerer den velkendte sekvens 1 1 2 3 5 8 …
.
Så der er du, muligvis den kortest mulige Fibonacci-implementering i et ikke-nyhedsprogrammeringssprog. : D
Kommentarer
- Åh, jeg har ved et uheld un-community-wikied dit indlæg som en del af min (manuelle) bulk-afvikling. Nåvel. 😉
Svar
R, 40 byte
Har ikke set en R-løsning, så:
f=function(n)ifelse(n<3,1,f(n-1)+f(n-2))
Kommentarer
- Jeg ved, dette er et gammelt svar, men du kan afkortes til 38 bytes
Svar
05AB1E, 7 byte
Kode:
1$<FDr+
Kommentarer
- Hej og velkommen til PPCG! Dejligt første indlæg!
Svar
Svar
Desmos , 61 byte
Golfet
Klik på add slider
knap til n
.
p=.5+.5\sqrt{5} n=0 f=5^{-.5}\left(p^n-\left(-p\right)^{-n}\right)
Den sidste linje er output.
Ungolfed
Er en funktion.
\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 sproget er nyere end spørgsmålet.
Cubix er et nyt 2-dimensionelt sprog fra @ETHproductions, hvor koden er pakket ind på en terning, der er dimensioneret til at passe.
;.o.ON/+!)
Dette pakkes ind på en 2 x 2 terning på følgende måde
; . o . O N / + ! ) . . . . . . . . . . . . . .
-
O
output værdien af TOS -
N
skub newline på stakken -
/
reflekterer nord -
o
output karakteren af TOS -
;
pop-TOS -
/
reflekterer øst efter at have kørt rundt i terningen -
+
tilføj top 2-værdier i stakken -
!
spring næste kommando over, hvis TOS er 0 -
)
forøg TOS med 1. Dette starter i det væsentlige sekvensen.
Dette er en endeløs sløjfe, der udskriver sekvensen med en ny linieseparator. Det drager fordel af, at de fleste kommandoer ikke springer værdierne fra stakken.
Hvis separatoren ignoreres, kan dette gøres med 5 byte .O+!)
Svar
Brainfuck, 16,15, 14/13 tegn
+[[->+>+<<]>]
Genererer Fibonacci-sekvensen og udskriver ikke noget. Også, er kortere end den ovenfor.
+[.[->+>+<<]>]
Dette den ene har 14 tegn, men udskriver ASCII-tegn med værdierne for Fibonacci-sekvensen.
Kommentarer
- Dette er godt, men ville jeg være forkert ved at sige, at 14 byte-versionen kun udsendes fra 2. 1? Som i " 1 2 3 5 8 " i stedet for " 1 1 2 3 5 8 "?
- @Charlim Åh, du ' har ret. Jeg har ingen idé om, hvad jeg fra 2014 troede. I hvert fald rettede jeg det bare med mov ved at udskrive instruktioner til fronten af sløjfen.
+[[<+>->+>+<<]>]
+[.[>+>+<<-]>]