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>
Ответы:
М ,
96 байтСпасибо FryAmTheEggman за сохранение 3 байта! Код:
У M здесь огромное преимущество, потому что он работает с дробями, а не с плавающей точкой. Объяснение:
Использует кодировку желе . Попробуйте онлайн! ,
Также существует 4-байтовое решение, которое иногда выводит начальный ноль (например
280 -> 0280
). Я не уверен, разрешено это или нет:Попробуйте онлайн! ,
источник
g¹
вычисляет наибольший общий делитель дроби и n . Использованиеg1
, вероятно, будет более понятным. 2.V
преобразует дробь в строку и исчисляет ее до нуля.<num>/
является (не кумулятивным) редукцией ниладическим оператором. Это бессмыслица, но поскольку существует только одно число (неявный аргумент 0 ), оно просто ничего не делает. Следующая ссылка, знаменатель, является niladic, поэтому предыдущее возвращаемое значение печатается неявно и заменяется этим nilad.Юлия, 22 байта
Анонимная функция.
источник
n->sum(inv,1//1:n).den
Mathematica, 27 байт
Анонимная функция.
Например:
источник
Python 2,
6967 байтПроверьте это на Ideone .
Как это устроено
Пусть H (n) будет суммой мультипликативных инверсий первых n натуральных чисел. Мы всегда имеем, что a / b = 1 + H (k - 1) . Фактически, a , b и k все инициализируются в 1 , и 1/1 = 1 = 1 + H (0) .
Мы повторяем фрагмент кода
(в виде строки) n (входных) раз и выполнить результат. На каждом шаге мы обновляем a , b и k, используя тождество a / b + 1 / k = ak / bk + b / bk = (ak + b) / bk .
После того, как все копии были выполнены, a / b = 1 + H (n) , который имеет тот же знаменатель, что и H (n) .
Полностью сокращенная форма a / b имеет вид (a ÷ gcd (a, b)) / (b ÷ gcd (a, b)) . Вместо того, чтобы вычислять наибольший общий делитель, мы инициализируем r как 1 и продолжаем увеличивать r, пока ra не будет кратно b .
Ясно, что это делает ra наименьшим общим множителем a и b . Поскольку gcd (a, b) · lcm (a, b) = ab , мы имеем, что b ÷ gcd (a, b) = lcm (a, b) ÷ a = ra ÷ a = r , что делает r желаемым выходом.
источник
Хаскелл, 52
Если файл загружен в GHCI, f может использоваться как функция.
источник
import
строчные? Это сохраняет байт, чтобы использоватьmap
вместо понимания:sum$map(1%)[1..n]
Желе, 9 байт
Попробуй это здесь.
источник
MATL ,
1413 байтПопробуйте онлайн!
объяснение
Для входа N выход ограничен сверху N ! (факториал N ). Код вычисляет n / k для n = 1, ..., N ! и к = 1, ..., N . Затем он суммирует по k , что дает номер гармоники, умноженный на каждое n . Желаемый результат - индекс n первого из тех значений, который является целым числом.
источник
Рубин,
5747 байтСпасибо Кевину Лау за сокращение его на десять байтов.
источник
1.to_r
так, чтобы вам не нужно было вводить строки и преобразовывать их. Кроме того, поскольку Ruby по умолчанию для forreduce
использует первый элемент в качестве начального, и1/1=1
вам не нужно специально устанавливать0
в качестве начального значения.Mathematica, 26 байтов
Безымянная функция, принимающая в
n
качестве входных данных и возвращающая знаменатель. Использует стандартный прием злоупотребленияTr
(трассировки) для суммирования списка взаимных ссылок.источник
JavaScript (ES6), 88 байт
Работает только до m = 20 из-за ограничений числовой точности JavaScript.
источник
05AB1E , 8 байтов
Код:
Объяснение:
Могут быть некоторые проблемы с точностью для n> 19 из-за деления Python ... Использует CP-1252 кодировку .
Попробуйте онлайн! ,
источник
Пари / ГП , 30 байт
Попробуйте онлайн!
источник
J, 20 байт
На основе подхода, используемого @ Линн решения .
Если точность не требуется для больших значений n или если мы можем предположить, что n будет передано как расширенное целое число с суффиксом
x
, можно использовать более короткое решение для 15 байтов .использование
объяснение
источник
Perl 6 ,
3632 байтаОбъяснение:
Тестовое задание:
источник
Хун , 95 байт
Создать список
[1...n]
, свернуть его с++mul
помощью факториала, создать список[n!/1, n!/2, ... n!/n]
и суммируйте его, найдите GCDn!
и список и разделите факториал на это число.Вероятно, есть гораздо более простой способ вычислить знаменатель, но я не могу понять это: /
источник
Python 3,
153 150 146142 байтаЯ уверен, что это может сыграть в гольф дальше. Но я новичок здесь
источник
Аксиома, 34 байта
тестовое задание
источник
PHP, 81 байт
Попробуйте онлайн!
источник