Die Fibonacci-Sequenz ist eine Folge von Zahlen, wobei jede Zahl in der Folge ist die Summe der beiden Zahlen davor. Die ersten beiden Zahlen in der Sequenz sind beide 1.

Hier sind die ersten Begriffe

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

Schreiben Sie den kürzesten Code dass entweder:

  • die Fibonacci-Sequenz ohne Ende erzeugt.

  • Gegeben n berechnet den n -ten Term der Sequenz. (Entweder 1 oder Null indiziert)

Sie können Standardformen der Eingabe und Ausgabe verwenden.

(Ich habe beide Optionen angegeben, falls eine einfacher ist tun Sie in der von Ihnen gewählten Sprache als in der anderen.)


Für die Funktion, die eine n verwendet, einen relativ großen Rückgabewert (die größte Fibonacci-Zahl, die passt mindestens zur normalen Wortgröße Ihres Computers) muss unterstützt werden.


Bestenliste

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

Kommentare

  • Ich warte auf eine Antwort wie " f ", 1 Byte, in meiner mathematisch basierten Golfsprache.

Antwort

Perl 6, 10 Zeichen:

Anonyme unendliche Fibonacci-Sequenzliste:

^2,*+*...* 

Wie:

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

Sie können es also einem Array zuweisen:

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

oder

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

Und erhalten Sie die ersten elf Werte (von 0 bis 10) mit:

say @short-fibs[^11]; 

oder mit:

say @fibs[^11]; 

Warten Sie, Sie können auch die ersten 50 Nummern aus der anonymen Liste selbst abrufen:

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

Das gibt Folgendes zurück:

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 

Und einige einfache Benchmarks:

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

Mit:

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

EOF

Kommentare

  • Ich würde ' nicht einmal denken von ^2 als Ersatz für 0,1. +1
  • Dies ist nicht mehr gültig. Sie müssen es als |^2,*+*...* schreiben. Dies entspricht der Anzahl der Bytes wie .
  • Perl ist so seltsam.
  • In welcher Version von Perl 6 wurde diese Antwort geschrieben?
  • @CalculatorFeline Es gab eine große Änderung bekannt als GLR (Great List Refactor), der kurz vor der ersten offiziellen Veröffentlichung am 25.12.2015 stattfand. Dieser Code hätte bis zu diesem Zeitpunkt funktioniert.

Antwort

Brainfuck, 22 Striche

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

Erzeugt die Fibonacci-Sequenz, die sich allmählich über das Speicherband bewegt.

Kommentare

  • Schön ! Wurfschön! Oder vielleicht auch nicht … sowieso +1 dafür 🙂
  • Dies sind 3,344 oder 4 Bytes in komprimiertem Brainfuck. (6 ln (22)) / ln (256)
  • 16 Bytes: +[[<+>->+>+<<]>]
  • 14 Bytes: +[.[>+>+<<-]>]
  • @Stefnotch natürlich, der kürzere ist destruktiv. Die obige Lösung endet mit der Fibonacci-Sequenz auf dem Band, was auch die 16-Byte-Lösung tut.

Antwort

Haskell, 17 15 14 Zeichen

f=1:scanl(+)1f 

Probieren Sie es online aus!

Kommentare

  • Warum nicht zwei Leerzeichen auf f=0:scanl(+)1 f?
  • @Martinho: Bearbeitet, danke.
  • Wow, das ' ist noch kürzer als das übliche f@(_:x)=0:1:zipWith(+)f x! Sie müssen sich daran erinnern.
  • Sie können sogar ein anderes Leerzeichen entfernen: f=0:scanl(+)1f.

Antwort

C # 4, 58 Byte

Stream (69; 65, wenn schwach in IEnumerable)

(Angenommen, eine using Direktive für System.Collections.Generic.)

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

Einzelwert (58)

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

Kommentare

  • Vorausgesetzt, dass n ist eine uint, n==0 kann auf n<1 gekürzt werden. Und der Stream kann einige Zeichen sparen, indem er den Speicherplatz nach dem generischen Typ löscht und x in einem größeren Bereich als erforderlich deklariert.In der Tat, Graben x vollständig: n+=c;c=n-c;
  • @Peter: Danke, wird bearbeitet, wenn ich etwas Zeit habe.
  • Ihre Einzelwertversion ist so lange wie mein rekursiver Lambda-Ausdruck antwortet … nett!
  • @ wizzwizz4, wenn ich ' nicht bin falsch, wenn !n funktioniert, sollte dies auch nur n sein, wenn Sie die Bedingung umdrehen.
  • @JonSkeet Aw. Und hier dachte ich, ich hätte ' Jon Skeet bei C # geschlagen … 🙂

Antwort

GolfScript, 12

Jetzt nur noch 12 Zeichen!

1.{[email protected]+.}do 

Kommentare

  • +1 gute Arbeit. Wenn Sie es kürzer als 13 Zeichen machen, werde ich ' Ihre Antwort sofort akzeptieren (es sei denn, jemand gibt natürlich eine noch kürzere Antwort). 😛
  • Ich liebe eine Herausforderung. Getan! 😉
  • Schön, du gewinnst. Zumindest bis jemand etwas noch kürzer macht (wenn das ' überhaupt möglich ist). 😛
  • diese Definition ist fast so kurz wie der Name ' Fibonacci ' selbst! +1

Antwort

J, 10 Zeichen

Verwenden der integrierten Berechnung von Taylor-Reihen-Koeffizienten also vielleicht wenig betrügerisch. Ich habe es hier gelernt.

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

Kommentare

  • @aditsu (q:^-^:p) 6 ist 64 729 wobei p gerade ist. J ist wahrscheinlich gut für was es tut Rätsel. 🙂
  • Noch besser: (<:^-^:>) 4 ist 81 und <:^-^:> 4 ist 53.5982.
  • Das hier gezeigte Emoji ist das, wonach der gesamte J-Code streben sollte. Nebenbei bemerkt, eine andere Alternative ist +/@:!&i.- mit 9 Bytes.
  • @miles Sehr schön! Sie sollten es veröffentlichen, da es sich völlig von meinem unterscheidet.

Antwort

> < > – 15 Zeichen

0:nao1v a+@:n:<o 

Kommentare

  • Sie können es jedoch auf 0:nao1v LF a+@:n:<o wenn du willst. Gibt 15 🙂 Tatsächlich macht dies die Ausgabe auch etwas lesbarer …
  • 13 Zeichen: 01r:nao$:@+$r

Antwort

Hexagony , 18 14 12

Danke Martin für 6 Bytes!

1="/}.!+/M8; 

Erweitert:

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

Probieren Sie es online aus


Alt, antworten Sie. Dies wird beibehalten, da die Bilder und Erklärungen für neue Hexagony-Benutzer hilfreich sein können.

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

Erweitert:

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

Hiermit wird die durch Zeilenumbrüche getrennte Fibonacci-Sequenz gedruckt.

Probieren Sie es online aus! Seien Sie jedoch vorsichtig, online Der Interpreter mag die unendliche Ausgabe nicht wirklich.

Erläuterung

Dieses Programm enthält zwei „Unterprogramme“, die jeweils von einer der beiden verwendeten IPs ausgeführt werden. Die erste Routine druckt Zeilenumbrüche und die zweite führt die Fibonacci-Berechnung und -Ausgabe durch.

Die erste Unterroutine beginnt in der ersten Zeile und bewegt sich die gesamte Zeit von links nach rechts. Sie druckt zuerst den Wert am Speicherzeiger (auf Null initialisiert). und erhöht dann den Wert am Speicherzeiger um 1. Nach dem No-Op springt die IP zur dritten Zeile, die zuerst zu einer anderen Speicherzelle wechselt, und druckt dann eine neue Zeile Eine Newline hat einen positiven Wert (ihr Wert ist 10) Der Code springt immer zur nächsten fünften Zeile. Die fünfte Zeile gibt den Speicherzeiger auf unsere Fibonacci-Nummer zurück und wechselt dann zur anderen Unterroutine. Wenn wir von diesem Unterprogramm zurückkehren, springt die IP nach dem Ausführen eines No-Op in die dritte Zeile zurück.

Das zweite Unterprogramm beginnt in der oberen rechten Ecke und beginnt sich nach Südosten zu bewegen. Nach einem No-Op werden wir auf der zweiten Linie nach Westen gebracht. Diese Zeile gibt die aktuelle Fibonacci-Nummer aus, bevor der Speicherzeiger an die nächste Stelle bewegt wird. Dann springt die IP zur vierten Zeile, wo sie die nächste Fibonacci-Zahl unter Verwendung der beiden vorherigen berechnet. Es gibt dann die Kontrolle an die erste Unterroutine zurück, aber wenn es die Kontrolle über das Programm wiedererlangt, wird es fortgesetzt, bis es auf einen Sprung trifft, wo es über den Spiegel springt, der ursprünglich verwendet wurde, um es nach Westen zu richten, während es zur zweiten Zeile zurückkehrt.


Vorläufige hübsche Bilder!

Die linke Seite des Bildes ist das Programm, die rechte Seite repräsentiert den Speicher. Das blaue Kästchen ist die erste IP, und beide IPs zeigen auf die nächste auszuführende Anweisung.

Geben Sie hier die Bildbeschreibung ein.

Hinweis: Bilder können Nur für Personen mit ähnlich eingeschränkten Kenntnissen in Bildbearbeitungsprogrammen erscheint PI hübsch: PI fügt mindestens zwei weitere Iterationen hinzu, damit die Verwendung des Operators * klarer wird.

Anmerkung 2: Ich habe nur die Antwort von alephalpha gesehen, nachdem ich das meiste davon geschrieben hatte, dachte ich, dass es wegen der Trennung immer noch wertvoll ist, aber die tatsächlichen Fibonacci Teile unserer Programme sind sehr ähnlich. Außerdem ist dies das kleinste Hexagony-Programm, bei dem mehr als eine IP verwendet wurde. Daher hielt ich es für sinnvoll, es trotzdem beizubehalten: P

Kommentare

  • Sie sollten auf alles verlinken, was Sie zum Erstellen der hübschen Bilder verwendet haben, und dann den Link auf esolangs.org/wiki/ setzen. Hexagony .
  • @ mbomb007 Ich habe Gimp verwendet, um jeden Frame manuell zu erstellen, und dann die Bilder auf ein Gi hochgeladen f Website erstellen. Obwohl ich während dieses Prozesses mehrmals darüber nachgedacht habe, ein Tool dafür zu entwickeln, wenn man bedenkt, wie langweilig es war.
  • @FryAmTheEggman Beeindruckend! Mach es zu einer Herausforderung. Ich ' bin sicher, dass jemand eine Antwort posten wird. : D Noch besser, wenn Sie eine Website erstellen könnten, die dem Online-Interpreter von fish ' ähnelt.
  • @ mbomb007 Das könnte für eine Herausforderung auf dieser Website ein wenig ehrgeizig sein Ganz zu schweigen davon, dass es wahrscheinlich sehr darunter leiden würde, wirklich breit zu sein. Ich glaube nicht, dass ich das posten werde, aber Sie können es gerne selbst tun, wenn Sie der Meinung sind, dass Sie eine gute Möglichkeit haben, es zu präsentieren. Ich glaube auch, dass Timwi ein C # -Ide für Hexagonie erstellt hat, obwohl ich ' es nie verwendet habe, weil ich ' nicht mit Mono belästigt habe.
  • @ mbomb007 Die Idee lebt hier hat übrigens vergessen, sie das letzte Mal zu verlinken.

Antwort

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 

Antwort

Python 2, 34 Byte

Python mit Rekursion … hier kommt ein StackOverflow!

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

Antwort

Gelee , 3 Bytes

+¡1 

Probieren Sie es online aus!

Funktionsweise

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

¡ wirft einen Blick auf die beiden Links links. Da es nur einen gibt, muss es der Körper der Schleife sein. Daher wird eine Zahl von der Eingabe gelesen. Da es keine Befehlszeilenargumente gibt, wird diese Nummer aus STDIN gelesen.

Antwort

Hexagony , 6 Byte

Nicht konkurrierend, da die Sprache neuer als die Frage ist.

1.}=+! 

Ungolfed:

 1 . } = + ! . 

Es wird die Fibonacci-Sequenz ohne Trennzeichen gedruckt.

Kommentare

  • Dies hat das kleine Problem, dass ' kein Trennzeichen zwischen den Zahlen druckt. Dies ist jedoch ' in der Herausforderung nicht ganz genau angegeben. (Und ich ' bin wirklich froh, dass jemand Hexagony verwendet. :))

Antwort

Golfscript – einzelne Nummer – 11.12.10

12 Zeichen für die Eingabe von stdin:

~0 1@{.@+}*; 

11 Zeichen für die Eingabe bereits auf dem Stapel:

0 1@{.@+}*; 

10 Zeichen für die weitere Definition von 1 als 0. Fibonacci-Zahl:

1.@{.@+}*; 

Kommentare

  • Die Option ist " Berechnet mit n die n-te Fibonacci-Zahl ". Lassen Sie also die ~ fallen und Sie haben 11 Zeichen, die n auf den Stapel nehmen und F_n auf dem Stapel.

Antwort

Ruby

29 27 25 24 Zeichen

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

Bearbeiten: machte es zu einer Endlosschleife. 😉

Kommentare

  • Hat jemand bemerkt, dass b=a+a=b ein Palindrom ist? 🙂
  • ja ja, das hat 🙂 🙂
  • Ich weiß, dass ich ' zu spät zur Party komme, aber kann jemand erklären, wie die b=a+a=b Teil funktioniert? Kann ' meinen Kopf nicht darum wickeln.
  • @GigaWatt, denken Sie so, Anweisungen werden von links nach rechts ausgeführt …newb=olda+(a=oldb)
  • Sie können also 2 Zeichen speichern, indem Sie loop verwenden: p 1,a=b=1;loop{p b=a+a=b}

Antwort

DC (20 Bytes)

Als Bonus gilt dies „s sogar verschleiert;)

zzr[dsb+lbrplax]dsax 

BEARBEITEN: Ich kann darauf hinweisen, dass alle Zahlen in der Fibonacci-Sequenz gedruckt werden, wenn Sie warten lange genug.

Kommentare

  • Ich würde ' es nicht als verschleierten – verschleierten Code bezeichnen soll schwer zu verstehen sein, und was DC betrifft, ist der Code hier völlig unkompliziert.

Antwort

Mathematica, 9 Zeichen

Fibonacci 

If Eingebaute Funktionen sind nicht zulässig. Hier ist eine explizite Lösung:

Mathematica, 33 32 31 Zeichen

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

Kommentare

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

Antwort

Prelude , 12 Bytes

Eine der wenigen Herausforderungen, bei denen Prelude tatsächlich ziemlich wettbewerbsfähig ist:

1(v!v) ^+^ 

Dies erfordert den Python-Interpreter , der Werte als Dezimalzahlen anstelle von Zeichen druckt.

Erläuterung

In Prelude, Alle Zeilen werden parallel ausgeführt, wobei der Befehlszeiger die Spalten des Programms durchläuft. Jede Zeile hat einen eigenen Stapel, der auf Null initialisiert wird.

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. 

Die Schleife wird für immer wiederholt, da der erste Stapel niemals eine 0 oben hat.

Beachten Sie, dass dies die Fibonacci-Sequenz von 0 startet.

Antwort

TI-BASIC, 11

Von dem legendären TI-BASIC-Golfer Kenneth Hammond („Weregoose“) aus dieser Site . Läuft in O (1) -Zeit und betrachtet 0 als den 0. Term der Fibonacci-Sequenz.

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

Verwendung:

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

Wie funktioniert das? Wenn Sie rechnen, stellt sich heraus, dass sinh‾¹(.5) gleich ln φ ist, also „eine modifizierte Version von Binets Formel“ rundet ab, anstatt den Korrekturterm (1/φ)^n zu verwenden. Die round( (auf 9 Dezimalstellen runden) wird benötigt, um Rundungsfehler zu vermeiden.

Antwort

K – 12

Berechnet die n und n-1 Fibonacci-Zahl.

{x(|+\)/0 1} 

Nur die nth Fibonacci-Nummer.

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

Kommentare

  • +1 Nicht schlecht! Wenn Sie es nur um ein Zeichen verkleinern könnten (und mir eine Möglichkeit zum Testen bieten könnten), würde ich Ihre Antwort ' akzeptieren. 🙂
  • Die einzige Möglichkeit, dies zu verringern, besteht darin, die Funktion durch einen Aufruf einer bekannten Nummer zu ersetzen: n (| + \ ) / 0 1 Testen Sie es mit diesem Interpreter .

Antwort

Java, 55

Ich kann hier nicht mit der Prägnanz der meisten Sprachen konkurrieren, aber ich kann eine wesentlich andere und möglicherweise viel schnellere (konstante Zeit) Methode zur Berechnung der n-ten Zahl anbieten:

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

n ist die Eingabe (int oder long), beginnend mit n = 1. Sie verwendet Binets Formel und Runden anstelle der Subtraktion.

Kommentare

  • Ich liebe Diese Lösung
  • Dies scheint nicht ' für mich zu funktionieren, aber ' ist früh und ich kann es sein Unter der Annahme, dass 0 die erste Zahl in der Sequenz ist, ergibt dies 0, 0, 1, 1, 3, 4, 8, 12, 21, 33 für die Tannen t 10 Zahlen
  • @Shaggy Ups! Entschuldigung, ich habe einen Fehler eingeführt, der jetzt behoben wurde.

Antwort

Julia, 18 Bytes

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

Antwort

Dodos , 26 Bytes

	dot F F 	F dip 	F dip dip 

Probieren Sie es online aus!

Wie es funktioniert

Die Funktion F erledigt das ganze schwere Heben; es wird rekursiv wie folgt definiert.

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

Wann immer n> 1 , haben wir | n – 1 | = n – 1 < n und || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , daher gibt die Funktion (F (n) zurück – 1), F (n – 2)) .

Wenn n = 0 , dann | n – 1 | = 1> 0 ; Wenn n = 1 , dann || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . In beiden Fällen lösen die versuchten rekursiven Aufrufe F (1) eine Surrender -Ausnahme aus, also F (0) gibt 0 und F (1) gibt 1 .

Zum Beispiel F (3) = (F (1), F (2)) = (1 , F (0), F (1)) = (1, 0, 1) .

Schließlich ist die main -Funktion ist definiert als

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

, sodass alle Koordinaten des zurückgegebenen Vektors addiert werden von F .

Zum Beispiel main (3) = Summe (F (3)) = Summe (1, 0, 1) = 2 .

Kommentare

  • Ich habe Ihre README (DODOS) gelesen und bin super fasziniert; Es ist ein wirklich tolles Konzept! Aber ich kann es auf Esolangs oder anderswo nicht finden. Haben Sie sich das ausgedacht?

Antwort

Ruby, 25 Zeichen

st0le „s Antwort verkürzt.

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

Kommentare

  • Tatsächlich können Sie sie mit a=b=1;loop{p a;b=a+a=b}
  • Also st0le du seine Antwort ?: P

Antwort

FAC: Funktionale APL, 4 Zeichen (!!)

Nicht meine, daher als Community-Wiki veröffentlicht. FAC ist ein Dialekt der APL, den Hai-Chen Tu offenbar als seine Doktorarbeit vorgeschlagen hat Er schrieb später zusammen mit Alan J. Perlis einen Artikel mit dem Titel „ FAC: Eine funktionale APL-Sprache . Dieser Dialekt von APL verwendet“ Lazy Arrays „und Arrays mit unendlicher Länge zulassen. Es definiert einen Operator „iter“ (), um eine kompakte Definition einiger rekursiver Sequenzen zu ermöglichen.

Die Monade („unär“) „) Fall von ist im Grunde Haskells und ist definiert als (F⌼) A ≡ A, (F A), (F (F A)), …. Der dyadische („binäre“) Fall ist für zwei Variablen etwas analog definiert: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Warum ist das nützlich? Nun, wie sich herausstellt, ist dies genau die Art von Wiederholung, die die Fibonacci-Sequenz hat. Tatsächlich ist eines der angegebenen Beispiele

1+⌼1 

, das die bekannte Sequenz 1 1 2 3 5 8 … erzeugt.

Also los, möglicherweise die kürzestmögliche Fibonacci-Implementierung in einer nicht neuartigen Programmiersprache. : D

Kommentare

  • Oh, ich habe Ihren Beitrag versehentlich als Teil meines (manuellen) Bulk-Unwikiing aus der Community entfernt. Naja. 😉

Antwort

R, 40 Bytes

Habe a nicht gesehen R Lösung, also:

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

Kommentare

  • Ich weiß, dass dies eine alte Antwort ist, aber Sie kann auf 38 Bytes

Antwort

05AB1E, 7 Bytes

Code:

1$<FDr+ 

Probieren Sie es online aus!

Kommentare

  • Hallo, und willkommen bei PPCG! Schöner erster Beitrag!

Antwort

GolfScript, 13 Zeichen

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

(Meine Antwort von einer vorherige Stapelüberlauffrage .)

Antwort

Desmos , 61 Byte

Golf

Klicken Sie auf add slider Schaltfläche für n.

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

Die letzte Zeile ist die Ausgabe.

Ungolfed

ist eine Funktion.

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

Antwort

Cubix , 10 Byte

Nicht konkurrierende Antwort, da die Sprache neuer als die Frage ist.

Cubix ist eine neue zweidimensionale Sprache von @ETHproductions, bei der der Code in einen passenden Würfel gewickelt wird.

;.o.ON/+!) 

Probieren Sie es online aus

Dies wird auf eine 2 gewickelt x 2 cube auf folgende Weise

 ; . o . O N / + ! ) . . . . . . . . . . . . . . 
  • O gibt den Wert der TOS
  • N Zeilenumbruch auf Stapel schieben
  • / nach Norden spiegeln
  • o gibt das Zeichen des TOS aus
  • ; pop TOS
  • / nach Osten spiegeln, nachdem Sie den Würfel umrundet haben
  • + Fügen Sie die beiden obersten Werte des Stapels hinzu
  • ! überspringe den nächsten Befehl, wenn TOS 0 ist.
  • ) erhöht die TOS um 1. Dies startet die Sequenz im Wesentlichen.

Dies ist eine Endlosschleife, die die Sequenz mit einem Newline-Trennzeichen druckt. Es wird die Tatsache ausgenutzt, dass die meisten Befehle die Werte nicht vom Stapel entfernen.
Wenn das Trennzeichen ignoriert wird, kann dies mit 5 Bytes erfolgen .O+!)

Antwort

Brainfuck, 16,15, 14/13 Zeichen

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

Erzeugt die Fibonacci-Sequenz und druckt nichts aus. Ist auch kürzer als die obige.

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

Dies man hat 14 Zeichen, druckt aber ASCII-Zeichen mit den Werten der Fibonacci-Sequenz aus.

Kommentare

  • Das ist gut, aber ich wäre falsch mit der Aussage, dass die 14-Byte-Version nur ab der 2. 1 ausgegeben wird? Wie in " 1 2 3 5 8 " anstelle von " 1 1 2 3 5 8 "?
  • @Charlim Oh, Sie '

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.