В этой задаче цель состоит в том, чтобы воссоздать онлайн -энциклопедию целочисленных последовательностей по одной последовательности за раз. Подобно Эволюции Hello World , каждый ответ зависит от предыдущего ответа.
Со временем эта задача создаст «семейное древо» последовательностей OEIS. Это просто добавить к этому дереву.
- Найти предыдущий ответ, который может быть на любой глубине N дерева.
- Определите первые N чисел, сгенерированных последовательностью этого ответа.
- Найдите в OEIS последовательность, начинающуюся с тех же номеров и ранее не использовавшуюся.
- Напишите программу для генерации этой новой последовательности, которую вы только что нашли.
- Отправьте свой ответ как глубину N + 1
Так как уровень вашего ответа влияет на оценку, вы всегда должны добавлять свой ответ в дерево на как можно более глубоком уровне. Если вы не можете разместить свой ответ где-нибудь на дереве, вы можете начать новую ветвь дерева и поставить свой ответ как глубина 1.
Требования к ответу
Есть несколько способов вывести последовательность.
Первый вариант - написать программу или функцию, которая вводит число (из STDIN или в качестве аргумента) и возвращает N-е число в выбранной вами последовательности. Вы можете предположить, что последовательность будет определена для N и что N и S_N имеют «разумный размер» (поэтому это не вызовет переполнения). Вы также можете использовать любое разумное индексирование, такое как индексирование 0, индексирование 1 или индексирование, указанное в разделе «смещение» на странице OEIS последовательности, это не имеет значения. Термин, созданный первым индексом, должен соответствовать первому члену записи OEIS.
Второй вариант - написать программу или функцию, которая вводит число и возвращает первые N членов последовательности. Первые условия вывода должны быть первыми условиями записи OEIS (вы не можете пропустить первые несколько терминов). Последовательные термины должны быть разделены произвольными строками нецифровых символов, поэтому 0,1 1.2/3,5;8,11
работает, но 011235811
не считается.
Третий вариант - создать программу, которая выводит непрерывный поток чисел. Как и во втором варианте, между последовательными терминами должны быть разделители.
Ваш ответ должен содержать такой заголовок, чтобы облегчить синтаксический анализ стека:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
Ваш ответ должен содержать код для генерации последовательности, а также первые несколько терминов, которые должны будут содержать любые потомки. Этим нескольким терминам должно предшествовать точное слово,terms:
чтобы контроллер мог использовать их как часть древовидной диаграммы. Также рекомендуется написать описание выбранной вами последовательности.
Если ваш пост является ответом глубины 1 и, следовательно, не имеет предка, вы должны просто опустить его from A[number]
в заголовке.
Вот пример ответа:
# Perl, 26 bytes, depth 3, A026305 from A084912
various code here
and here
The next answer should match the following terms:
1, 4, 20
This sequence is .... and does ....
Требования к цепочке
Чтобы сделать этот вызов более справедливым, существуют ограничения, по которым вы можете связать свои ответы. Эти правила в основном запрещают одному человеку создавать целую ветвь дерева самостоятельно или иметь множество «корневых» узлов.
- Вы не можете цепляться к себе.
- Вы не можете напрямую связать два своих ответа с одним и тем же предком.
- Вы не можете сделать более одного ответа «Уровень 1».
Кроме того, если предок был глубины N, ваш пост должен иметь глубину N + 1, даже если согласен более чем необходимое количество терминов.
счет
Ваша оценка как пользователя - это сумма оценок всех ваших ответов. Оценка одного ответа определяется по следующей формуле:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Эта система подсчета очков должна побуждать пользователей представлять большое количество более глубоких ответов. Короткие ответы предпочтительнее длинных, но глубина оказывает гораздо большее влияние.
Ниже приведен фрагмент стека, который генерирует таблицу лидеров, а также древовидную схему всех ответов. Я хотел бы поблагодарить Мартина Бюттнера и d3noob в качестве источников для большей части этого кода. Вы должны нажать «Полный экран», чтобы увидеть полные результаты.
function answersUrl(t){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+t+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(t){answers.push.apply(answers,t.items),t.has_more?getAnswers():process()}})}function shouldHaveHeading(t){var e=!1,r=t.body_markdown.split("\n");try{e|=/^#/.test(t.body_markdown),e|=["-","="].indexOf(r[1][0])>-1,e&=LANGUAGE_REG.test(t.body_markdown)}catch(a){}return e}function shouldHaveScore(t){var e=!1;try{e|=SIZE_REG.test(t.body_markdown.split("\n")[0])}catch(r){}return e}function getAuthorName(t){return t.owner.display_name}function decodeEntities(t){return $("<textarea>").html(t).text()}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.reverse();var t={},e=[],r=1,a=null,n=1,s=[];answers.forEach(function(t){var r=t.body_markdown.split("\n")[0],a=getAuthorName(t),n=r.match(SEQUENCE_REG)[0];n=n.trim();var o="from A000000";PARENT_REG.test(r)&&(o=r.match(PARENT_REG)[0]),o=o.substring(5).trim(),"A000000"==o&&(o="OEIS");var i="";SEQDATA_REG.test(t.body_markdown)&&(i=t.body_markdown.match(SEQDATA_REG)[1]);for(var u=!0,c=0;c<e.length;++c)u=u&&!(e[c]===n);for(var l=!0,c=0;c<e.length;++c)l=!(!l||e[c]===n||e[c]===n+a||e[c]===o+a);e.push(n),e.push(n+a),e.push(o+a),u&&data.push({name:n,parent:o,term:i+" : ",author:decodeEntities(a),URL:t.share_link}),l&&s.push(t)}),answers.sort(function(t,e){var r=t.body_markdown.split("\n")[0].match(SEQUENCE_REG),a=e.body_markdown.split("\n")[0].match(SEQUENCE_REG);return a>r?-1:r>a?1:void 0}),answers.forEach(function(e){var o=e.body_markdown.split("\n")[0],i=(o.match(NUMBER_REG)[0],(o.match(SIZE_REG)||[0])[0]),u=parseInt((o.match(DEPTH_REG)||[0])[0]).toString(),c=o.match(SEQUENCE_REG)[0],l="from A000000";PARENT_REG.test(o)&&(l=o.match(PARENT_REG)[0]),l=l.substring(5);var d=o.match(LANGUAGE_REG)[1];d.indexOf("]")>0&&(d=d.substring(1,d.indexOf("]")));for(var p=getAuthorName(e),E=!1,h=0;h<s.length;++h)E=E||s[h]===e;if(E){var f=jQuery("#answer-template").html();i!=a&&(n=r),a=i,++r;var m=1024*Math.pow(parseInt(u),.5)/(parseInt(i)+256);f=f.replace("{{SEQUENCE}}",c).replace("{{SEQUENCE}}",c).replace("{{NAME}}",p).replace("{{LANGUAGE}}",d).replace("{{SIZE}}",i).replace("{{DEPTH}}",u).replace("{{LINK}}",e.share_link),f=jQuery(f),jQuery("#answers").append(f),t[p]=t[p]||{lang:d,user:p,size:"0",numanswers:"0",link:e.share_link},t[p].size=(parseFloat(t[p].size)+m).toString(),t[p].numanswers=(parseInt(t[p].numanswers)+1).toString()}});var o=[];for(var i in t)t.hasOwnProperty(i)&&o.push(t[i]);o.sort(function(t,e){return parseFloat(t.size)>parseFloat(e.size)?-1:parseFloat(t.size)<parseFloat(e.size)?1:0});for(var u=0;u<o.length;++u){var c=jQuery("#language-template").html(),i=o[u];c=c.replace("{{RANK}}",u+1+".").replace("{{NAME}}",i.user).replace("{{NUMANSWERS}}",i.numanswers).replace("{{SIZE}}",i.size),c=jQuery(c),jQuery("#languages").append(c)}createTree()}function createTree(){function t(){var t=i.nodes(root).reverse(),e=i.links(t);t.forEach(function(t){t.y=180*t.depth});var r=c.selectAll("g.node").data(t,function(t){return t.id||(t.id=++o)}),a=r.enter().append("g").attr("class","node").attr("transform",function(t){return"translate("+t.y+","+t.x+")"});a.append("a").attr("xlink:href",function(t){return t.URL}).append("circle").attr("r",10).style("fill","#fff"),a.append("text").attr("x",function(){return 0}).attr("y",function(){return 20}).attr("dy",".35em").attr("text-anchor",function(){return"middle"}).text(function(t){return t.term+t.name}).style("fill-opacity",1),a.append("text").attr("x",function(){return 0}).attr("y",function(){return 35}).attr("dy",".35em").attr("text-anchor",function(){return"middle"}).text(function(t){return t.author}).style("fill-opacity",1);var n=c.selectAll("path.link").data(e,function(t){return t.target.id});n.enter().insert("path","g").attr("class","link").attr("d",u)}var e=data.reduce(function(t,e){return t[e.name]=e,t},{}),r=[];data.forEach(function(t){var a=e[t.parent];a?(a.children||(a.children=[])).push(t):r.push(t)});var a={top:20,right:120,bottom:20,left:120},n=3203-a.right-a.left,s=4003-a.top-a.bottom,o=0,i=d3.layout.tree().size([s,n]),u=d3.svg.diagonal().projection(function(t){return[t.y,t.x]}),c=d3.select("body").append("svg").attr("width",n+a.right+a.left).attr("height",s+a.top+a.bottom).append("g").attr("transform","translate("+a.left+","+a.top+")");root=r[0],t(root)}var QUESTION_ID=49223,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",data=[{name:"OEIS",parent:"null",term:"",author:"",URL:"https://oeis.org/"}],answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*,)/,DEPTH_REG=/\d+, A/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/,SEQUENCE_REG=/A\d+/,PARENT_REG=/from\s*A\d+/,SEQDATA_REG=/terms:\s*(?:(?:-)?\d+,\s*)*((?:-)?\d+)/;
body{text-align: left !important}#answer-list{padding: 10px; width: 550px; float: left;}#language-list{padding: 10px; width: 290px; float: left;}table thead{font-weight: bold;}table td{padding: 5px;}.node circle{fill: #fff; stroke: steelblue; stroke-width: 3px;}.node text{font: 12px sans-serif;}.link{fill: none; stroke: #ccc; stroke-width: 2px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script src="http://d3js.org/d3.v3.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="answer-list"> <h2>Sequence List</h2> <table class="answer-list"> <thead> <tr> <td>Sequence</td><td>Author</td><td>Language</td><td>Size</td><td>Depth</td></tr></thead> <tbody id="answers"></tbody> </table></div><div id="language-list"> <h2>Leaderboard</h2> <table class="language-list"> <thead> <tr> <td>Rank</td><td>User</td><td>Answers</td><td>Score</td></tr></thead> <tbody id="languages"></tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr> <td><a href="https://oeis.org/{{SEQUENCE}}">{{SEQUENCE}}</a></td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td>{{DEPTH}}</td><td><a href="{{LINK}}">Link</a> </td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr> <td>{{RANK}}</td><td>{{NAME}}</td><td>{{NUMANSWERS}}</td><td>{{SIZE}}</td></tr></tbody></table>