In questa sfida, l'obiettivo è ricreare l' enciclopedia online delle sequenze intere una sequenza alla volta. Simile all'evoluzione di Hello World , ogni risposta dipende da una risposta precedente.
Nel tempo, questa sfida creerà un "albero genealogico" delle sequenze OEIS. È semplice aggiungere a questo albero.
- Trova una risposta precedente, che può trovarsi a qualsiasi profondità N dell'albero.
- Determina i primi N numeri generati dalla sequenza di quella risposta.
- Trova una sequenza in OEIS che inizia con quegli stessi numeri e che non è mai stato usato prima.
- Scrivi un programma per generare questa nuova sequenza che hai appena trovato.
- Invia la tua risposta come profondità N + 1
Poiché il livello della tua risposta influenza il punteggio, devi sempre aggiungere la tua risposta sull'albero al livello più profondo possibile. Se non riesci ad adattare la tua risposta in nessun punto dell'albero, puoi iniziare un nuovo ramo dell'albero e inserire la risposta come profondità 1.
Requisiti di risposta
Esistono alcuni modi per generare una sequenza.
La prima opzione è scrivere un programma o una funzione che inserisca un numero (da STDIN o come argomento) e restituisca l'ennesimo numero nella sequenza scelta. Si può presumere che la sequenza sarà definita per N e che N e S_N siano "dimensionati ragionevolmente" (quindi non causerà overflow). Puoi anche utilizzare qualsiasi indicizzazione ragionevole, come 0 indicizzazione, 1 indicizzazione o l'indicizzazione elencata sotto "offset" nella pagina OEIS della sequenza, che non ha importanza. Il termine prodotto dal primo indice deve corrispondere al primo termine della voce OEIS.
La seconda opzione è scrivere un programma o una funzione che inserisca un numero e restituisca i primi N termini della sequenza. I primi termini dell'output devono essere i primi termini della voce OEIS (non è possibile tralasciare i primi termini). I termini consecutivi devono essere delimitati da stringhe arbitrarie di caratteri non numerici, quindi 0,1 1.2/3,5;8,11
funziona ma 011235811
non conta.
La terza opzione è quella di creare un programma che genera un flusso continuo di numeri. Analogamente alla seconda opzione, devono esserci delimitatori tra termini consecutivi.
La tua risposta dovrebbe contenere un'intestazione come questa per aiutare l'analisi dello snippet di stack:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
La tua risposta dovrebbe contenere il codice per generare la sequenza, insieme ai primi termini che dovranno contenere tutti i discendenti. Questi pochi termini dovrebbero essere preceduti dalla parola esatta interms:
modo che il controller possa usarli come parte del diagramma ad albero. Si consiglia inoltre di scrivere una descrizione della sequenza scelta.
Se il tuo post è una risposta di profondità 1 e quindi non ha antenati, dovresti semplicemente ometterlo from A[number]
nella tua intestazione.
Ecco una risposta di esempio:
# 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 ....
Requisiti per il concatenamento
Al fine di rendere questa sfida più giusta, ci sono delle restrizioni su quali risposte puoi incatenare alle tue. Queste regole servono principalmente a impedire a una sola persona di creare un intero ramo dell'albero da solo o di possedere molti nodi "root".
- Non puoi incatenare a te stesso.
- Non puoi incatenare direttamente due delle tue risposte allo stesso antenato.
- Non è possibile effettuare più di una risposta "Livello 1".
Inoltre, se l'antenato aveva una profondità N, il tuo post deve avere una profondità N + 1, anche se è d'accordo un numero di termini superiore a quello richiesto.
punteggio
Il tuo punteggio come utente è la somma dei punteggi di tutte le tue risposte. Il punteggio di una singola risposta è determinato dalla seguente formula:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Questo sistema di punteggio dovrebbe incoraggiare gli utenti a inviare un gran numero di risposte più profonde. Le risposte più brevi sono preferite rispetto alle risposte più lunghe, ma la profondità ha un'influenza molto maggiore.
Di seguito è riportato uno snippet di stack che genera una classifica e un diagramma ad albero di tutte le risposte. Vorrei ringraziare Martin Büttner e d3noob come fonti per gran parte di questo codice. Dovresti fare clic su "Schermo intero" per vedere i risultati completi.
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>