Fibonacciho posloupnost je posloupnost čísel, kde každé číslo v sekvenci je součet dvou čísel, která mu předcházejí. První dvě čísla v pořadí jsou obě 1.
Zde je několik prvních výrazů
1 1 2 3 5 8 13 21 34 55 89 ...
Napište nejkratší kód že buď:
-
Generuje Fibonacciho sekvenci bez konce.
-
Vzhledem k
n
vypočítán
ten člen posloupnosti. (Indexováno 1 nebo nula)
Můžete použít standardní formy vstupu a výstupu.
(Dal jsem obě možnosti, pokud je jednodušší dělat ve zvoleném jazyce než v druhém.)
U funkce, která přebírá n
, přiměřeně velkou návratovou hodnotu (největší číslo Fibonacci, které musí odpovídat normální velikosti vašeho počítače, musí být podporována.
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>
Komentáře
- Tak nějak čekám na odpověď jako " f ", 1 bajt, v mém matematickém golfovém jazyce.
Odpověď
Perl 6, 10 znaků:
Anonymní nekonečný seznam sekvencí fibonacci:
^2,*+*...*
Stejné jako:
0, 1, -> $x, $y { $x + $y } ... Inf;
Takže jej můžete přiřadit k poli:
my @short-fibs = ^2, * + * ... *;
nebo
my @fibs = 0, 1, -> $x, $y { $x + $y } ... Inf;
A získejte prvních jedenáct hodnot (od 0 do 10) pomocí:
say @short-fibs[^11];
nebo pomocí:
say @fibs[^11];
Počkejte, prvních 50 čísel můžete získat také ze samotného anonymního seznamu:
say (^2,*+*...*)[^50]
Tím se vrátí:
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
A některé jednoduché měřítko:
real 0m0.966s user 0m0.842s sys 0m0.080s
S:
$ time perl6 -e "say (^2, *+* ... *)[^50]"
EOF
Komentáře
- Nechtěl bych ' ani myslet z
^2
jako náhrada za0,1
. +1 - Toto již není platné, budete jej muset napsat jako
|^2,*+*...*
, což je stejný počet bajtů jako0,1,*+*...*
. - Perl je tak divný.
- Ve které verzi Perlu 6 byla napsána tato odpověď?
- @CalculatorFeline Došlo k velké změně známý jako GLR (Great List Refactor), ke kterému došlo krátce před prvním oficiálním vydáním, které bylo 25. 12. 2015. Tento kód by fungoval až do té doby.
Odpověď
Brainfuck, 22 tahů
+>++[-<<[->+>+<<]>>>+]
Generuje sekvenci Fibonacci, která se postupně pohybuje přes paměťovou pásku.
Komentáře
Odpověď
Haskell, 17 15 14 znaků
f=1:scanl(+)1f
Komentáře
- Proč nevyříznout dvě mezery na
f=0:scanl(+)1 f
? - @Martinho: Upraveno, děkuji.
- Páni, to je ' ještě kratší než obvyklé
f@(_:x)=0:1:zipWith(+)f x
! Musíte si to pamatovat. - Můžete dokonce odstranit další prostor:
f=0:scanl(+)1f
.
Odpovědět
C # 4, 58 bajtů
stream (69; 65, je-li slabě zadán do IEnumerable
)
(Za předpokladu using
směrnice pro System.Collections.Generic
.)
IEnumerable<int>F(){int c=0,n=1;for(;;){yield return c;n+=c;c=n-c;}}
Jedna hodnota (58)
int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}
Komentáře
- Vzhledem k tomu, že
n
jeuint
,n==0
lze zkrátit nan<1
. A stream může ušetřit několik znaků tím, že se zbaví prostoru po obecném typu a vyhlásíx
v širším rozsahu, než je nutné.Ve skutečnosti se příkopx
úplně:n+=c;c=n-c;
- @Peter: Díky, upravím, až dostanu nějaký čas.
- Vaše verze s jednou hodnotou je tak dlouho, dokud můj rekurzivní výraz lambda odpoví … pěkně!
- @ wizzwizz4, pokud ' nejsem mylně, pokud
!n
funguje, mělo by to být jenn
, pokud podmínku převrátíte. - @JonSkeet Aw. A tady jsem myslel, že jsem ' porazil Jon Skeeta na C # … 🙂
Odpovědět
GolfScript, 12
Nyní, pouze 12 znaků!
1.{[email protected]+.}do
Komentáře
- +1 pěkná práce. Pokud nastavíte méně než 13 znaků, okamžitě přijmu ' vaši odpověď (samozřejmě, pokud někdo neposkytne ještě kratší odpověď). 😛
- Miluji výzvu. Hotovo! 😉
- Hezké, vyhráváte. Alespoň do té doby, než někdo něco zkrátí (pokud je to ' vůbec možné). 😛
- tato definice je téměř stejně krátká jako samotný název ' Fibonacci '! +1
Odpověď
J, 10 znaků
Použití integrovaného výpočtu Koeficienty Taylorovy řady, takže možná trochu levný. Naučili jsme se zde .
(%-.-*:)t. (%-.-*:)t. 0 1 2 3 4 5 10 100 0 1 1 2 3 5 55 354224848179261915075
Komentáře
- @aditsu
(q:^-^:p) 6
je64 729
kde p je sudé. J je pravděpodobně dobré pro co dělá hádanky. 🙂 - Ještě lepší:
(<:^-^:>) 4
je81
a<:^-^:> 4
je53.5982
. - Zde ukázaný emoji je to, k čemu by se měl snažit celý kód J. Na okraj je další alternativou
+/@:!&i.-
využití 9 bajtů. - @miles Velmi pěkné! Měli byste to zveřejnit, protože se úplně liší od mého.
Odpověď
> < > – 15 znaků
0:nao1v a+@:n:<o
Komentáře
- I když to můžete zkrátit na
0:nao1v LF a+@:n:<o
pokud chcete. Dává 15 🙂 Ve skutečnosti to také činí výstup o něco čitelnějším … - 13 znaků:
01r:nao$:@+$r
Odpověď
Hexagony , 18 14 12
Děkujeme Martinovi za 6 bajtů!
1="/}.!+/M8;
Rozšířeno:
1 = " / } . ! + / M 8 ; . . . . . . .
Staré, odpovězte. Toto je ponecháno, protože obrázky a vysvětlení mohou být užitečné pro nové uživatele Hexagony.
!).={!/"*10;$.[+{]
Rozšířeno:
! ) . = { ! / " * 1 0 ; $ . [ + { ] .
Tím se vytiskne sekvence Fibonacci oddělená novými řádky.
Zkuste to online! Buďte opatrní, online interpret opravdu nemá rád nekonečný výstup.
Vysvětlení
K tomuto programu existují dva „podprogramy“, každý běží jednou ze dvou použitých IP adres. První rutina vytiskne nové řádky a druhý provádí výpočet a výstup Fibonacciho.
První podprogram začíná na prvním řádku a po celou dobu se pohybuje zleva doprava. Nejprve vytiskne hodnotu na ukazateli paměti (inicializovaný na nulu), a poté zvýší hodnotu na ukazateli paměti o 1
. Po no-op IP skočí na třetí řádek, který nejprve přepne na jinou paměťovou buňku, poté vytiskne nový řádek. nový řádek má kladnou hodnotu (jeho hodnota je 10), th Kód vždy přeskočí na pátý řádek, další. Pátý řádek vrací ukazatel paměti na naše Fibonacciho číslo a poté přepne na další podprogram. Když se vrátíme z tohoto podprogramu, IP přeskočí zpět na třetí řádek po provedení no-op.
Druhý podprogram začíná v pravém horním rohu a začíná se pohybovat na jihovýchod. Po no-op jsme odraženi cestovat západem podél druhé linie. Tento řádek vytiskne aktuální číslo Fibonacciho, než přesune ukazatel paměti na další místo. Poté IP přeskočí na čtvrtý řádek, kde pomocí předchozích dvou vypočítá další Fibonacciho číslo. Potom dává kontrolu zpět prvnímu podprogramu, ale když získá kontrolu nad programem, pokračuje, dokud nenarazí na skok, kde se odrazí přes zrcadlo, které bylo původně použito k jeho nasměrování na západ, když se vrátí na druhý řádek.
Předběžné hezké obrázky!
Levá strana obrázku je program, pravá strana představuje paměť. Modré pole je první IP a obě IP ukazují na další instrukci, která má být provedena.
Poznámka: Obrázky mohou být vypadají hezky pouze lidem, kteří mají podobně omezené dovednosti v programech pro úpravu obrázků: PI přidá alespoň 2 další iterace, aby bylo jasnější použití operátoru *
.
Poznámka 2: Po napsání většiny z nich jsem viděl odpověď alephalpha , myslel jsem si, že je to stále cenné kvůli odloučení, ale skutečný Fibonacci části našich programů jsou si velmi podobné. Kromě toho se jedná o nejmenší program Hexagony, který jsem viděl využívat více než jednu IP, a proto jsem si myslel, že by bylo dobré si ho přesto ponechat: P
Komentáře
- Měli byste odkazovat na cokoli, co jste použili k vytvoření krásných obrázků, a poté odkaz umístit na esolangs.org/wiki/ Hexagony .
- @ mbomb007 K ručnímu vytvoření každého rámečku jsem použil gimp, poté jsem obrázky nahrál do nějakého gi f dělat webové stránky. I když jsem během tohoto procesu několikrát uvažoval o vytvoření nástroje, jak to udělat, vzhledem k tomu, jak zdlouhavé to bylo.
- @FryAmTheEggman Působivé! Udělejte z toho výzvu. Jsem si ' jistý, že někdo pošle odpověď. : D Ještě lepší je, kdybyste mohli vytvořit web podobný online online tlumočníkovi '.
- @ mbomb007 To by mohl být ambiciózní úkol na tomto webu. , nemluvě o tom, že by pravděpodobně hodně trpěl tím, že bude opravdu široký. Nemyslím si ', že to zveřejním, ale klidně to udělejte sami, pokud si myslíte, že to máte dobrý způsob, jak to prezentovat. Věřím také, že Timwi vytvořil C # ide pro hexagony, i když jsem ho ' nikdy nepoužíval, protože jsem se ' neobtěžoval s mono.
- @ mbomb007 Ide žije mimochodem zde , mimochodem, zapomněl jej naposledy propojit.
Odpověď
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
Odpověď
Python 2, 34 bajtů
Python, pomocí rekurze … zde přichází StackOverflow!
def f(i,j):print i;f(j,i+j) f(1,1)
odpověď
Jelly , 3 bytes
+¡1
Jak to funguje
+¡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.
‡ ¡
pokukuje po dvou odkazech vlevo. Protože existuje pouze jeden, musí to být tělo smyčky. Proto je ze vstupu načteno číslo. Protože neexistují žádné argumenty příkazového řádku, toto číslo se čte z STDIN.
Odpověď
Hexagony , 6 bytes
Nesoutěží, protože jazyk je novější než otázka.
1.}=+!
Ungolfed:
1 . } = + ! .
Vytiskne Fibonacciho sekvenci bez oddělovače.
Komentáře
- To má menší problém, že nevytiskne ' žádný oddělovač mezi čísly. To však není ' ve výzvě zcela dobře specifikováno. (A jsem ' opravdu šťastný, že někdo používá Hexagony. :))
Odpovědět
Golfscript – jedno číslo – 12/12/10
12 znaků pro převzetí vstupu od stdin:
~0 1@{.@+}*;
11 znaků pro vstup již v zásobníku:
0 1@{.@+}*;
10 znaků pro další definování 1 jako 0. Fibonacciho čísla:
1.@{.@+}*;
Komentáře
- Tato možnost je " Vypočítá vzhledem k n, ntému Fibonacciho číslu ". Vypusťte tedy
~
a máte 11 znaků, které vezmoun
do zásobníku a ponechajíF_n
na zásobníku.
Odpověď
Ruby
29 27 25 24 znaků
p a=b=1;loop{b=a+a=p(b)}
Upravit: udělal z něj nekonečnou smyčku. 😉
Komentáře
- všiml si někdo, že
b=a+a=b
je palindrom? 🙂 - ano st0le ano 🙂
- vím, že jsem ' m pozdě na večírek, ale může někdo vysvětlit, jak
b=a+a=b
část funguje? Zdá se mi, že mi to ' neobtočí hlavu. - @GigaWatt, přemýšlejte o tom takto, pokyny se provádějí zleva doprava …takže
newb=olda+(a=oldb)
- můžete uložit 2 znaky pomocí
loop
:p 1,a=b=1;loop{p b=a+a=b}
Odpověď
DC (20 bajtů)
Jako bonus to „s dokonce zmatený;)
zzr[dsb+lbrplax]dsax
EDIT: Mohu upozornit, že vytiskne všechna čísla v sekvenci fibonacci, pokud počkáte dostatečně dlouho.
Komentáře
- Nenazval bych to ' obfuskovaným – popleteným kódem má být obtížně pochopitelné a pokud jde o dc, kód je zde zcela přímočarý.
Odpověď
Mathematica, 9 znaků
Fibonacci
Pokud integrované funkce nejsou povoleny, tady je explicitní řešení:
Mathematica, 33 32 31 znaků
#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Komentáře
-
#&@@Nest[{#+#2,#}&@@#&,{0,1},#]&
32 znaků. - @chyanog 31:
#&@@Nest[{+##,#}&@@#&,{0,1},#]&
- @ Mr.Wizard 24 znaků (26 bajtů):
Round[GoldenRatio^#/√5]&
- nebo 23 znaků (27 bajtů):
Round[((1+√5)/2)^#/√5]&
odpověď
Prelude , 12 bajtů
Jedna z mála výzev, kde je Prelude ve skutečnosti docela konkurenceschopný:
1(v!v) ^+^
To vyžaduje překladač Pythonu , který tiskne hodnoty jako desetinná čísla místo znaků.
Vysvětlení
V Prelude, všechny řádky jsou prováděny paralelně, přičemž ukazatel instrukce prochází sloupci programu. Každý řádek má svůj vlastní zásobník, který je inicializován na nulu.
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.
Smyčka se opakuje navždy, protože první zásobník nikdy nebude mít 0
nahoře.
Všimněte si, že tím se spustí Fibonacciho sekvence z 0
.
Odpovědět
TI-BASIC, 11
Legendární TI-BASIC golfista Kenneth Hammond („Weregoose“) z tohoto webu . Běží v čase O (1) a považuje 0 za 0. termín Fibonacciho posloupnosti.
int(round(√(.8)cosh(Anssinh‾¹(.5
Použití:
2:int(round(√(.8)cosh(Anssinh‾¹(.5 1 12:int(round(√(.8)cosh(Anssinh‾¹(.5 144
Jak to funguje? Pokud uděláte matematiku, ukáže se, že sinh‾¹(.5)
se rovná ln φ
, takže se jedná o upravenou verzi Binetova vzorce, který místo použití (1/φ)^n
opravného výrazu zaokrouhluje dolů. round(
(zaokrouhleno na 9 desetinných míst) je potřeba, aby se zabránilo chybám zaokrouhlování.
Odpovědět
K – 12
Vypočítá n
a n-1
Fibonacciho číslo.
{x(|+\)/0 1}
Pouze nth
číslo Fibonacci.
{*x(|+\)/0 1}
komentáře
- +1 Není to špatné! Pokud byste jej mohli zmenšit pouze na jeden znak (a poskytnout mi způsob, jak to otestovat), přijmu ' vaši odpověď. 🙂
- Jediným způsobem, jak to zmenšit, by bylo nahradit funkci voláním na známé číslo: n (| + \ ) / 0 1 Vyzkoušejte to pomocí tohoto tlumočníka .
Odpovědět
Java, 55
Nemohu zde konkurovat stručnosti většiny jazyků, ale mohu nabídnout podstatně odlišný a možná mnohem rychlejší (konstantní čas) způsob výpočtu n-tého čísla:
Math.floor(Math.pow((Math.sqrt(5)+1)/2,n)/Math.sqrt(5))
n
je vstup (int nebo dlouhý), počínaje n = 1. Používá Binetův vzorec a zaokrouhlí se místo odečtení.
Komentáře
- Miluji toto řešení
- Zdá se mi, že to ' nefunguje, ale ' je to brzy a já možná něco chybí! Za předpokladu, že
0
bude první číslo v pořadí, dává to0, 0, 1, 1, 3, 4, 8, 12, 21, 33
pro první t 10 čísel - @Shaggy Jejda! Omlouváme se, ale nyní jsem opravil chybu.
Odpověď
Julia, 18 bajtů
n->([1 1;1 0]^n)[]
odpověď
Dodos , 26 bajtů
dot F F F dip F dip dip
Jak to funguje
Funkce F provádí všechny těžké práce; je definován rekurzivně následujícím způsobem.
F(n) = ( F(|n - 1|), F(||n - 1| - 1|) )
Kdykoli n> 1 máme | n – 1 | = n – 1 < n a || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , takže funkce vrátí (F (n – 1), F (n – 2)) .
Pokud n = 0 , pak | n – 1 | = 1> 0 ; pokud n = 1 , pak || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . V obou případech pokus o rekurzivní volání F (1) vyvolá Surrender výjimku, takže F (0) vrátí 0 a F (1) vrátí 1 .
Například F (3) = (F (1), F (2)) = (1 , F (0), F (1)) = (1, 0, 1) .
Nakonec main funkce je definována jako
main(n) = sum(F(n))
, takže sčítá všechny souřadnice vráceného vektoru autor F .
Například main (3) = sum (F (3)) = sum (1, 0, 1) = 2 .
Komentáře
- Četl jsem vaše README (DODOS) a jsem velmi zaujatý; je to opravdu elegantní koncept! Ale nemohu ho najít na Esolangu ani nikde jinde. Přišli jste s tím?
Odpověď
Ruby, 25 znaků
st0le Zkrácená odpověď.
p 1,a=b=1;loop{p b=a+a=b}
Komentáře
- Ve skutečnosti ji můžete ještě zkrátit pomocí
a=b=1;loop{p a;b=a+a=b}
- Takže stále odpovídáš na jeho odpověď?: P
Odpovědět
FAC: Funkční APL, 4 znaky (!!)
Není moje, proto se zveřejňuje jako komunitní wiki. FAC je dialekt APL, který Hai-Chen Tu zjevně navrhl jako svou disertační práci v roce 1985. Později napsal spolu s Alanem J. Perlisem článek s názvem „ FAC: A Functional APL Language „. Tento dialekt APL používá „líná pole“ a umožňují pole nekonečné délky. Definuje operátor „iter“ (⌼
), který umožňuje kompaktní definici některých rekurzivních sekvencí.
Monadický („unární“ „) případ ⌼
je v podstatě Haskellův a je definován jako (F⌼) A ≡ A, (F A), (F (F A)), …
. Dyadický („binární“) případ je definován poněkud analogicky pro dvě proměnné: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …
. Proč je to užitečné? Jak se ukázalo, je to přesně ten druh opakování, který má Fibonacciho sekvence. Jedním z uvedených příkladů je ve skutečnosti
1+⌼1
vytvoření známé sekvence 1 1 2 3 5 8 …
.
Takže, tady máte, možná nejkratší možná implementace Fibonacci v programovacím jazyce, který není novinkou. : D
Komentáře
- Ach, omylem jsem váš příspěvek zrušil v komunitě jako součást mého (manuálního) hromadného odhalování. Ach, dobře. 😉
Odpověď
R, 40 bajtů
Neviděl jsem Řešení R, takže:
f=function(n)ifelse(n<3,1,f(n-1)+f(n-2))
Komentáře
- Vím, že se jedná o starou odpověď, ale vy lze zkrátit na 38 bajtů
odpověď
05AB1E, 7 bajtů
Kód:
1$<FDr+
Komentáře
- Ahoj, vítejte v PPCG! Hezký první příspěvek!
Odpověď
odpověď
Desmos , 61 bajtů
golfový
Klikněte na add slider
tlačítko pro n
.
p=.5+.5\sqrt{5} n=0 f=5^{-.5}\left(p^n-\left(-p\right)^{-n}\right)
Poslední řádek je výstup.
Ungolfed
je funkce.
\phi =\frac{1+\sqrt{5}}{2} f_{ibonacci}\left(n\right)=\frac{\phi ^n-\left(-\phi \right)^{-n}}{\sqrt{5}}
Odpověď
Cubix , 10 bajtů
Nesoutěžící odpověď, protože jazyk je novější než otázka.
Cubix je nový dvourozměrný jazyk od společnosti @ETHproductions, pokud byl kód zabalen do krychle o velikosti vhodné pro přizpůsobení.
;.o.ON/+!)
Tím se zalomí do 2 x 2 krychle následujícím způsobem
; . o . O N / + ! ) . . . . . . . . . . . . . .
-
O
výstup hodnoty TOS -
N
posunout nový řádek do zásobníku -
/
odrážet sever -
o
vypíše charakter TOS -
;
pop TOS -
/
odrážejí východ poté, co obejdou kostku -
+
přidají 2 nejlepší hodnoty zásobníku -
!
přeskočit další příkaz, pokud je TOS 0 -
)
zvýšení TOS o 1. Tím se v zásadě odstartuje sekvence.
Toto je nekonečná smyčka, která vytiskne sekvenci pomocí oddělovače nového řádku. Využijte toho, že většina příkazů nevypíná hodnoty ze zásobníku.
Pokud je oddělovač ignorován, lze to provést s 5 bajty .O+!)
Odpověď
Brainfuck, 16,15, 14/13 znaků
+[[->+>+<<]>]
Generuje sekvenci Fibonacci a nic nevytiskne. Je také kratší než výše uvedená.
+[.[->+>+<<]>]
Toto jeden má 14 znaků, ale vytiskne znaky ASCII s hodnotami Fibonacciho posloupnosti.
Komentáře
- To je dobré, ale byl bych nesprávný tím, že říká, že 14bajtová verze vychází pouze od 2. 1.? Jako v " 1 2 3 5 8 " místo " 1 1 2 3 5 8 "?
- @Charlim Ach, vy ' máte pravdu. Nemám tušení, co si myslel já z roku 2014. Každopádně jsem to napravil pomocí mov tiskové instrukce na začátek smyčky.
+[[<+>->+>+<<]>]
+[.[>+>+<<-]>]