Secvența Fibonacci este o succesiune de numere, în care fiecare număr în secvență este suma celor două numere care o precedă. Primele două numere din secvență sunt ambele 1.
Iată primii termeni
1 1 2 3 5 8 13 21 34 55 89 ...
Scrieți cel mai scurt cod fie:
-
Generează secvența Fibonacci fără sfârșit.
-
Dat
n
calculeazăn
al termenului secvenței. (Fie 1 sau zero indexat)
Puteți utiliza forme standard de intrare și ieșire.
(Am dat ambele opțiuni în cazul în care una este mai ușor de faceți în limba aleasă decât în cealaltă.)
Pentru funcția care ia un n
, o valoare de returnare destul de mare (cel mai mare număr Fibonacci care se potrivește cu dimensiunea normală a cuvântului computerului dvs., cel puțin) trebuie să fie acceptată.
Clasament
/* 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>
Comentarii
- Aștept un răspuns ca " f ", 1 octet, în limbajul meu de golf bazat pe matematică.
Răspuns
Perl 6, 10 caractere:
Listă anonimă de secvențe fibonacci infinite:
^2,*+*...*
La fel ca:
0, 1, -> $x, $y { $x + $y } ... Inf;
Deci, îl puteți atribui unui tablou:
my @short-fibs = ^2, * + * ... *;
sau
my @fibs = 0, 1, -> $x, $y { $x + $y } ... Inf;
Și obțineți primele unsprezece valori (de la 0 la 10) cu:
say @short-fibs[^11];
sau cu:
say @fibs[^11];
Așteptați, puteți obține primele 50 de numere din lista anonimă în sine:
say (^2,*+*...*)[^50]
Acest lucru returnează:
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
Și câteva repere simple:
real 0m0.966s user 0m0.842s sys 0m0.080s
Cu:
$ time perl6 -e "say (^2, *+* ... *)[^50]"
EOF
Comentarii
- Nici nu aș crede ' din
^2
ca înlocuitor pentru0,1
. +1 - Acest lucru nu mai este valid, va trebui să-l scrieți ca
|^2,*+*...*
, care este același număr de octeți ca0,1,*+*...*
. - Perl este atât de ciudat.
- În ce versiune de Perl 6 a fost scris acest răspuns?
- @CalculatorFeline A existat o schimbare mare cunoscut sub numele de GLR (Great List Refactor) care s-a întâmplat cu puțin timp înainte de prima lansare oficială, care a avut loc pe 25.12.2015. Acest cod ar fi funcționat până în acel moment.
Răspuns
Brainfuck, 22 stroke
+>++[-<<[->+>+<<]>>>+]
Generează secvența Fibonacci deplasându-se treptat pe banda de memorie.
Comentarii
- Frumos ! Litteral de frumos! Sau poate nu … oricum +1 pentru asta 🙂
- Aceasta reprezintă 3.344 sau 4 octeți în brainfuck comprimat. (6 ln (22)) / ln (256)
- 16 octeți:
+[[<+>->+>+<<]>]
- 14 octeți:
+[.[>+>+<<-]>]
- @Stefnotch, desigur, cel mai scurt este distructiv. Soluția de mai sus se încheie cu secvența fibonacci de pe bandă, ceea ce face și soluția de 16 octeți.
Răspuns
Haskell, 17 15 14 caractere
f=1:scanl(+)1f
Comentarii
- De ce nu tăiați două spații la
f=0:scanl(+)1 f
? - @Martinho: Editat, mulțumesc.
- Uau, ' este chiar mai scurt decât
f@(_:x)=0:1:zipWith(+)f x
! Trebuie să-ți amintești. - Poți chiar să dezbraci un alt spațiu:
f=0:scanl(+)1f
.
Răspunde h2>
C # 4, 58 bytes
Flux (69; 65 dacă este slab tastat la IEnumerable
)
(Presupunând o directivă using
pentru System.Collections.Generic
.)
IEnumerable<int>F(){int c=0,n=1;for(;;){yield return c;n+=c;c=n-c;}}
Valoare unică (58)
int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}
Comentarii
- Având în vedere că
n
este un uint
, n==0
poate fi scurtat la n<1
. Și fluxul poate salva câteva caractere abandonând spațiul după tipul generic și declarând x
într-un domeniu mai larg decât este necesar.De fapt, renunțați la x
în întregime: n+=c;c=n-c;
- @Peter: Mulțumesc, voi edita când voi primi ceva timp.
- Versiunea dvs. cu valoare unică este atâta timp cât expresia mea recursivă lambda răspunde … frumos!
- @ wizzwizz4 dacă ' nu greșit, dacă
!n
funcționează, atunci ar trebui doar n
dacă întoarceți condiționalul.
- @JonSkeet Aw. Și aici mă gândeam că ' l-am bătut pe Jon Skeet la C # … 🙂
Răspuns
GolfScript, 12
Acum, doar 12 caractere!
1.{[email protected]+.}do
Comentarii
- +1 lucru frumos. Dacă îl faceți mai scurt de 13 caractere, ' voi accepta instantaneu răspunsul dvs. (cu excepția cazului în care cineva face un răspuns și mai scurt, desigur). 😛
- Ador o provocare. Terminat! 😉
- Frumos, câștigi. Cel puțin, până când cineva face ceva și mai scurt (dacă ' este posibil chiar). 😛
- acea definiție este aproape la fel de scurtă ca și numele ' Fibonacci '! +1
Răspuns
J, 10 caractere
Folosind calculul încorporat al Coeficienții seriei Taylor, deci poate puțin înșelători. Am învățat-o aici .
(%-.-*:)t. (%-.-*:)t. 0 1 2 3 4 5 10 100 0 1 1 2 3 5 55 354224848179261915075
Comentarii
- @aditsu
(q:^-^:p) 6
este 64 729
unde p este egal. J este probabil bun pentru ceea ce face ghicitori. 🙂
- Și mai bine:
(<:^-^:>) 4
este 81
și <:^-^:> 4
este 53.5982
.
- Emoji-ul demonstrat aici este spre ce ar trebui să se străduiască tot codul J. Pe o notă laterală, o altă alternativă este
+/@:!&i.-
folosind 9 octeți.
- @miles Foarte frumos! Ar trebui să-l postați întrucât este complet diferit de al meu.
Răspuns
> < > – 15 caractere
0:nao1v a+@:n:<o
Comentarii
- Deși îl puteți scurta la
0:nao1v LF a+@:n:<o
dacă vrei. Oferă 15 🙂 De fapt, acest lucru face și rezultatul ușor mai lizibil …
- 13 caractere:
01r:nao$:@+$r
Răspuns
Hexagony , 18 14 12
Mulțumesc Martin pentru 6 octeți!
1="/}.!+/M8;
Extins:
1 = " / } . ! + / M 8 ; . . . . . . .
Vechi, răspundeți. Acest lucru este lăsat, deoarece imaginile și explicația ar putea fi utile pentru noii utilizatori de hexagonie.
!).={!/"*10;$.[+{]
Extins:
! ) . = { ! / " * 1 0 ; $ . [ + { ] .
Aceasta imprimă secvența Fibonacci separată de linii noi.
Încercați-l online! Aveți grijă totuși, online interpretul nu prea îți place ieșirea infinită.
Explicație
Există două „subrutine” la acest program, fiecare fiind rulat de unul dintre cele două IP-uri utilizate. Prima rutină tipărește linii noi , iar al doilea face calculul și ieșirea Fibonacci.
Primul subrutină începe pe prima linie și se deplasează de la stânga la dreapta tot timpul. Tipărește mai întâi valoarea la indicatorul de memorie (inițializat la zero), și apoi mărește valoarea la indicatorul de memorie cu 1
. După oprire, IP-ul sare la a treia linie care trece mai întâi la o altă celulă de memorie, apoi imprimă o linie nouă. o linie nouă are o valoare pozitivă (valoarea sa este 10), a Codul va trece întotdeauna la a cincea linie, în continuare. A cincea linie returnează indicatorul de memorie la numărul nostru Fibonacci și apoi trece la celălalt subrutină. Când ne întoarcem de la acest subrutin, IP-ul va sări înapoi la a treia linie, după ce a executat un no-op.
Al doilea subrutin începe în colțul din dreapta sus și începe să se deplaseze spre sud-est. După o interzicere, suntem săriți pentru a călători spre vest de-a lungul celei de-a doua linii. Această linie tipărește numărul Fibonacci curent, înainte de a muta indicatorul de memorie la următoarea locație. Apoi IP-ul sare la a patra linie, unde calculează următorul număr Fibonacci folosind cele două precedente. Apoi redă controlul asupra primului subrutin, dar atunci când recâștigă controlul programului, continuă până când întâlnește un salt, unde sare peste oglinda care a fost folosită inițial pentru a-l îndrepta spre Vest, în timp ce revine la a doua linie.
Pretty Images Preliminary!
Partea stângă a imaginii este programul, partea dreaptă reprezintă memoria. Caseta albastră este prima adresă IP și ambele adrese IP indică următoarea instrucțiune care trebuie executată.
Notă: imaginile pot apar doar pentru persoanele care au o abilitate limitată în mod similar cu programele de editare a imaginilor: PI va adăuga cel puțin încă 2 iterații, astfel încât utilizarea operatorului *
să devină mai clară.
Nota 2: Am văzut răspunsul alephalpha după ce am scris cea mai mare parte a acestui lucru, mi-am dat seama că este încă valoros din cauza separării, dar Fibonacci propriu-zis părți din programele noastre sunt foarte asemănătoare. În plus, acesta este cel mai mic program Hexagony pe care l-am văzut folosind mai mult de un IP, așa că m-am gândit că ar putea fi bine să păstreze oricum: P
Comentarii
- Ar trebui să vă conectați la orice ați folosit pentru a face frumoasele imagini, apoi să puneți linkul pe esolangs.org/wiki/ Hexagony .
- @ mbomb007 Am folosit gimp pentru a crea manual fiecare cadru, apoi am încărcat imaginile f realizarea site-ului web. Deși, de mai multe ori în timpul acestui proces, m-am gândit să creez un instrument pentru ao face, având în vedere cât de plictisitor era.
- @FryAmTheEggman Impresionant! Faceți din asta o provocare. Sunt ' sigur că cineva va posta un răspuns. : D Chiar mai bine dacă ați putea crea un site web similar cu interpretul online pește '.
- @ mbomb007 Acest lucru ar putea fi un pic ambițios pentru o provocare pe acest site , ca să nu mai vorbim, probabil că ar suferi mult din cauza faptului că este cu adevărat larg. Nu ' nu cred că voi posta asta, dar simțiți-vă liber să o faceți singur dacă credeți că aveți un mod bun de a-l prezenta. De asemenea, cred că Timwi a creat un C # ide pentru hexagonie, deși eu ' nu l-am folosit niciodată pentru că nu m-am deranjat cu div. '
- @ mbomb007 Ideul trăiește aici , apropo, a uitat să-l conecteze ultima dată.
Răspuns
VACĂ , 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
Răspuns
Python 2, 34 octeți
Python, folosind recursivitate … aici vine un StackOverflow!
def f(i,j):print i;f(j,i+j) f(1,1)
Răspuns
Jelly , 3 octeți
+¡1
Cum funcționează
+¡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.
‡ ¡
aruncă o privire la cele două linkuri din stânga. Deoarece există doar unul, acesta trebuie să fie corpul buclei. Prin urmare, un număr este citit din intrare. Deoarece nu există argumente din linia de comandă, acel număr este citit din STDIN.
Răspuns
Hexagony , 6 octeți
Nu concurează deoarece limba este mai nouă decât întrebarea.
1.}=+!
Ungolfed:
1 . } = + ! .
Tipărește secvența Fibonacci fără niciun separator.
Comentarii
- Aceasta are o problemă minoră că nu ' nu imprimă niciun separator între numere. Totuși, acest lucru nu este ' complet specificat în provocare. (Și ' sunt foarte fericit că cineva folosește Hexagonia. :))
Răspunde
Golfscript – număr unic – 12/11/10
12 caractere pentru preluarea de date de la stdin:
~0 1@{.@+}*;
11 caractere pentru intrare deja în stivă:
0 1@{.@+}*;
10 caractere pentru definirea ulterioară a 1 ca al 0-lea număr Fibonacci:
1.@{.@+}*;
Comentarii
- Opțiunea este " Calculează, dat n, al n-lea număr Fibonacci ". Deci, renunțați la
~
și aveți 11 caractere care iau n
în stivă și lăsați F_n
pe stivă.
Răspuns
Ruby
29 27 25 24 Chars
p a=b=1;loop{b=a+a=p(b)}
Edit: a făcut-o o buclă infinită. 😉
Comentarii
- a observat cineva
b=a+a=b
este un palindrom? 🙂
- yes st0le did 🙂
- Știu că am ' întârziat la petrecere, dar poate cineva să explice cum id = „b8814e7df9″>
C # 4, 58 bytes
Flux (69; 65 dacă este slab tastat la IEnumerable
)
(Presupunând o directivă using
pentru System.Collections.Generic
.)
IEnumerable<int>F(){int c=0,n=1;for(;;){yield return c;n+=c;c=n-c;}}
Valoare unică (58)
int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}
Comentarii
- Având în vedere că
n
este unuint
,n==0
poate fi scurtat lan<1
. Și fluxul poate salva câteva caractere abandonând spațiul după tipul generic și declarândx
într-un domeniu mai larg decât este necesar.De fapt, renunțați lax
în întregime:n+=c;c=n-c;
- @Peter: Mulțumesc, voi edita când voi primi ceva timp.
- Versiunea dvs. cu valoare unică este atâta timp cât expresia mea recursivă lambda răspunde … frumos!
- @ wizzwizz4 dacă ' nu greșit, dacă
!n
funcționează, atunci ar trebui doarn
dacă întoarceți condiționalul. - @JonSkeet Aw. Și aici mă gândeam că ' l-am bătut pe Jon Skeet la C # … 🙂
GolfScript, 12
Acum, doar 12 caractere!
1.{[email protected]+.}do
Comentarii
- +1 lucru frumos. Dacă îl faceți mai scurt de 13 caractere, ' voi accepta instantaneu răspunsul dvs. (cu excepția cazului în care cineva face un răspuns și mai scurt, desigur). 😛
- Ador o provocare. Terminat! 😉
- Frumos, câștigi. Cel puțin, până când cineva face ceva și mai scurt (dacă ' este posibil chiar). 😛
- acea definiție este aproape la fel de scurtă ca și numele ' Fibonacci '! +1
J, 10 caractere
Folosind calculul încorporat al Coeficienții seriei Taylor, deci poate puțin înșelători. Am învățat-o aici .
(%-.-*:)t. (%-.-*:)t. 0 1 2 3 4 5 10 100 0 1 1 2 3 5 55 354224848179261915075
Comentarii
- @aditsu
(q:^-^:p) 6
este64 729
unde p este egal. J este probabil bun pentru ceea ce face ghicitori. 🙂 - Și mai bine:
(<:^-^:>) 4
este81
și<:^-^:> 4
este53.5982
. - Emoji-ul demonstrat aici este spre ce ar trebui să se străduiască tot codul J. Pe o notă laterală, o altă alternativă este
+/@:!&i.-
folosind 9 octeți. - @miles Foarte frumos! Ar trebui să-l postați întrucât este complet diferit de al meu.
> < > – 15 caractere
0:nao1v a+@:n:<o
Comentarii
- Deși îl puteți scurta la
0:nao1v LF a+@:n:<o
dacă vrei. Oferă 15 🙂 De fapt, acest lucru face și rezultatul ușor mai lizibil … - 13 caractere:
01r:nao$:@+$r
Hexagony , 18 14 12
Mulțumesc Martin pentru 6 octeți!
1="/}.!+/M8;
Extins:
1 = " / } . ! + / M 8 ; . . . . . . .
Vechi, răspundeți. Acest lucru este lăsat, deoarece imaginile și explicația ar putea fi utile pentru noii utilizatori de hexagonie.
!).={!/"*10;$.[+{]
Extins:
! ) . = { ! / " * 1 0 ; $ . [ + { ] .
Aceasta imprimă secvența Fibonacci separată de linii noi.
Încercați-l online! Aveți grijă totuși, online interpretul nu prea îți place ieșirea infinită.
Explicație
Există două „subrutine” la acest program, fiecare fiind rulat de unul dintre cele două IP-uri utilizate. Prima rutină tipărește linii noi , iar al doilea face calculul și ieșirea Fibonacci.
Primul subrutină începe pe prima linie și se deplasează de la stânga la dreapta tot timpul. Tipărește mai întâi valoarea la indicatorul de memorie (inițializat la zero), și apoi mărește valoarea la indicatorul de memorie cu 1
. După oprire, IP-ul sare la a treia linie care trece mai întâi la o altă celulă de memorie, apoi imprimă o linie nouă. o linie nouă are o valoare pozitivă (valoarea sa este 10), a Codul va trece întotdeauna la a cincea linie, în continuare. A cincea linie returnează indicatorul de memorie la numărul nostru Fibonacci și apoi trece la celălalt subrutină. Când ne întoarcem de la acest subrutin, IP-ul va sări înapoi la a treia linie, după ce a executat un no-op.
Al doilea subrutin începe în colțul din dreapta sus și începe să se deplaseze spre sud-est. După o interzicere, suntem săriți pentru a călători spre vest de-a lungul celei de-a doua linii. Această linie tipărește numărul Fibonacci curent, înainte de a muta indicatorul de memorie la următoarea locație. Apoi IP-ul sare la a patra linie, unde calculează următorul număr Fibonacci folosind cele două precedente. Apoi redă controlul asupra primului subrutin, dar atunci când recâștigă controlul programului, continuă până când întâlnește un salt, unde sare peste oglinda care a fost folosită inițial pentru a-l îndrepta spre Vest, în timp ce revine la a doua linie.
Pretty Images Preliminary!
Partea stângă a imaginii este programul, partea dreaptă reprezintă memoria. Caseta albastră este prima adresă IP și ambele adrese IP indică următoarea instrucțiune care trebuie executată.
Notă: imaginile pot apar doar pentru persoanele care au o abilitate limitată în mod similar cu programele de editare a imaginilor: PI va adăuga cel puțin încă 2 iterații, astfel încât utilizarea operatorului *
să devină mai clară.
Nota 2: Am văzut răspunsul alephalpha după ce am scris cea mai mare parte a acestui lucru, mi-am dat seama că este încă valoros din cauza separării, dar Fibonacci propriu-zis părți din programele noastre sunt foarte asemănătoare. În plus, acesta este cel mai mic program Hexagony pe care l-am văzut folosind mai mult de un IP, așa că m-am gândit că ar putea fi bine să păstreze oricum: P
Comentarii
- Ar trebui să vă conectați la orice ați folosit pentru a face frumoasele imagini, apoi să puneți linkul pe esolangs.org/wiki/ Hexagony .
- @ mbomb007 Am folosit gimp pentru a crea manual fiecare cadru, apoi am încărcat imaginile f realizarea site-ului web. Deși, de mai multe ori în timpul acestui proces, m-am gândit să creez un instrument pentru ao face, având în vedere cât de plictisitor era.
- @FryAmTheEggman Impresionant! Faceți din asta o provocare. Sunt ' sigur că cineva va posta un răspuns. : D Chiar mai bine dacă ați putea crea un site web similar cu interpretul online pește '.
- @ mbomb007 Acest lucru ar putea fi un pic ambițios pentru o provocare pe acest site , ca să nu mai vorbim, probabil că ar suferi mult din cauza faptului că este cu adevărat larg. Nu ' nu cred că voi posta asta, dar simțiți-vă liber să o faceți singur dacă credeți că aveți un mod bun de a-l prezenta. De asemenea, cred că Timwi a creat un C # ide pentru hexagonie, deși eu ' nu l-am folosit niciodată pentru că nu m-am deranjat cu div. '
- @ mbomb007 Ideul trăiește aici , apropo, a uitat să-l conecteze ultima dată.
VACĂ , 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
Python 2, 34 octeți
Python, folosind recursivitate … aici vine un StackOverflow!
def f(i,j):print i;f(j,i+j) f(1,1)
Jelly , 3 octeți
+¡1
Cum funcționează
+¡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.
‡ ¡
aruncă o privire la cele două linkuri din stânga. Deoarece există doar unul, acesta trebuie să fie corpul buclei. Prin urmare, un număr este citit din intrare. Deoarece nu există argumente din linia de comandă, acel număr este citit din STDIN.
Hexagony , 6 octeți
Nu concurează deoarece limba este mai nouă decât întrebarea.
1.}=+!
Ungolfed:
1 . } = + ! .
Tipărește secvența Fibonacci fără niciun separator.
Comentarii
- Aceasta are o problemă minoră că nu ' nu imprimă niciun separator între numere. Totuși, acest lucru nu este ' complet specificat în provocare. (Și ' sunt foarte fericit că cineva folosește Hexagonia. :))
Golfscript – număr unic – 12/11/10
12 caractere pentru preluarea de date de la stdin:
~0 1@{.@+}*;
11 caractere pentru intrare deja în stivă:
0 1@{.@+}*;
10 caractere pentru definirea ulterioară a 1 ca al 0-lea număr Fibonacci:
1.@{.@+}*;
Comentarii
- Opțiunea este " Calculează, dat n, al n-lea număr Fibonacci ". Deci, renunțați la
~
și aveți 11 caractere care iaun
în stivă și lăsațiF_n
pe stivă.
Ruby
29 27 25 24 Chars
p a=b=1;loop{b=a+a=p(b)}
Edit: a făcut-o o buclă infinită. 😉
Comentarii
- a observat cineva
b=a+a=b
este un palindrom? 🙂 - yes st0le did 🙂
- Știu că am ' întârziat la petrecere, dar poate cineva să explice cum id = „b8814e7df9″>
parte funcționează? ' nu poate să-mi înfășoare capul în jurul său.
newb=olda+(a=oldb)
loop
: p 1,a=b=1;loop{p b=a+a=b}
Răspuns
DC (20 octeți)
Ca bonus, „este chiar ofuscat;)
zzr[dsb+lbrplax]dsax
EDIT: Pot să subliniez că tipărește toate numerele din secvența Fibonacci, dacă aștepți suficient de mult.
Comentarii
- Nu aș numi ' nu-l numesc ofuscat – cod ofuscat se presupune că este dificil de înțeles și, în ceea ce privește dc, codul este complet simplu.
Răspuns
Mathematica, 9 caractere
Fibonacci
Dacă funcțiile încorporate nu sunt permise, aici este o soluție explicită:
Mathematica, 33 32 31 de caractere
#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Comentarii
-
#&@@Nest[{#+#2,#}&@@#&,{0,1},#]&
32 de caractere. - @chyanog 31:
#&@@Nest[{+##,#}&@@#&,{0,1},#]&
- @ Mr.Wizard 24 de caractere (26 octeți):
Round[GoldenRatio^#/√5]&
- sau 23 de caractere (27 octeți):
Round[((1+√5)/2)^#/√5]&
Răspuns
Prelude , 12 octeți
Una dintre puținele provocări în care Prelude este de fapt destul de competitiv:
1(v!v) ^+^
Acest lucru necesită interpretorul Python care tipărește valori ca numere zecimale în loc de caractere.
Explicație
În Preludiu, toate liniile sunt executate în paralel, cu indicatorul de instrucțiuni care traversează coloanele programului. Fiecare linie are propria stivă care este inițializată la zero.
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.
Bucla se repetă pentru totdeauna, deoarece prima stivă nu va avea niciodată un 0
deasupra.
Rețineți că aceasta începe secvența Fibonacci de la 0
.
Răspuns
TI-BASIC, 11
De legendarul jucător de golf TI-BASIC Kenneth Hammond („Weregoose”), de la acest site . Se execută în timpul O (1) și consideră că 0 este al 0-lea termen al secvenței Fibonacci.
int(round(√(.8)cosh(Anssinh‾¹(.5
A utiliza:
2:int(round(√(.8)cosh(Anssinh‾¹(.5 1 12:int(round(√(.8)cosh(Anssinh‾¹(.5 144
Cum funcționează acest lucru? Dacă faceți calculele, se dovedește că sinh‾¹(.5)
este egal cu ln φ
, deci este o versiune modificată a formulei Binet care se rotunjește în loc să utilizeze termenul de corecție (1/φ)^n
. round(
(rotunjit la 9 zecimale) este necesar pentru a preveni erorile de rotunjire.
Răspuns
K – 12
Calculează n
și n-1
numărul Fibonacci.
{x(|+\)/0 1}
Doar nth
numărul Fibonacci.
{*x(|+\)/0 1}
Comentarii
- +1 Nu e rău! Dacă ați putea să-l micșorați doar un singur caracter (și să-mi oferiți o modalitate de a-l testa), voi ' vă voi accepta răspunsul. 🙂
- Singura modalitate de reducere ar fi înlocuirea funcției cu un apel către un număr cunoscut: n (| + \ ) / 0 1 Testați-l folosind acest interpret .
Răspundeți
Java, 55
Nu pot concura cu concizia majorității limbajelor de aici, dar pot oferi un mod substanțial diferit și posibil mult mai rapid (timp constant) de a calcula al n-lea număr:
Math.floor(Math.pow((Math.sqrt(5)+1)/2,n)/Math.sqrt(5))
n
este intrarea (int sau long), începând cu n = 1. Folosește Formula lui Binet și rotunde în loc de scădere.
Comentarii
- Îmi place această soluție
- Acest lucru nu ' pare să funcționeze pentru mine, dar ' este devreme și s-ar putea să fiu lipsește ceva! Presupunând că
0
este primul număr din secvență, acest lucru dă0, 0, 1, 1, 3, 4, 8, 12, 21, 33
pentru primii t 10 numere - @Shaggy Hopa! Ne pare rău, am introdus o eroare – remediată acum.
Răspuns
Julia, 18 octeți
n->([1 1;1 0]^n)[]
Răspuns
Dodos , 26 octeți
dot F F F dip F dip dip
Cum funcționează
Funcția F face tot greul; este definit recursiv după cum urmează.
F(n) = ( F(|n - 1|), F(||n - 1| - 1|) )
Ori de câte ori n> 1 , avem | n – 1 | = n – 1 < n și || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , deci funcția returnează (F (n – 1), F (n – 2)) .
Dacă n = 0 , apoi | n – 1 | = 1> 0 ; dacă n = 1 , atunci || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . În ambele cazuri, încercările de apel recursiv F (1) ridică o excepție Surrender , deci F (0) returnează 0 și F (1) returnează 1 .
De exemplu, F (3) = (F (1), F (2)) = (1 , F (0), F (1)) = (1, 0, 1) .
În cele din urmă, funcția principală este definită ca
main(n) = sum(F(n))
deci adaugă toate coordonatele vectorului returnat de F .
De exemplu, principal (3) = sum (F (3)) = sum (1, 0, 1) = 2 .
Comentarii
Răspundeți
Ruby, 25 de caractere
st0le Răspunsul s-a scurtat.
p 1,a=b=1;loop{p b=a+a=b}
Comentarii
- De fapt, îl puteți scurta și mai mult folosind
a=b=1;loop{p a;b=a+a=b}
- Deci, îi răspunzi răspunsul?: P
Răspuns
FAC: APL funcțional, 4 caractere (!!)
Nu al meu, așadar postat ca wiki comunitar. FAC este un dialect al APL pe care Hai-Chen Tu l-a sugerat aparent drept disertație în 1985. Ulterior a scris împreună cu Alan J. Perlis un articol numit „ FAC: A Functional APL Language „. Acest dialect al APL folosește „matrice leneșe” și permite matrici de lungime infinită. Acesta definește un operator „iter” (⌼
) pentru a permite definirea compactă a unor secvențe recursive.
Monadic („unary „) cazul ⌼
este practic și este definit ca (F⌼) A ≡ A, (F A), (F (F A)), …
. Cazul diadic („binar”) este definit oarecum analog pentru două variabile: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …
. De ce este util acest lucru? Ei bine, după cum se dovedește, acesta este exact genul de recurență pe care îl are secvența Fibonacci. De fapt, unul dintre exemplele date este
1+⌼1
producând secvența familiară 1 1 2 3 5 8 …
.
Deci, iată-te, probabil cea mai scurtă implementare Fibonacci posibilă într-un limbaj de programare fără noutăți. : D
Comentarii
- Oh, din greșeală am dezactivat wiki-ul postării dvs. ca parte a desenului meu (manual) în vrac. Oh bine. 😉
Răspuns
R, 40 octeți
Nu am văzut un Soluție R, deci:
f=function(n)ifelse(n<3,1,f(n-1)+f(n-2))
Comentarii
- Știu că acesta este un răspuns vechi, dar tu se poate scurta la 38 octeți
Răspuns
05AB1E, 7 octeți
Cod:
1$<FDr+
Comentarii
- Bună ziua și bun venit la PPCG! Frumos prim mesaj!
Răspuns
GolfScript, 13 caractere
2,~{..p@+.}do
(Răspunsul meu dintr-un întrebare anterioară Stack Overflow .)
Răspuns
Desmos , 61 octeți
Golf
Faceți clic pe add slider
buton pentru n
.
p=.5+.5\sqrt{5} n=0 f=5^{-.5}\left(p^n-\left(-p\right)^{-n}\right)
Ultima linie este ieșirea.
Ungolfed
Este o funcție.
\phi =\frac{1+\sqrt{5}}{2} f_{ibonacci}\left(n\right)=\frac{\phi ^n-\left(-\phi \right)^{-n}}{\sqrt{5}}
Răspuns
Cubix , 10 octeți
Răspuns neconcurențial, deoarece limbajul este mai nou decât întrebarea.
Cubix este un nou limbaj bidimensional de @ETHproductions în care codul este înfășurat pe un cub dimensionat pentru a se potrivi.
;.o.ON/+!)
Aceasta se înfășoară pe un 2 x 2 cub în modul următor
; . o . O N / + ! ) . . . . . . . . . . . . . .
-
O
scoate valoarea TOS -
N
împingeți linia nouă pe stivă -
/
reflectați nord -
o
generează caracterul TOS -
;
TOS pop -
/
reflectă estul după ce înconjoară cubul -
+
adăugați cele mai bune 2 valori ale stivei -
!
omiteți următoarea comandă dacă TOS este 0 -
)
creșteți TOS-ul cu 1. Acest lucru dă startul secvenței în esență.
Aceasta este o buclă nesfârșită care imprimă secvența cu un separator de linie nouă. Profită de faptul că majoritatea comenzilor nu scot valorile din stivă.
Dacă separatorul este ignorat, atunci acest lucru se poate face cu 5 octeți .O+!)
Răspuns
Brainfuck, 16,15, 14/13 caractere
+[[->+>+<<]>]
Generează secvența Fibonacci și nu imprimă nimic. De asemenea, este mai scurt decât cel de mai sus.
+[.[->+>+<<]>]
Acest lucru unul are 14 caractere, dar imprimă caractere ASCII cu valorile secvenței Fibonacci.
Comentarii
- Este bine, dar aș fi incorect spunând că versiunea de 14 octeți iese doar din al doilea 1? id = „b3a474a808″>
1 1 2 3 5 8 "?