Dans ce défi, l’objectif est de recréer l’ Encyclopédie en ligne de séquences entières, une séquence à la fois. Semblable à l' évolution de Hello World , chaque réponse dépend d'une réponse précédente.
Avec le temps, ce défi créera un "arbre généalogique" des séquences OEIS. Il est simple d'ajouter à cet arbre.
- Trouver une réponse précédente, qui peut être à n'importe quelle profondeur N de l'arbre.
- Déterminez les N premiers nombres générés par la séquence de cette réponse.
- Trouvez une séquence dans OEIS qui commence par ces mêmes numéros et qui n'a pas encore été utilisée.
- Ecrivez un programme pour générer cette nouvelle séquence que vous venez de trouver.
- Soumettez votre réponse en profondeur N + 1
Étant donné que le niveau de votre réponse influence le pointage, vous devez toujours ajouter votre réponse sur l’arbre au niveau le plus profond possible. Si vous ne pouvez adapter votre réponse à aucun endroit de l’arbre, vous pouvez créer une nouvelle branche de l’arbre et indiquer votre réponse en profondeur 1.
Réponse requise
Il existe plusieurs façons de générer une séquence.
La première option consiste à écrire un programme ou une fonction qui entre un nombre (à partir de STDIN ou sous forme d'argument) et renvoie le Nième nombre dans la séquence choisie. Vous pouvez supposer que la séquence sera définie pour N et que N et S_N auront une "taille raisonnable" (pour éviter les débordements). Vous pouvez également utiliser une indexation raisonnable, telle qu'une indexation 0, une indexation ou l'indexation répertoriée sous "offset" sur la page OEIS de la séquence, cela n'a pas d'importance. Le terme produit par le premier index doit correspondre au premier terme de l'entrée OEIS.
La deuxième option consiste à écrire un programme ou une fonction qui entre un nombre et renvoie les N premiers termes de la séquence. Les premiers termes de la sortie doivent être les premiers termes de l'entrée OEIS (vous ne pouvez pas laisser les premiers termes). Les termes consécutifs doivent être délimités par des chaînes arbitraires de caractères non numériques, donc 0,1 1.2/3,5;8,11
fonctionne mais 011235811
ne compte pas.
La troisième option consiste à créer un programme qui génère un flux continu de nombres. De même que pour la deuxième option, il doit y avoir des délimiteurs entre les termes consécutifs.
Votre réponse devrait contenir un en-tête comme celui-ci pour faciliter l'analyse syntaxique de Stack Snippet:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
Votre réponse doit contenir le code pour générer la séquence, ainsi que les premiers termes que tout descendant devra contenir. Ces quelques termes doivent être précédés du mot exactterms:
pour que le contrôleur puisse les utiliser dans l’arborescence. Il est également recommandé de rédiger une description de la séquence choisie.
Si votre message répond à la profondeur 1 et n'a donc aucun ancêtre, vous devez simplement omettre la from A[number]
dans votre en-tête.
Voici un exemple de réponse:
# 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 ....
Chaînage requis
Afin de rendre ce défi plus équitable, il existe des restrictions sur les réponses auxquelles vous pouvez chaîner les vôtres. Ces règles visent principalement à empêcher une seule personne de créer seule une branche de l’arbre ou de posséder un grand nombre de nœuds «racine».
- Vous ne pouvez pas vous enchaîner.
- Vous ne pouvez pas relier directement deux de vos réponses au même ancêtre.
- Vous ne pouvez pas donner plus d’une réponse de "Niveau 1".
De plus, si l'ancêtre était de profondeur N, votre message doit avoir une profondeur N + 1, même si plus que le nombre de termes requis concordent.
Notation
Votre score en tant qu'utilisateur est la somme des scores de toutes vos réponses. Le score d'une réponse unique est déterminé par la formule suivante:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Ce système de notation devrait encourager les utilisateurs à soumettre un grand nombre de réponses plus approfondies. Les réponses plus courtes sont préférées aux réponses plus longues, mais la profondeur a une influence beaucoup plus grande.
Ci-dessous se trouve un extrait de pile qui génère un classement ainsi qu’un diagramme en arbre de toutes les réponses. Je voudrais remercier Martin Büttner et d3noob en tant que sources de ce code. Vous devez cliquer sur "Plein écran" pour voir les résultats complets.
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>