/* 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 id="language-list">
<h2>Shortest Solution by Language</h2>
<table class="language-list">
<thead>
<tr><td>Language</td><td>User</td><td>Score</td></tr>
</thead>
<tbody id="languages">
</tbody>
</table>
</div>
<div id="answer-list">
<h2>Leaderboard</h2>
<table class="answer-list">
<thead>
<tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr>
</thead>
<tbody id="answers">
</tbody>
</table>
</div>
<table style="display: none">
<tbody id="answer-template">
<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 id="language-template">
<tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr>
</tbody>
</table>
^2
zastępstwie0,1
. +1|^2,*+*...*
, co jest taką samą liczbą bajtów jak0,1,*+*...*
.Brainfuck, 22 uderzeń
Generuje sekwencję Fibonacciego stopniowo przesuwającą się po taśmie pamięci.
źródło
+[[<+>->+>+<<]>]
+[.[>+>+<<-]>]
Haskell,
171514 znakówWypróbuj online!
źródło
f=0:scanl(+)1 f
?f@(_:x)=0:1:zipWith(+)f x
! Muszę to pamiętać.f=0:scanl(+)1f
.C # 4, 58 bajtów
Strumień (69; 65, jeśli słabo wpisany
IEnumerable
)(Zakładając
using
dyrektywę dlaSystem.Collections.Generic
.)Jedna wartość (58)
źródło
n
jest touint
,n==0
można je skrócićn<1
. Strumień może zaoszczędzić kilka znaków, porzucając przestrzeń po typie ogólnym i deklarującx
w szerszym zakresie niż to konieczne. W rzeczywistości porzućx
całkowicie:n+=c;c=n-c;
!n
działa, to tak też powinno,n
jeśli zmienisz warunek.GolfScript, 12
Teraz tylko 12 znaków!
źródło
> <> - 15 znaków
źródło
0:nao1v LF a+@:n:<o
jeśli chcesz. Daje 15 :) W rzeczywistości powoduje to również, że dane wyjściowe są nieco bardziej czytelne ...01r:nao$:@+$r
J, 10 znaków
Korzystanie z wbudowanego obliczania współczynników serii Taylora, więc może trochę oszukiwać. Nauczyłem się tutaj .
źródło
(q:^-^:p) 6
jest64 729
tam, gdzie p jest parzyste. J jest prawdopodobnie dobry do tego, co robi zagadki. :)(<:^-^:>) 4
jest81
i<:^-^:> 4
jest53.5982
.+/@:!&i.-
użycie 9 bajtów.Sześciokąt ,
181412Dzięki Martin za 6 bajtów!
Rozszerzony:
Wypróbuj online
Stary, odpowiedz. Pozostaje, ponieważ obrazy i objaśnienia mogą być pomocne dla nowych użytkowników Hexagony.
Rozszerzony:
Spowoduje to wydrukowanie sekwencji Fibonacciego oddzielonej znakami nowej linii.
Wypróbuj online! Uważaj jednak, tłumacz online tak naprawdę nie lubi nieskończonej wydajności.
Wyjaśnienie
Istnieją dwa „podprogramy” tego programu, z których każdy jest obsługiwany przez jeden z dwóch używanych adresów IP. Pierwsza procedura drukuje znaki nowej linii, a druga wykonuje obliczenia i wyniki Fibonacciego.
Pierwszy podprogram rozpoczyna się w pierwszym wierszu i przez cały czas przesuwa się od lewej do prawej. Najpierw drukuje wartość wskaźnika pamięci (inicjowana na zero), a następnie zwiększa wartość wskaźnika pamięci o
1
. Po braku operacji adres IP przeskakuje do trzeciej linii, która najpierw przełącza się na inną komórkę pamięci, a następnie drukuje nową linię. Ponieważ nowa linia ma wartość dodatnią (jej wartość wynosi 10), kod zawsze przeskakuje do piątej linii, następnie. Piąta linia zwraca wskaźnik pamięci do naszego numeru Fibonacciego, a następnie przełącza się na inny podprogram. Kiedy wrócimy z tego podprogramu, adres IP przeskoczy z powrotem do trzeciej linii po wykonaniu braku operacji.Drugi podprogram rozpoczyna się w prawym górnym rogu i rozpoczyna ruch na południowy wschód. Po przerwie wracamy do drugiej linii na zachód. Ta linia wypisuje aktualny numer Fibonacciego, przed przeniesieniem wskaźnika pamięci do następnej lokalizacji. Następnie IP przeskakuje do czwartej linii, gdzie oblicza następną liczbę Fibonacciego za pomocą poprzednich dwóch. Następnie przekazuje kontrolę z powrotem do pierwszego podprogramu, ale gdy odzyskuje kontrolę nad programem, kontynuuje działanie, aż napotka skok, w którym odbija się od lustra, które pierwotnie służyło do wskazywania go na zachód, gdy wraca do drugiej linii.
Wstępne ładne zdjęcia!
Lewa strona obrazu to program, prawa strona reprezentuje pamięć. Niebieska ramka to pierwszy adres IP, a oba adresy IP wskazują następną instrukcję do wykonania.
Uwaga: Zdjęcia mogą wyglądać ładnie tylko dla osób o podobnie ograniczonych umiejętnościach w programach do edycji obrazów: PI doda co najmniej 2 kolejne iteracje, aby korzystanie z
*
operatora stało się bardziej przejrzyste.Uwaga 2: Zobaczyłem odpowiedź alephalpha dopiero po napisaniu większości tego, pomyślałem, że wciąż była cenna z powodu separacji, ale rzeczywiste części Fibonacciego naszych programów są bardzo podobne. Ponadto jest to najmniejszy program Hexagony, który widziałem przy użyciu więcej niż jednego adresu IP, więc pomyślałem, że warto go zachować: P
źródło
COW , 108
źródło
Python 2, 34 bajty
Python, używając rekurencji ... oto nadchodzi StackOverflow!
źródło
Galaretka , 3 bajty
Wypróbuj online!
Jak to działa
‡
¡
zagląda do dwóch linków po lewej stronie. Ponieważ jest tylko jeden, musi być ciałem pętli. Dlatego liczba jest odczytywana z wejścia. Ponieważ nie ma argumentów wiersza polecenia, liczba ta jest odczytywana ze STDIN.źródło
Golfscript - pojedynczy numer - 12/11/10
12 znaków do pobierania danych wejściowych ze standardowego wejścia:
11 znaków dla danych wejściowych już na stosie:
10 znaków dla dalszego zdefiniowania 1 jako 0. liczby Fibonacciego:
źródło
~
i masz 11 znaków, które biorąn
na stos i pozostawiająF_n
na stosie.Rubin
29 27 2524 znakówEdycja: uczyniła go nieskończoną pętlą. ;)
źródło
b=a+a=b
palindrom? :)b=a+a=b
działa ta część? Nie mogę się wokół tego owinąć.newb=olda+(a=oldb)
loop
:p 1,a=b=1;loop{p b=a+a=b}
Mathematica, 9 znaków
Jeśli wbudowane funkcje nie są dozwolone, oto wyraźne rozwiązanie:
Mathematica,
333231 znakówźródło
#&@@Nest[{#+#2,#}&@@#&,{0,1},#]&
32 znaki.#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Round[GoldenRatio^#/√5]&
Round[((1+√5)/2)^#/√5]&
DC (20 bajtów)
Jako bonus jest nawet zaciemniony;)
EDYCJA: Mogę zaznaczyć, że wypisuje wszystkie liczby w sekwencji Fibonacciego, jeśli zaczekasz wystarczająco długo.
źródło
Preludium , 12 bajtów
Jedno z niewielu wyzwań, w których Preludium jest dość konkurencyjne:
Wymaga to interpretera Pythona, który drukuje wartości jako liczby dziesiętne zamiast znaków.
Wyjaśnienie
W Preludium wszystkie wiersze są wykonywane równolegle, a kolumny instrukcji przechodzą przez program. Każda linia ma własny stos, który jest inicjowany na zero.
Pętla powtarza się na zawsze, ponieważ pierwszy stos nigdy nie będzie miał
0
na wierzchu.Zauważ, że zaczyna się sekwencja Fibonacciego od
0
.źródło
Sześciokąt , 6 bajtów
Nie konkuruje, ponieważ język jest nowszy niż pytanie.
Nie golfowany:
Drukuje sekwencję Fibonacciego bez żadnego separatora.
źródło
TI-BASIC, 11
Legendarny golfista TI-BASIC Kenneth Hammond („Weregoose”) z tej strony . Działa w czasie O (1) i uważa, że 0 jest 0 terminem sekwencji Fibonacciego.
Używać:
Jak to działa? Jeśli wykonasz matematykę, okaże się, że
sinh‾¹(.5)
jest ona równaln φ
, więc jest to zmodyfikowana wersja formuły Bineta, która zaokrągla w dół zamiast używać(1/φ)^n
terminu korygującego.round(
Konieczna jest (okrągły do 9 miejsc po przecinku), aby uniknąć błędów zaokrągleń.źródło
K - 12
Oblicza
n
in-1
liczby Fibonacciego.Tylko
nth
liczba Fibonacciego.źródło
Julia, 18 bajtów
źródło
Java, 55
Nie mogę tutaj konkurować ze zwięzłością większości języków, ale mogę zaoferować znacznie inny i być może znacznie szybszy (stały czas) sposób obliczenia n-tej liczby:
n
to wejście (int lub long), zaczynające się od n = 1. Używa formuły Bineta i zaokrągla zamiast odejmowania.źródło
0
że jest to pierwsza liczba w sekwencji, daje0, 0, 1, 1, 3, 4, 8, 12, 21, 33
to pierwsze 10 liczbRuby, 25 znaków
Odpowiedź st0le skrócona.
źródło
a=b=1;loop{p a;b=a+a=b}
FAC: funkcjonalne APL, 4 znaki (!!)
Nie moja, dlatego opublikowana jako wiki społeczności. FAC jest dialektem APL, który Hai-Chen Tu najwyraźniej zasugerował jako swoją pracę doktorską w 1985 roku. Później wraz z Alanem J. Perlisem napisał artykuł zatytułowany „ FAC: A Functional APL Language ”. Ten dialekt APL używa „leniwych tablic” i pozwala na tablice o nieskończonej długości. Definiuje operator „iter” (
⌼
), aby umożliwić kompaktową definicję niektórych sekwencji rekurencyjnych.Przypadek monadyczny („unarny”)
⌼
jest w zasadzie przypadkiem Haskellaiterate
i jest zdefiniowany jako(F⌼) A ≡ A, (F A), (F (F A)), …
. Dwójkowym ( „binarny”) sprawa jest nieco zdefiniowane analogicznie do dwóch zmiennychA (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …
. Dlaczego to jest przydatne? Jak się okazuje, jest to dokładnie taki rodzaj nawrotu, jaki ma sekwencja Fibonacciego. W rzeczywistości jednym z podanych przykładów jesttworząc znaną sekwencję
1 1 2 3 5 8 …
.A więc proszę bardzo krótka możliwa implementacja Fibonacciego w nieinnowacyjnym języku programowania. :RE
źródło
R, 40 bajtów
Nie widziałem rozwiązania R, więc:
źródło
05AB1E, 7 bajtów
Kod:
Wypróbuj online!
źródło
Dodos , 26 bajtów
Wypróbuj online!
Jak to działa
Funkcja F wykonuje wszystkie ciężkie podnoszenie; zdefiniowano go rekurencyjnie w następujący sposób.
Ilekroć n> 1 , mamy | n - 1 | = n - 1 <n oraz || n - 1 | - 1 | = | n - 1 - 1 | = n - 2 <n , więc funkcja zwraca (F (n - 1), F (n - 2)) .
Jeśli n = 0 , to | n - 1 | = 1> 0 ; jeśli n = 1 , to || n - 1 | - 1 | = | 0 - 1 | = 1 = 1 . W obu przypadkach, próba połączenia rekurencyjne F (1) podnieść Surrender wyjątek, więc F (0) zwraca 0 i F (1) zwraca 1 .
Na przykład F (3) = (F (1), F (2)) = (1, F (0), F (1)) = (1, 0, 1) .
Wreszcie, główna funkcja jest zdefiniowana jako
więc sumuje wszystkie współrzędne wektora zwrócone przez F. .
Na przykład main (3) = suma (F (3)) = suma (1, 0, 1) = 2 .
źródło
GolfScript, 13 znaków
(Moja odpowiedź z poprzedniego pytania dotyczącego przepełnienia stosu ).
źródło
Desmos , 61 bajtów
Grał w golfa
Kliknij
add slider
przycisk dlan
.Ostatni wiersz to wynik.
Nie golfił
Jest funkcją.
źródło
Cubix , 10 bajtów
Odpowiedź niekonkurencyjna, ponieważ język jest nowszy niż pytanie.
Cubix to nowy, dwuwymiarowy język autorstwa @ETHproductions, w którym kod jest zawijany na kostkę o odpowiednim rozmiarze.
Wypróbuj online
Zawija się to na kostkę 2 x 2 w następujący sposób
O
wyprowadza wartość TOSN
pchnij nową linię na stos/
odzwierciedlają północo
wypisuje znak TOS;
pop TOS/
odbij się na wschód po obejściu sześcianu+
dodaj 2 górne wartości stosu!
pomiń następne polecenie, jeśli TOS wynosi 0)
zwiększ TOS o 1. To zasadniczo rozpoczyna sekwencję.Jest to nieskończona pętla, która drukuje sekwencję z separatorem nowej linii. Wykorzystuje to, że większość poleceń nie wyrzuca wartości ze stosu.
Jeśli separator zostanie zignorowany, można to zrobić za pomocą 5 bajtów
.O+!)
źródło
Brainfuck,
16,15,14/13 znakówGeneruje sekwencję Fibonacciego i niczego nie drukuje. Jest także krótszy niż powyższy.
Ten ma 14 znaków, ale drukuje znaki ASCII z wartościami sekwencji Fibonacciego.
źródło