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>
Antworten:
M ,
96 BytesDanke an FryAmTheEggman für das Speichern von 3 Bytes! Code:
M hat hier einen großen Vorteil, weil es eher mit Brüchen als mit Floats arbeitet. Erläuterung:
Verwendet die Jelly-Codierung . Probieren Sie es online! .
Es gibt auch eine 4-Byte- Lösung, die manchmal eine führende Null ausgibt (z
280 -> 0280
. B. ). Ich bin mir nicht sicher, ob das erlaubt ist oder nicht:Probieren Sie es online! .
quelle
g¹
berechnet den größten gemeinsamen Teiler der Fraktion und n . Die Verwendungg1
wäre wahrscheinlich klarer. 2.V
Wirft die Fraktion in eine Zeichenfolge und entfernt sie auf Null.<num>/
wird durch einen niladischen Operator (nicht kumulativ) reduziert. Das ist Unsinn, aber da es nur eine Zahl gibt (das implizite Argument 0 ), tut es einfach nichts. Der nächste Link, der Nenner, ist niladisch, daher wird der vorherige Rückgabewert implizit gedruckt und durch diesen Wert ersetzt.Julia, 22 Bytes
Eine anonyme Funktion.
quelle
n->sum(inv,1//1:n).den
Mathematica, 27 Bytes
Eine anonyme Funktion.
Beispielsweise:
quelle
Python 2,
6967 BytesTeste es auf Ideone .
Wie es funktioniert
Sei H (n) die Summe der multiplikativen Inversen der ersten n positiven ganzen Zahlen. Wir haben immer a / b = 1 + H (k - 1) . Tatsächlich a , b und k sind alle initialisierten 1 und 1/1 = 1 = 1 + H (0) .
Wir wiederholen das Code-Snippet
(als String) n (Eingabe) mal und führe das Ergebnis aus. In jedem Schritt aktualisieren wir a , b und k unter Verwendung der Identität a / b + 1 / k = ak / bk + b / bk = (ak + b) / bk .
Nachdem alle Kopien ausgeführt wurden, ist a / b = 1 + H (n) , was den gleichen Nenner wie H (n) hat .
Die vollständig reduzierte Form von a / b ist (a ≤ gcd (a, b)) / (b ≤ gcd (a, b)) . Anstatt den größten gemeinsamen Divisor zu berechnen, initialisieren wir r als 1 und erhöhen r weiter, bis ra ein Vielfaches von b ist .
Klar macht das ra am wenigsten verbreiteten Vielfachen von a und b . Da gcd (a, b) · lcm (a, b) = ab ist, ist b ÷ gcd (a, b) = lcm (a, b) ÷ a = ra ÷ a = r , was r zur gewünschten Ausgabe macht.
quelle
Haskell, 52
Wenn die Datei in GHCI geladen ist, kann f als Funktion verwendet werden.
quelle
import
Kleinbuchstaben? Es wird ein Bytemap
sum$map(1%)[1..n]
Gelee, 9 Bytes
Probieren Sie es hier aus.
quelle
MATL ,
1413 BytesProbieren Sie es online!
Erläuterung
Für den Eingang N ist der Ausgang durch N begrenzt ! (Fakultät von N ). Der Code berechnet n / k für n = 1, ..., N ! und k = 1, ..., N . Dann summiert es sich über k , was die mit jedem n multiplizierte harmonische Zahl ergibt . Das gewünschte Ergebnis ist der Index n des ersten dieser Werte, der eine ganze Zahl ist.
quelle
Ruby,
5747 BytesVielen Dank an Kevin Lau für die Verkürzung um zehn Bytes.
quelle
1.to_r
damit Sie keine Zeichenfolgen einfügen und konvertieren müssen. Da in Rubys Standardeinstellung fürreduce
das erste Element als Anfangsbuchstabe verwendet wird1/1=1
, müssen Sie diesen0
Wert nicht speziell festlegen .Mathematica, 26 Bytes
Eine unbenannte Funktion, die
n
als Eingabe den Nenner zurückgibt. Verwendet den Standardtrick des MissbrauchsTr
(Trace), um die Liste der Reziprozitäten zu summieren.quelle
JavaScript (ES6), 88 Byte
Funktioniert aufgrund der Grenzen der numerischen Genauigkeit von JavaScript nur bis zu m = 20.
quelle
05AB1E , 8 Bytes
Code:
Erläuterung:
Aufgrund der Python-Division kann es bei n> 19 zu Genauigkeitsproblemen kommen ... Verwendet den CP-1252 Codierung.
Probieren Sie es online! .
quelle
Pari / GP , 30 Bytes
Probieren Sie es online!
quelle
J, 20 Bytes
Basierend auf dem Ansatz der @ Lynn- Lösung .
Wenn für große Werte von n keine Genauigkeit erforderlich ist oder wenn angenommen wird, dass n als erweiterte Ganzzahl mit dem Suffix "" übergeben wird
x
, kann eine kürzere Lösung für 15 Byte verwendet werden .Verwendung
Erläuterung
quelle
Perl 6 ,
3632 BytesErläuterung:
Prüfung:
quelle
Hoon , 95 Bytes
Erstellen Sie eine Liste
[1...n]
, falten Sie sie mit++mul
der Fakultät um, erstellen Sie eine Liste[n!/1, n!/2, ... n!/n]
und addieren Sie sie, suchen Sie die GCD vonn!
und die Liste und dividieren Sie die Fakultät durch diese Zahl.Es gibt wahrscheinlich einen viel einfacheren Weg, den Nenner zu berechnen, aber ich kann es nicht herausfinden: /
quelle
Python 3,
153 150 146142 BytesIch bin sicher, das kann weiter Golf spielen. Aber ich bin neu hier
quelle
Axiom, 34 Bytes
Prüfung
quelle
PHP, 81 Bytes
Probieren Sie es online!
quelle