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>
Respostas:
M ,
96 bytesObrigado a FryAmTheEggman por salvar 3 bytes! Código:
M tem uma enorme vantagem aqui, porque trabalha com frações e não com flutuadores. Explicação:
Usa o codificação Jelly . Experimente online! .
Além disso, há um solução de 4 bytes , que gera um zero inicial às vezes (por exemplo
280 -> 0280
). Não tenho certeza se isso é permitido ou não:Experimente online!.
fonte
g¹
calcula o divisor comum mais grato da fração e n . O usog1
provavelmente seria mais claro. 2.V
lança a fração em uma corda e a elimina niladicamente.<num>/
é (não cumulativo) reduzido por um operador niládico. Isso não faz sentido, mas como existe apenas um número (o argumento implícito 0 ), ele simplesmente não faz nada. O próximo link, o denominador, é niládico; portanto, o valor de retorno anterior é impresso implicitamente e substituído por esse nilad.Julia, 22 bytes
Uma função anônima.
fonte
n->sum(inv,1//1:n).den
Mathematica, 27 bytes
Uma função anônima.
Por exemplo:
fonte
Python 2,
6967 bytesTeste no Ideone .
Como funciona
Seja H (n) a soma das inversas multiplicativas dos primeiros n números inteiros positivos. Em todos os momentos, temos que a / b = 1 + H (k - 1) . Na verdade, um , b , e k são inicializados para um , e 1/1 = 1 = 1 + H (0) .
Repetimos o trecho de código
(como uma string) n (entrada) vezes e executa o resultado. Em cada etapa, nós atualizamos a , b , e k usando a identidade a / b + 1 / k = ak / bk + b / bk = (ak + b) / bk .
Depois que todas as cópias foram executadas, a / b = 1 + H (n) , que tem o mesmo denominador que H (n) .
A forma totalmente reduzida de a / b é (a ÷ gcd (a, b)) / (b ÷ gcd (a, b)) . Em vez de calcular o maior divisor comum, inicializamos r como 1 e continuamos incrementando r até que ra seja um múltiplo de b .
Claramente, isso faz do ra o múltiplo menos comum de a e b . Como gcd (a, b) lcm (a, b) = ab , temos que b ÷ gcd (a, b) = lcm (a, b) ÷ a = ra ÷ a = r , tornando r a saída desejada.
fonte
Haskell, 52
Se o arquivo for carregado no GHCI, f pode ser usado como uma função.
fonte
import
letras minúsculas? Ele salva um byte para usar um emmap
vez de uma compreensão:sum$map(1%)[1..n]
Geléia, 9 bytes
Experimente aqui.
fonte
MATL ,
1413 bytesExperimente online!
Explicação
Para a entrada N , a saída é delimitada por N ! (fatorial de N ). O código calcula n / k para n = 1, ..., N ! e para k = 1, ..., N . Em seguida, soma sobre k , que fornece o número harmônico multiplicado por cada n . O resultado desejado é o índice n do primeiro desses valores que é um número inteiro.
fonte
Ruby,
5747 bytesAgradecemos a Kevin Lau por ter diminuído isso em dez bytes.
fonte
1.to_r
que você não precise fazer injeção e conversão de string. Além disso, como o padrão de Rubyreduce
é usar o primeiro elemento como inicial e1/1=1
você não precisa definir especificamente0
como o valor inicial.Mathematica, 26 bytes
Uma função sem nome, tendo
n
como entrada e retornando o denominador. Usa o truque padrão de abusarTr
(rastrear) para somar a lista de recíprocos.fonte
JavaScript (ES6), 88 bytes
Funciona apenas até m = 20 devido aos limites da precisão numérica do JavaScript.
fonte
05AB1E , 8 bytes
Código:
Explicação:
Pode haver alguns problemas de precisão para n> 19 devido à divisão do Python ... Usa o CP-1252 codificação .
Experimente online! .
fonte
Pari / GP , 30 bytes
Experimente online!
fonte
J, 20 bytes
Com base na abordagem usada pela solução da @ Lynn .
Se a precisão não for necessária para valores grandes de n ou se pudermos assumir que n será passado como um número inteiro estendido, com o sufixo de
x
, uma solução mais curta poderá ser usada por 15 bytes .Uso
Explicação
fonte
Perl 6 ,
3632 bytesExplicação:
Teste:
fonte
Hoon , 95 bytes
Crie uma lista
[1...n]
, dobre-a com++mul
o fatorial, crie uma lista[n!/1, n!/2, ... n!/n]
e some-a, encontre o MDC den!
e a lista e divida o fatorial por esse número.Provavelmente existe uma maneira muito mais fácil de calcular o denominador, mas não consigo descobrir: /
fonte
Python 3,
153 150 146142 bytesTenho certeza que isso pode ser jogado mais. Mas eu sou novo aqui
fonte
Axioma, 34 bytes
teste
fonte
PHP, 81 bytes
Experimente online!
fonte