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>
Respuestas:
M ,
96 bytes¡Gracias a FryAmTheEggman por guardar 3 bytes! Código:
M tiene una gran ventaja aquí, porque funciona con fracciones en lugar de flotantes. Explicación:
Utiliza la codificación Jelly . Pruébalo en línea! .
Además, hay una solución de 4 bytes , que a veces genera un cero inicial (p
280 -> 0280
. Ej .). No estoy seguro de si esto está permitido o no:Pruébalo en línea! .
fuente
g¹
calcula el divisor común más grande de la fracción y n . El usog1
probablemente sería más claro. 2.V
lanza la fracción a una cuerda y la evacua niládica.<num>/
es (no acumulativo) reducir por un operador niladic. Esto no tiene sentido, pero como solo hay un número (el argumento implícito 0 ), simplemente no hace nada. El siguiente enlace, el denominador, es niládico, por lo que el valor de retorno anterior se imprime implícitamente y se reemplaza por ese niládico.Julia, 22 bytes
Una función anónima.
fuente
n->sum(inv,1//1:n).den
Mathematica, 27 bytes
Una función anónima.
Por ejemplo:
fuente
Python 2,
6967 bytesPruébalo en Ideone .
Cómo funciona
Sea H (n) la suma de los inversos multiplicativos de los primeros n enteros positivos. En todo momento, tenemos que a / b = 1 + H (k - 1) . De hecho, un , b , y k están inicializadas a 1 , y 1/1 = 1 = 1 + H (0) .
Repetimos el fragmento de código
(como una cadena) n (entrada) veces y ejecuta el resultado. En cada paso, actualizamos un , b , y k utilizando la identidad a / b + 1 / k = ak / bk + b / bk = (ak + b) / bk .
Después de que se hayan ejecutado todas las copias, a / b = 1 + H (n) , que tiene el mismo denominador que H (n) .
La forma completamente reducida de a / b es (a ÷ gcd (a, b)) / (b ÷ gcd (a, b)) . En lugar de calcular el máximo divisor común, inicializamos r como 1 y seguimos incrementando r hasta que ra sea un múltiplo de b .
Claramente, esto hace que ra sea el mínimo común múltiplo de a y b . Dado que gcd (a, b) · mcm (a, b) = ab , tenemos que b ÷ gcd (a, b) = mcm (a, b) ÷ a = ra ÷ a = r , haciendo r la salida deseada.
fuente
Haskell, 52
Si el archivo se carga en GHCI, f puede usarse como una función.
fuente
import
minúsculas? Se ahorra un byte para usar un enmap
lugar de una comprensión:sum$map(1%)[1..n]
Jalea, 9 bytes
Pruébalo aquí
fuente
MATL ,
1413 bytesPruébalo en línea!
Explicación
Para la entrada N , la salida está limitada por N ! (factorial de N ). El código calcula n / k para n = 1, ..., N ! y para k = 1, ..., N . Luego suma k , lo que da el número armónico multiplicado por cada n . El resultado deseado es el índice n del primero de esos valores que es un entero.
fuente
Ruby,
5747 bytesGracias a Kevin Lau por acortar esto en diez bytes.
fuente
1.to_r
que no necesite hacer la inyección de cadena y la conversión. Además, dado que el valor predeterminado de Rubyreduce
es usar el primer elemento como inicial, y1/1=1
no es necesario establecerlo específicamente0
como valor inicial.Mathematica, 26 bytes
Una función sin nombre que toma
n
como entrada y devuelve el denominador. Utiliza el truco estándar de abusoTr
(rastreo) para sumar la lista de reciprocos.fuente
JavaScript (ES6), 88 bytes
Solo funciona hasta m = 20 debido a los límites de la precisión numérica de JavaScript.
fuente
05AB1E , 8 bytes
Código:
Explicación:
Puede haber algunos problemas de precisión para n> 19 debido a la división de Python ... Utiliza la codificación CP-1252 .
Pruébalo en línea! .
fuente
Pari / GP , 30 bytes
Pruébalo en línea!
fuente
J, 20 bytes
Basado en el enfoque utilizado por la solución de @ Lynn .
Si la precisión no es necesaria para valores grandes de n o si podemos suponer que n se pasará como un entero extendido, con el sufijo
x
, se puede usar una solución más corta para 15 bytes .Uso
Explicación
fuente
Perl 6 ,
3632 bytesExplicación:
Prueba:
fuente
Hoon , 95 bytes
Cree una lista
[1...n]
, dóblela con++mul
el factorial, cree una lista[n!/1, n!/2, ... n!/n]
y sumécela, encuentre el MCD den!
y la lista, y divida el factorial por ese número.Probablemente haya una forma mucho más fácil de calcular el denominador, pero no puedo entenderlo: /
fuente
Python 3,
153 150 146142 bytesEstoy seguro de que esto puede jugar más golf. Pero soy nuevo aqui
fuente
Axioma, 34 bytes
prueba
fuente
PHP, 81 bytes
Pruébalo en línea!
fuente