var QUESTION_ID=80586,OVERRIDE_USER=20283;function answersUrl(e){return"https://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"https://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:400px;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:
Pyth, 6 Bytes
Probieren Sie es hier online aus .
quelle
Gelee, 6 Bytes
Probieren Sie es online!
quelle
Oktave, 29 Bytes
Erläuterung
Probelauf auf ideone .
quelle
Python 3, 43 Bytes
Verwendet die Formel auf der OEIS-Seite . Überraschenderweise ist eine benannte Funktion aufgrund der Zuordnung zu hier irgendwie günstiger
x
.Alternativer Ansatz für 46 Bytes:
Leider ist das
-~
notwendig, da(0).bit_length()
ist0
, aber selbst dann wäre es ein Byte zu lang.quelle
Julia, 27 Bytes
Probieren Sie es online!
Wie es funktioniert
Da
*
es sich bei Julia um eine Zeichenfolgenverkettung handelt,prod
kann diese verwendet werden, um ein Array von Zeichenfolgen zu verketten. Optional wird als erstes Argument eine Funktion verwendet, die der zweiten zugeordnet wird, bevor das tatsächliche "Produkt" abgerufenprod(bin,0:n-1)
wird. Dies ist auch die Zeichenfolge der binären Darstellung aller Ganzzahlen im gewünschten Bereich. Nimmt man die Länge mitendof
und dividiert durch n, so ergibt sich der Mittelwert.quelle
Julia, 28 Bytes
Da
bin
die Zuordnung nicht automatisch über Arrays erfolgt, verwenden wirceil(log2(n))
, um die Anzahl der eingegebenen Bits zu ermittelnn-1
. Das funktioniert gut, weil Juliasa:b
Notation an beiden Enden inklusive ist, also2:n
ein Bereich von 2 bisn
, aber wir berechnen wirklich die Anzahl der Bits für Zahlen im Bereich1:n-1
. Leider müssen wir aber noch einen draufstecken2
, um 0 zu machen.Probieren Sie es online!
quelle
MATL, 9 Bytes
Probieren Sie es online!
Geänderte Version mit allen Testfällen
Erläuterung
quelle
G/Q
am Ende.MATL, 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Gelee, 8 Bytes
Nicht kürzer, aber interessanter Algorithmus und meine erste Jelly-Einreichung:
quelle
Gelee, 10 Bytes
Aus dem Vorschlag von Sp3000.
Probieren Sie es hier aus.
Jelly, 11 Bytes
Nicht sehr kurz, aber ich brauche ein paar Tipps.
Probieren Sie es hier aus.
Verwenden Sie die gleiche Formel wie in der Antwort von Sp3000 . (Es ist nicht sehr schwer, es selbst zu bekommen, indem man den geometrischen Verlauf unterscheidet.)
quelle
_BL$N
schien ziemlich lang ...BL©2*2_÷+®
Java,
1359590 Bytesquelle
Python 3, 46 Bytes
Nenne es so
Ich musste die Kartenrevision zurücksetzen, da die Eingabe von 5 fehlgeschlagen ist
quelle
05AB1E,
97 BytesCode:
Erläuterung:
Probieren Sie es online aus
Bearbeiten: 2 Bytes dank @Adnan gespeichert
quelle
C # 87 Bytes
Ich habe eine C # -Antwort geschrieben, weil ich keine gesehen habe. Dies ist mein erster Beitrag zu einem dieser Artikel. Bitte lassen Sie mich wissen, wenn ich etwas falsch mache.
quelle
double
,float
um ein Byte zu speichern, oder benötigen Sie die Genauigkeit?JavaScript (ES7),
3832 ByteVerwendung der Formel von @ sp3000 (vorherige Version war eine rekursive Lösung). ES6-Version für 34 Bytes:
Erklärung der Formel: Betrachten Sie den Fall von N = 55. Wenn wir die Binärzahlen schreiben (vertikal, um Platz zu sparen), erhalten wir:
Die Größe dieses Rechtecks ist nl , der Durchschnitt ist also nur l, aber wir müssen die Leerzeichen ausschließen. Jede Leerzeichenreihe ist doppelt so lang wie die vorherige, sodass die Summe 2 + 4 + 8 + 16 + 32 = 64 - 2 = 2 l - 2 beträgt .
quelle
J,
211715 Bytes17 bis 15 Bytes dank @Dennis.
Kann mir jemand beim Golfen helfen? ...
Ungolfed-Version
quelle
%~>:@#@([:":10#.[:#:i.)-]
. Ihre Lösung sieht eher optimal aus.Perl 6 ,
3432 BytesErläuterung:
Prüfung:
quelle
Dyalog APL , 14 Bytes
quelle
Clojure,
716463 BytesEs sieht so aus, als wären die Verhältnisse in Ordnung. Welche Zahlenformate sind für die Ausgabe akzeptabel?
(fn[n](/(inc(apply +(map #(.bitLength(bigint %))(range n))))n))
ungolfed (und zur leichteren Erklärung leicht umgeschrieben)
alte Antwort, die verwendet wurde (float):
(fn[n](float(/(inc(apply +(map #(..(bigint %)bitLength)(range n))))n)))
Ausgabe ist wie folgt:
quelle
Minkolang 0,15 , 23 Bytes
Probieren Sie es hier aus!
Erläuterung
Ziemlich direkte Implementierung.
quelle
JavaScript ES5, 55 Byte
Erläuterung
quelle
Hoon , 71 Bytes
... Ich bin mir ziemlich sicher, dass dies das erste Mal ist, dass ich Hoons Gleitkommakerne verwende. Tatsächlich handelt es sich um eine in Hoon geschriebene Implementierung, die an SoftFloat gesendet wird, da die einzigen Datentypen in Hoon Atome und Zellen sind.
Erstellen Sie eine Funktion, die ein Atom annimmt
r
. Erstellen Sie eine Liste aus [0 .. (r - 1)], mappen Sie die Liste mit dem binären Logarithmus der Zahl ab und falten Sie diese Liste mit++add
. Wandle sowohl die Ausgabe der Falte als auchr
in@rq
(Gleitkommazahlen mit vierfacher Genauigkeit) mit um++sun:rq
und dividiere dann eine durch die andere.Das Seltsamste an diesem Ausschnitt ist
:.^rq
das Ende.a:b
in Hoon bedeutet "bewerte a im Kontext von b".++rq
ist der Kern, der wie eine Bibliothek die gesamte Implementierung mit vierfacher Genauigkeit enthält. Laufen(sun 5):rq
ist also das Gleiche wie Laufen(sun:rq 5)
.Glücklicherweise sind Kerne in Hoon wie Nistpuppen; Wenn Sie den Arm auswerten
++rq
, um den Kern zu erhalten, fügt er auch die gesamte Stdlib hinzu, sodass Sie die Rolle und Drehung sowie das ganze lustige Zeug behalten können, anstatt nur mit den in definierten Armen zu stecken++rq
. Leider definiert rq neu++add
, um stattdessen Gleitkommazahl hinzuzufügen und nichtr
in seinem Kontext zu haben..
(der gesamte aktuelle Kontext) tut dies jedoch.Bei der Auswertung eines Ausdrucks in einem Kontext sucht der Compiler zuerst nach der Gliedertiefe. In unserem Fall
a:[. rq]
würde man im gesamten aktuellen Kontext nachschauen,a
bevor man zum Nachschauen übergehtrq
. Ichadd
werde also die Funktion nachschlagen, die auf Atomen anstelle von Gleitkommazahlen funktioniert ... aber ich werde es auch tundiv
. Hoon hat auch eine Funktion, bei der bei Verwendung^name
der erste gefundene Verweis ignoriert wird und nach dem zweiten gesucht wird.Von da an wird einfach der syntatische Zucker
a^b
Gleichheit verwendet,[a b]
um unser Snippet sowohl mit unserem aktuellen Kontext als auch mit der Float-Bibliothek mit vierfacher Genauigkeit zu bewerten, wobei der atomare Div zugunsten von ignoriert wird++div:rq
.quelle
Eigentlich 7 Bytes:
Probieren Sie es online!
Erläuterung:
Ohne einen Fehler, den ich gerade entdeckt habe, würde diese Lösung für 6 Bytes funktionieren:
æ
ist der eingebaute mittlere Befehl.quelle
Vitsy, 26 Bytes
Dies ist ein erster Versuch, ich werde dies weiter ausbauen und später eine Erklärung hinzufügen.
Probieren Sie es online!
quelle
PowerShell v2 +, 64 Byte
Sehr unkomplizierte Umsetzung der Spezifikation. Schleifen von
0
bis$n-1
mit|%{...}
. Bei jeder Iteration geben wir[convert]
unsere Eingabenummer$_
in eine Stringbasis ein2
und nehmen ihrelength
. Wir akkumulieren das in$o
. Nach den Schleifen teilen wir uns einfach$o/$n
und belassen dies in der Pipeline, und die Ausgabe ist implizit.Solange dies so ist, ist es tatsächlich kürzer als die Formel, die Sp & amp; andere verwenden, da
[math]::Ceiling()
und[math]::Log()
lächerlich wortreich sind. Die Grundkonvertierung in PowerShell ist ein Glücksfall.quelle
Perl 5.10, 54 Bytes
Ziemlich unkompliziert.
sprintf"%b"
ist eine einfache Möglichkeit, in Perl eine Zahl in Binärform auszugeben, ohne zusätzliche Bibliotheken zu verwenden.Probieren Sie es online!
quelle
CJam,
131211 BytesEin Byte wurde dank @ Sp3000 gespeichert, ein weiteres dank @ jimmy23013
Probieren Sie es online!
Erläuterung
Einfach. Wendet die Definition an.
quelle
Jolf, 10 Bytes
Probieren Sie es hier aus!
Erläuterung
quelle
Schnell, 72 Bytes
quelle
J, 15 Bytes
Dies ist ein monadisches Verb, das wie folgt verwendet wird:
Probieren Sie es hier aus!
Erläuterung
Ich habe die Herausforderungsspezifikation ziemlich wörtlich umgesetzt. Es gibt andere Ansätze, aber alle erwiesen sich als länger.
quelle