var QUESTION_ID=82815,OVERRIDE_USER=48934;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}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="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <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><div id="language-list"> <h2>Winners 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><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>
Odpowiedzi:
M ,
96 bajtówDzięki FryAmTheEggman za oszczędność 3 bajtów! Kod:
M ma tutaj ogromną przewagę, ponieważ działa raczej z ułamkami niż pływakami. Wyjaśnienie:
Wykorzystuje kodowanie Jelly . Wypróbuj online! .
Istnieje również rozwiązanie 4-bajtowe , które czasami wyświetla wiodące zero (np
280 -> 0280
.). Nie jestem pewien, czy jest to dozwolone, czy nie:Wypróbuj online! .
źródło
g¹
oblicza gratest wspólny dzielnik frakcji i n . Korzystanieg1
byłoby prawdopodobnie bardziej zrozumiałe. 2.V
rzuca frakcję na sznurek i ewaluuje ją niladycznie.<num>/
jest (niekumulatywne) redukowane przez operator niladyczny. To nonsens, ale ponieważ jest tylko jedna liczba (domyślny argument 0 ), po prostu nic nie robi. Kolejne łącze, mianownik, jest zerowe, więc poprzednia zwracana wartość jest drukowana niejawnie i zastępowana tym niladem.Julia, 22 bajty
Anonimowa funkcja.
źródło
n->sum(inv,1//1:n).den
Mathematica, 27 bajtów
Anonimowa funkcja.
Na przykład:
źródło
Python 2,
6967 bajtówPrzetestuj na Ideone .
Jak to działa
Niech H (n) będzie sumą odwrotności multiplikatywnej pierwszych n dodatnich liczb całkowitych. Przez cały czas mamy a / b = 1 + H (k - 1) . W rzeczywistości wszystkie a , b i k są inicjowane na 1 , a 1/1 = 1 = 1 + H (0) .
Powtarzamy fragment kodu
(jako ciąg) n (dane wejściowe) razy i wykonaj wynik. Na każdym etapie aktualizujemy a , b i k przy użyciu tożsamości a / b + 1 / k = ak / bk + b / bk = (ak + b) / bk .
Po wykonaniu wszystkich kopii a / b = 1 + H (n) , który ma ten sam mianownik co H (n) .
Całkowicie zredukowana postać a / b to (a ÷ gcd (a, b)) / (b ÷ gcd (a, b)) . Zamiast obliczać największy wspólny dzielnik, inicjalizujemy r jako 1 i zwiększamy r, aż ra będzie wielokrotnością b .
Oczywiście sprawia to, że ra jest najmniejszą wspólną wielokrotnością a i b . Ponieważ gcd (a, b) · lcm (a, b) = ab , mamy to, że b ÷ gcd (a, b) = lcm (a, b) ÷ a = ra ÷ a = r , co daje r pożądaną moc wyjściową.
źródło
Haskell, 52
Jeśli plik jest załadowany do GHCI, f może być użyte jako funkcja.
źródło
import
małe litery? Oszczędza bajt, aby użyćmap
zamiast zrozumienia:sum$map(1%)[1..n]
Galaretka, 9 bajtów
Wypróbuj tutaj.
źródło
MATL ,
1413 bajtówWypróbuj online!
Wyjaśnienie
W przypadku wejścia N dane wyjściowe są ograniczone przez N ! (silnia N ). Kod oblicza n / k dla n = 1, ..., N ! i dla k = 1, ..., N . Następnie sumuje się nad k , co daje liczbę harmoniczną pomnożoną przez każdy n . Pożądanym wynikiem jest indeks n pierwszej z tych wartości, która jest liczbą całkowitą.
źródło
Ruby,
5747 bajtówDzięki Kevinowi Lau za skrócenie tego o dziesięć bajtów.
źródło
1.to_r
nie trzeba było wstrzykiwać i konwertować łańcucha. Ponadto, ponieważ domyślną wartością Rubyreduce
jest użycie pierwszego elementu jako wartości początkowej i1/1=1
nie trzeba specjalnie ustawiać0
jako wartości początkowej.Mathematica, 26 bajtów
Funkcja bez nazwy, która przyjmuje
n
dane wejściowe i zwraca mianownik. Wykorzystuje standardową sztuczkę polegającą na nadużywaniuTr
(śledzenie), aby zsumować listę wzajemności.źródło
JavaScript (ES6), 88 bajtów
Działa tylko do m = 20 z powodu ograniczeń precyzji liczbowej JavaScript.
źródło
05AB1E , 8 bajtów
Kod:
Wyjaśnienie:
Mogą wystąpić pewne problemy z dokładnością dla n> 19 z powodu podziału Pythona ... Używa kodowania CP-1252 .
Wypróbuj online! .
źródło
Pari / GP , 30 bajtów
Wypróbuj online!
źródło
J, 20 bajtów
W oparciu o podejście zastosowane w rozwiązaniu @ Lynn .
Jeśli precyzja nie jest konieczna dla dużych wartości n lub jeśli możemy założyć, że n zostanie przekazana jako rozszerzona liczba całkowita, z przyrostkiem
x
, można zastosować krótsze rozwiązanie dla 15 bajtów .Stosowanie
Wyjaśnienie
źródło
Perl 6 ,
3632 bajtówWyjaśnienie:
Test:
źródło
Hoon , 95 bajtów
Utwórz listę
[1...n]
, złóż ją++mul
za pomocą silni, stwórz listę[n!/1, n!/2, ... n!/n]
i zsumuj, znajdź GCD zn!
i listę i podziel silnię przez tę liczbę.Prawdopodobnie istnieje o wiele łatwiejszy sposób obliczenia mianownika, ale nie mogę tego rozgryźć: /
źródło
Python 3,
153 150 146142 bajtówJestem pewien, że można pograć w golfa dalej. Ale jestem tu nowy
źródło
Aksjomat, 34 bajty
test
źródło
PHP, 81 bajtów
Wypróbuj online!
źródło