Neste desafio, o objetivo é recriar a Enciclopédia On-line de Sequências Inteiras, uma sequência de cada vez. Semelhante à evolução do Hello World , cada resposta depende de uma resposta anterior.
Com o tempo, esse desafio criará uma "árvore genealógica" das sequências OEIS. É simples adicionar a esta árvore.
- Encontre uma resposta anterior, que pode estar em qualquer profundidade N da árvore.
- Determine os primeiros N números gerados pela sequência dessa resposta.
- Encontre uma sequência no OEIS que comece com os mesmos números e que não tenha sido usada antes.
- Escreva um programa para gerar essa nova sequência que você acabou de encontrar.
- Envie sua resposta como profundidade N + 1
Como o nível da sua resposta influencia a pontuação, você deve sempre adicioná-la à árvore no nível mais profundo possível. Se você não conseguir encaixar sua resposta em nenhum lugar da árvore, inicie um novo ramo da árvore e coloque-a em profundidade 1.
Requisitos de resposta
Existem algumas maneiras de gerar uma sequência.
A primeira opção é escrever um programa ou função que insira um número (de STDIN ou como argumento) e retorne o enésimo número na sequência escolhida. Você pode supor que a sequência será definida para N e que N e S_N são "de tamanho razoável" (para não causar estouros). Você também pode usar qualquer indexação razoável, como 0, 1 ou a indexação listada em "deslocamento" na página OEIS da sequência, que não importa. O termo produzido pelo primeiro índice deve corresponder ao primeiro termo da entrada OEIS.
A segunda opção é escrever um programa ou função que insira um número e retorne os primeiros N termos da sequência. Os primeiros termos da saída devem ser os primeiros da entrada OEIS (você não pode deixar de lado os primeiros termos). Termos consecutivos devem ser delimitados por seqüências arbitrárias de caracteres que não sejam dígitos, para que 0,1 1.2/3,5;8,11
funcione, mas 011235811
não conte.
A terceira opção é criar um programa que produz um fluxo contínuo de números. Da mesma forma que a segunda opção, deve haver delimitadores entre termos consecutivos.
Sua resposta deve conter um cabeçalho como este para ajudar na análise do Snippet de pilha:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
Sua resposta deve conter o código para gerar a sequência, juntamente com os primeiros termos que qualquer descendente precisará conter. Esses poucos termos devem ser precedidos pela palavra exataterms:
para que o controlador possa usá-los como parte do diagrama em árvore. Também é recomendável escrever uma descrição da sequência que você escolheu.
Se a sua postagem for uma resposta profunda 1 e, portanto, não tiver um ancestral, você deve simplesmente omitir a from A[number]
no cabeçalho.
Aqui está um exemplo de resposta:
# 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 ....
Requisitos de encadeamento
Para tornar esse desafio mais justo, existem restrições nas quais você pode encadear as suas respostas. Essas regras são principalmente para impedir que uma única pessoa crie um ramo inteiro da árvore sozinha ou possua muitos nós "raiz".
- Você não pode se acorrentar.
- Você não pode encadear diretamente duas de suas respostas para o mesmo ancestral.
- Você não pode fazer mais de uma resposta "Nível 1".
Além disso, se o ancestral tiver profundidade N, sua postagem deverá ter profundidade N + 1, mesmo que mais do que o número necessário de termos esteja de acordo.
Pontuação
Sua pontuação como usuário é a soma das pontuações de todas as suas respostas. A pontuação de uma única resposta é determinada pela seguinte fórmula:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Esse sistema de pontuação deve incentivar os usuários a enviar um grande número de respostas mais profundas. As respostas mais curtas são preferidas às respostas mais longas, mas a profundidade tem uma influência muito maior.
Abaixo está um trecho de pilha que gera uma tabela de classificação e um diagrama em árvore de todas as respostas. Gostaria de agradecer a Martin Büttner e d3noob como fontes de grande parte desse código. Você deve clicar em "Tela cheia" para ver os resultados completos.
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>