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>
Respuestas:
Pyth, 6 bytes
Pruébelo en línea aquí .
fuente
Jalea, 6 bytes
Pruébalo en línea!
fuente
Octava, 29 bytes
Explicación
Ejecución de muestra en ideone .
fuente
Python 3, 43 bytes
Hace uso de la fórmula en la página OEIS . Sorprendentemente, una función con nombre es de alguna manera más barata aquí debido a la asignación a
x
.Enfoque alternativo para 46 bytes:
Desafortunadamente,
-~
es necesario ya que(0).bit_length()
es0
, pero incluso entonces sería un byte demasiado largo.fuente
Julia, 27 bytes
Pruébalo en línea!
Cómo funciona
Como
*
es la concatenación de cadenas en Julia,prod
se puede usar para concatenar una matriz de cadenas. Opcionalmente, toma una función como primer argumento que asigna sobre el segundo antes de tomar el "producto" real, por lo queprod(bin,0:n-1)
es la cadena de la representación binaria de todos los enteros en el rango deseado. Tomar la longitud conendof
y dividir entre n produce la media.fuente
Julia, 28 bytes
Como
bin
no se asigna automáticamente a las matrices, estamos usandoceil(log2(n))
para obtener el número de bitsn-1
. Esto funciona bien porque laa:b
notación de Julia es inclusiva en ambos extremos, por lo que2:n
es un rango de 2 an
, pero realmente estamos calculando el número de bits para los números en el rango1:n-1
. Sin embargo, desafortunadamente, necesitamos agregar un extra2
para dar cuenta de 0.Pruébalo en línea!
fuente
MATL, 9 bytes
Pruébalo en línea!
Versión modificada con todos los casos de prueba.
Explicación
fuente
G/Q
al final.MATL, 9 bytes
Pruébalo en línea!
Explicación
fuente
Jalea, 8 bytes
No es un algoritmo más corto, pero interesante, y mi primer envío de Jelly:
fuente
Jalea, 10 bytes
De la sugerencia de Sp3000.
Pruébalo aquí.
Jalea, 11 bytes
No muy corto pero necesito algunos consejos.
Pruébalo aquí.
Usando la misma fórmula que en la respuesta de Sp3000 . (No es muy difícil obtenerlo usted mismo, diferenciando la progresión geométrica).
fuente
_BL$N
parecía bastante largo ...BL©2*2_÷+®
Java,
1359590 bytesfuente
Python 3, 46 bytes
Llámalo como
Tuve que revertir la revisión del mapa porque falló para la entrada de 5
fuente
05AB1E,
97 bytesCódigo:
Explicación:
Pruébalo en línea
Editar: guardado 2 bytes gracias a @Adnan
fuente
C #, 87 bytes
Escribí una respuesta de C # porque no la vi. Esta es mi primera publicación en una de estas, así que avíseme si estoy haciendo algo mal.
fuente
double
afloat
para guardar un byte o necesita la precisión?JavaScript (ES7),
3832 bytesUsando la fórmula de @ sp3000 (la versión anterior era una solución recursiva). Versión ES6 para 34 bytes:
Explicación de la fórmula: considere el caso de N = 55. Si escribimos los números binarios (verticalmente para ahorrar espacio), obtenemos:
El tamaño de este rectángulo es nl, por lo que el promedio es solo l, pero debemos excluir los espacios en blanco. Cada fila de espacios en blanco es dos veces más larga que la anterior, por lo que el total es 2 + 4 + 8 + 16 + 32 = 64 - 2 = 2 l - 2.
fuente
J,
211715 bytesDe 17 bytes a 15 bytes gracias a @Dennis.
¿Alguien puede ayudarme a jugar golf? ...
Versión sin golf
fuente
%~>:@#@([:":10#.[:#:i.)-]
. Su solución se ve bastante óptima.Perl 6 ,
3432 bytesExplicación:
Prueba:
fuente
Dyalog APL , 14 bytes
fuente
Clojure,
716463 bytesParece que las relaciones están bien de acuerdo con ¿Qué formatos de número son aceptables en la salida?
(fn[n](/(inc(apply +(map #(.bitLength(bigint %))(range n))))n))
no golfed (y ligeramente reescrito para facilitar la explicación)
vieja respuesta que usaba (flotante):
(fn[n](float(/(inc(apply +(map #(..(bigint %)bitLength)(range n))))n)))
la salida es como:
fuente
Minkolang 0.15 , 23 bytes
Pruébalo aquí!
Explicación
Implementación bastante directa.
fuente
JavaScript ES5, 55 bytes
Explicación
fuente
Hoon , 71 bytes
... Estoy bastante seguro de que esta es la primera vez que uso los núcleos de coma flotante de Hoon. En realidad, es una implementación escrita en Hoon que se lanza a SoftFloat, ya que los únicos tipos de datos en Hoon son átomos y células.
Crear una función que toma un átomo,
r
. Cree una lista a partir de [0 .. (r - 1)], asigne un mapa sobre la lista tomando el logaritmo binario del número, luego doble esa lista con++add
. Convierta tanto la salida del pliegue comor
a@rq
(números de coma flotante de precisión cuádruple) con++sun:rq
, y luego divida uno por el otro.Lo más extraño de este fragmento es
:.^rq
el final.a:b
en Hoon significa "evaluar a en el contexto de b".++rq
es el núcleo que contiene toda la implementación de precisión cuádruple, como una biblioteca. Entonces correr(sun 5):rq
es lo mismo que hacer(sun:rq 5)
.Afortunadamente, los núcleos en Hoon son como muñecas de anidación; cuando
++rq
evalúas el brazo para obtener el núcleo, también agrega todo el stdlib, para que puedas seguir rodando y girando y abriéndote y todas esas cosas divertidas en lugar de quedarte atrapado solo con los brazos definidos++rq
. Desafortunadamente, rq se redefine++add
para ser una adición de punto flotante, junto con no tenerr
en su contexto..
(todo el contexto actual), sin embargo.Al evaluar una expresión en un contexto, el compilador busca primero la profundidad del miembro. En nuestro caso
a:[. rq]
, buscaría en todo el contexto actuala
antes de pasar a buscarrq
. Entoncesadd
buscará la función que funciona en los átomos en lugar de los números de coma flotante ... pero también lo harádiv
. Hoon también tiene una función en la que el uso^name
ignorará la primera referencia encontrada y buscará la segunda.A partir de ahí, es simplemente usar el azúcar sintáctico de
a^b
ser igual a[a b]
para evaluar nuestro fragmento con nuestro contexto actual y la biblioteca flotante de precisión cuádruple, ignorando el div atómico a favor de++div:rq
.fuente
En realidad, 7 bytes:
Pruébalo en línea!
Explicación:
Si no fuera por un error que acabo de descubrir, esta solución funcionaría para 6 bytes:
æ
es el comando medio incorporado.fuente
Vitsy, 26 bytes
Este es un primer intento, jugaré más y agregaré una explicación más adelante.
Pruébalo en línea!
fuente
PowerShell v2 +, 64 bytes
Implementación muy sencilla de la especificación. Bucles de
0
a$n-1
con|%{...}
. Cada iteración, ingresamos[convert]
nuestro número de entrada$_
a una base de cadena2
y tomamos sulength
. Acumulamos eso en$o
. Después de los bucles, simplemente dividimos$o/$n
, dejando eso en la tubería, y la salida es implícita.Mientras esto sea así, en realidad es más corto que la fórmula que usan Sp y otros,
[math]::Ceiling()
y[math]::Log()
es ridículamente prolijo. La conversión de base en PowerShell es asquerosa.fuente
Perl 5.10, 54 bytes
Bastante sencillo.
sprintf"%b"
es una forma ordenada de generar un número en binario en Perl sin usar bibliotecas adicionales.Pruébalo en línea!
fuente
CJam,
131211 bytesUn byte guardado gracias a @ Sp3000, y otro gracias a @ jimmy23013
Pruébalo en línea!
Explicación
Sencillo. Aplica la definición.
fuente
Jolf, 10 bytes
Pruébalo aquí!
Explicación
fuente
Swift, 72 bytes
fuente
J, 15 bytes
Este es un verbo monádico, usado de la siguiente manera:
Pruébalo aquí!
Explicación
Implementé la especificación de desafío literalmente. Hay otros enfoques, pero todos resultaron ser más largos.
fuente