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>
Jawaban:
Pyth, 6 byte
Cobalah online di sini .
sumber
Jelly, 6 byte
Cobalah online!
sumber
Oktaf, 29 byte
Penjelasan
Sampel dijalankan pada ideone .
sumber
Python 3, 43 byte
Manfaatkan rumus ini pada halaman OEIS . Anehnya, fungsi bernama entah bagaimana lebih murah di sini karena tugas untuk
x
.Pendekatan alternatif untuk 46 byte:
Sayangnya,
-~
itu perlu karena(0).bit_length()
itu0
, tetapi bahkan kemudian itu akan menjadi byte yang terlalu lama.sumber
Julia, 27 byte
Cobalah online!
Bagaimana itu bekerja
Karena
*
ini adalah rangkaian string dalam Julia,prod
dapat digunakan untuk menggabungkan serangkaian string. Secara opsional mengambil fungsi sebagai argumen pertama yang dipetakan di atas yang kedua sebelum mengambil "produk" yang sebenarnya, demikianprod(bin,0:n-1)
juga string representasi biner dari semua bilangan bulat dalam rentang yang diinginkan. Mengambil panjang denganendof
dan membaginya dengan n menghasilkan rata-rata.sumber
Julia, 28 byte
Karena
bin
tidak secara otomatis memetakan di atas array, kami menggunakanceil(log2(n))
untuk mendapatkan jumlah bitn-1
. Ini berfungsi dengan baik karenaa:b
notasi Julia inklusif pada kedua ujungnya, sehingga2:n
rentang dari 2 hinggan
, tetapi kami benar-benar menghitung jumlah bit untuk angka dalam rentang1:n-1
. Sayangnya, kita perlu menambah ekstra2
akun untuk 0.Cobalah online!
sumber
MATL, 9 byte
Cobalah secara Online!
Versi modifikasi dengan semua kasus uji
Penjelasan
sumber
G/Q
di akhir.MATL, 9 byte
Cobalah online!
Penjelasan
sumber
Jelly, 8 byte
Tidak lebih pendek, tetapi algoritma yang menarik, dan pengiriman Jelly pertama saya:
sumber
Jelly, 10 byte
Dari saran Sp3000.
Coba di sini.
Jelly, 11 byte
Tidak terlalu pendek tapi saya butuh beberapa tips.
Coba di sini.
Menggunakan rumus yang sama seperti pada jawaban Sp3000 . (Tidak terlalu sulit untuk mendapatkannya sendiri, dengan membedakan perkembangan geometrik.)
sumber
_BL$N
sepertinya cukup lama ...BL©2*2_÷+®
Java,
1359590 bytesumber
Python 3, 46 Bytes
Sebut saja seperti
Saya harus mengembalikan revisi peta karena gagal untuk input 5
sumber
05AB1E,
97 byteKode:
Penjelasan:
Cobalah online
Sunting: disimpan 2 byte berkat @Adnan
sumber
C #, 87 byte
Saya menulis jawaban C # karena saya tidak melihatnya. Ini adalah posting pertama saya ke salah satu dari ini, jadi tolong beri tahu saya jika saya melakukan sesuatu yang salah.
sumber
double
kefloat
untuk menghemat satu byte, atau apakah Anda membutuhkan ketelitian?JavaScript (ES7),
3832 byteMenggunakan rumus @ sp3000 (versi sebelumnya adalah solusi rekursif). Versi ES6 untuk 34 byte:
Penjelasan rumus: Pertimbangkan kasus N = 55. Jika kita menulis angka biner (secara vertikal untuk menghemat ruang), kita mendapatkan:
Ukuran persegi panjang ini adalah nl jadi rata-rata hanya l tetapi kita perlu mengecualikan yang kosong. Setiap baris kosong dua kali lebih panjang dari sebelumnya sehingga totalnya adalah 2 + 4 + 8 + 16 + 32 = 64 - 2 = 2 l - 2.
sumber
J,
211715 byteDari 17 byte hingga 15 byte, terima kasih kepada @Dennis.
Adakah yang bisa membantu saya bermain golf ini? ...
Versi tidak disatukan
sumber
%~>:@#@([:":10#.[:#:i.)-]
. Solusi Anda terlihat agak optimal.Perl 6 ,
3432 bytePenjelasan:
Uji:
sumber
Dyalog APL , 14 byte
sumber
Clojure,
716463 byteSepertinya rasio ok menurut format angka mana yang dapat diterima dalam output?
(fn[n](/(inc(apply +(map #(.bitLength(bigint %))(range n))))n))
ungolfed (dan sedikit ditulis ulang untuk memudahkan penjelasan)
jawaban lama yang digunakan (float):
(fn[n](float(/(inc(apply +(map #(..(bigint %)bitLength)(range n))))n)))
output seperti:
sumber
Minkolang 0,15 , 23 byte
Coba di sini!
Penjelasan
Implementasi yang cukup jujur.
sumber
JavaScript ES5, 55 byte
Penjelasan
sumber
Hoon , 71 byte
... Aku cukup yakin ini sebenarnya pertama kalinya aku menggunakan core floating point Hoon. Sebenarnya ini adalah implementasi yang ditulis dalam Hoon yang diluncurkan ke SoftFloat, karena satu-satunya tipe data di Hoon adalah atom dan sel.
Buat fungsi yang mengambil atom
r
,. Buat daftar dari [0 .. (r - 1)], petakan daftar itu dengan mengambil logaritma biner dari angka tersebut, lalu lipatlah daftar itu dengan++add
. Konversikan output dari lipatan danr
ke@rq
(angka floating point presisi quad) dengan++sun:rq
, dan kemudian bagi satu dengan yang lainnya.Hal paling aneh dalam cuplikan ini adalah
:.^rq
di bagian akhir.a:b
dalam Hoon berarti "mengevaluasi a dalam konteks b".++rq
adalah inti yang berisi seluruh implementasi quad-precision, seperti perpustakaan. Jadi berlari(sun 5):rq
adalah hal yang sama dengan melakukan(sun:rq 5)
.Untungnya, inti di Hoon seperti boneka bersarang; ketika Anda mengevaluasi lengan
++rq
untuk mendapatkan inti, itu menambahkan seluruh stdlib juga, sehingga Anda bisa terus berguling-guling dan teluk serta semua hal yang menyenangkan alih-alih terjebak hanya dengan lengan yang ditentukan++rq
. Sayangnya, rq mengubah++add
menjadi floating-point sebagai gantinya, bersama dengan tidak memilikir
dalam konteksnya..
(seluruh konteks saat ini), bagaimanapun.Saat mengevaluasi ekspresi dalam konteks, kompiler mencari kedalaman ekstremitas-pertama. Dalam kasus kami
a:[. rq]
akan melihat dalam seluruh konteks saat ini untuka
sebelum pindah ke melihatrq
. Jadiadd
akan mencari fungsi yang bekerja pada atom, bukan angka floating-point ... tapi begitu jugadiv
. Hoon juga memiliki fitur di mana menggunakan^name
akan mengabaikan referensi yang ditemukan pertama, dan mencari yang kedua.Dari sana, itu hanya menggunakan gula sintaksis
a^b
yang setara dengan[a b]
untuk mengevaluasi potongan kita dengan konteks kita saat ini dan perpustakaan float presisi-quad, mengabaikan div atom yang mendukung++div:rq
.sumber
Sebenarnya, 7 byte:
Cobalah online!
Penjelasan:
Jika bukan karena bug yang baru saja saya temukan, solusi ini akan bekerja selama 6 byte:
æ
adalah perintah mean builtin.sumber
Vitsy, 26 byte
Ini adalah upaya pertama, saya akan menurunkan ini lagi dan menambahkan penjelasan nanti.
Cobalah online!
sumber
PowerShell v2 +, 64 byte
Implementasi spec yang sangat mudah. Loop dari
0
ke$n-1
dengan|%{...}
. Setiap iterasi,[convert]
kami memasukkan nomor input kami$_
ke basis string2
dan mengambilnyalength
. Kami mengakumulasikannya di$o
. Setelah loop, kami hanya membagi$o/$n
, meninggalkan yang ada di dalam pipa, dan output tersirat.Selama ini, sebenarnya lebih pendek dari formula yang digunakan Sp & lain-lain, karena
[math]::Ceiling()
dan[math]::Log()
sangat bertele-tele. Konversi basis di PowerShell adalah yucky.sumber
Perl 5.10, 54 byte
Cukup mudah.
sprintf"%b"
adalah cara yang rapi untuk menghasilkan angka dalam biner di Perl tanpa menggunakan pustaka tambahan.Cobalah online!
sumber
CJam,
131211 byteSatu byte disimpan berkat @ Sp3000, dan satu byte lagi berkat @ jimmy23013
Cobalah online!
Penjelasan
Mudah. Terapkan definisi.
sumber
Jolf, 10 byte
Coba di sini!
Penjelasan
sumber
Cepat, 72 byte
sumber
J, 15 byte
Ini adalah kata kerja monadik, digunakan sebagai berikut:
Coba di sini!
Penjelasan
Saya mengimplementasikan spec tantangan secara harfiah. Ada pendekatan lain, tetapi semuanya ternyata lebih lama.
sumber