У цьому виклику мета полягає у відтворенні он-лайн енциклопедії цілих послідовностей по одній послідовності. Подібно до еволюції 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>