En este desafío, el objetivo es recrear la Enciclopedia en línea de secuencias enteras una secuencia a la vez. Similar a la evolución de Hello World , cada respuesta depende de una respuesta previa.
Con el tiempo, este desafío creará un "árbol genealógico" de las secuencias OEIS. Es simple agregar a este árbol.
- Encuentre una respuesta previa, que puede estar a cualquier profundidad N del árbol.
- Determine los primeros N números generados por la secuencia de esa respuesta.
- Encuentre una secuencia en OEIS que comience con esos mismos números y que no se haya usado antes.
- Escribe un programa para generar esta nueva secuencia que acabas de encontrar.
- Envíe su respuesta como profundidad N + 1
Dado que el nivel de su respuesta influye en la puntuación, siempre debe agregar su respuesta en el árbol en el nivel más profundo posible. Si no puede ajustar su respuesta en ningún lugar del árbol, puede comenzar una nueva rama del árbol y poner su respuesta como profundidad 1.
Requisitos de respuesta
Hay algunas formas de generar una secuencia.
La primera opción es escribir un programa o función que ingrese un número (desde STDIN o como argumento) y devuelva el enésimo número en la secuencia elegida. Puede suponer que la secuencia se definirá para N y que N y S_N tienen un "tamaño razonable" (por lo que no provocará desbordamientos). También puede usar cualquier indexación razonable, como 0 indexación, 1 indexación o la indexación que aparece en "desplazamiento" en la página OEIS de la secuencia, eso no importa. El término producido por el primer índice debe coincidir con el primer término de la entrada OEIS.
La segunda opción es escribir un programa o función que ingrese un número y devuelva los primeros N términos de la secuencia. Los primeros términos de la salida deben ser los primeros términos de la entrada OEIS (no puede omitir los primeros términos). Los términos consecutivos deben estar delimitados por cadenas arbitrarias de caracteres que no sean dígitos, por lo que 0,1 1.2/3,5;8,11
funciona pero 011235811
no cuenta.
La tercera opción es crear un programa que genere un flujo continuo de números. De manera similar a la segunda opción, debe haber delimitadores entre términos consecutivos.
Su respuesta debe contener un encabezado como este para ayudar al análisis de Stack Snippet:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
Su respuesta debe contener el código para generar la secuencia, junto con los primeros términos que cualquier descendiente deberá contener. Estos pocos términos deben ir precedidos de la palabra exactaterms:
para que el controlador pueda usarlos como parte del diagrama de árbol. También se recomienda escribir una descripción de la secuencia que eligió.
Si su publicación es una respuesta de profundidad 1 y, por lo tanto, no tiene antepasado, simplemente debe omitir la from A[number]
en su encabezado.
Aquí hay una respuesta de ejemplo:
# 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 encadenamiento
Para que este desafío sea más justo, existen restricciones sobre las respuestas a las que puede encadenar las suyas. Estas reglas son principalmente para evitar que una sola persona cree una rama completa del árbol por sí misma o sea propietaria de muchos nodos "raíz".
- No puedes encadenarte a ti mismo.
- No puede encadenar directamente dos de sus respuestas al mismo antepasado.
- No puede hacer más de una respuesta de "Nivel 1".
Además, si el antepasado tenía una profundidad N, tu publicación debe tener una profundidad N + 1, incluso si está de acuerdo con más de la cantidad requerida de términos.
Puntuación
Su puntaje como usuario es la suma de los puntajes de todas sus respuestas. La puntuación de una sola respuesta está determinada por la siguiente fórmula:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Este sistema de puntuación debería alentar a los usuarios a enviar una gran cantidad de respuestas más profundas. Se prefieren respuestas más cortas que respuestas más largas, pero la profundidad tiene una influencia mucho mayor.
A continuación se muestra un fragmento de pila que genera una tabla de clasificación, así como un diagrama de árbol de todas las respuestas. Me gustaría agradecer a Martin Büttner y d3noob como las fuentes de gran parte de este código. Debe hacer clic en "Pantalla completa" para ver los 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>