In dieser Herausforderung besteht das Ziel darin, die Online -Enzyklopädie ganzzahliger Sequenzen nacheinander zu erstellen . Ähnlich wie bei der Evolution von Hello World hängt jede Antwort von einer vorherigen Antwort ab.
Mit der Zeit wird diese Herausforderung einen "Stammbaum" der OEIS-Sequenzen erzeugen. Es ist einfach, diesen Baum zu ergänzen.
- Finden Sie eine vorherige Antwort, die sich in jeder Tiefe N des Baums befinden kann.
- Bestimmen Sie die ersten N Zahlen, die durch die Sequenz dieser Antwort generiert wurden.
- Suchen Sie in OEIS eine Sequenz, die mit denselben Nummern beginnt und die zuvor noch nicht verwendet wurde.
- Schreiben Sie ein Programm, um diese neue Sequenz zu generieren, die Sie gerade gefunden haben.
- Senden Sie Ihre Antwort als Tiefe N + 1
Da die Stufe Ihrer Antwort die Punktzahl beeinflusst, sollten Sie Ihre Antwort immer auf der tiefstmöglichen Stufe in den Baum einfügen. Wenn Sie Ihre Antwort an keiner Stelle in den Baum einfügen können, können Sie einen neuen Zweig des Baums beginnen und Ihre Antwort als Tiefe 1 eingeben.
Anforderungen beantworten
Es gibt verschiedene Möglichkeiten, eine Sequenz auszugeben.
Die erste Möglichkeit besteht darin, ein Programm oder eine Funktion zu schreiben, die eine Zahl (von STDIN oder als Argument) eingibt und die N-te Zahl in der von Ihnen gewählten Reihenfolge zurückgibt. Sie können davon ausgehen, dass die Sequenz für N definiert wird und dass N und S_N eine "angemessene Größe" haben (damit es nicht zu Überläufen kommt). Sie können auch jede sinnvolle Indizierung verwenden, z. B. 0-Indizierung, 1-Indizierung oder die unter "Offset" auf der OEIS-Seite der Sequenz aufgeführte Indizierung, die keine Rolle spielt. Der vom ersten Index erzeugte Begriff muss mit dem ersten Begriff des OEIS-Eintrags übereinstimmen.
Die zweite Möglichkeit besteht darin, ein Programm oder eine Funktion zu schreiben, die eine Zahl eingibt und die ersten N Terme der Sequenz zurückgibt. Die ersten Ausdrücke der Ausgabe müssen die ersten Ausdrücke des OEIS-Eintrags sein (Sie können die ersten Ausdrücke nicht weglassen). Aufeinanderfolgende Ausdrücke müssen durch beliebige Zeichenfolgen mit nichtstelligen Zeichen begrenzt werden. Dies 0,1 1.2/3,5;8,11
funktioniert, zählt 011235811
jedoch nicht.
Die dritte Möglichkeit besteht darin, ein Programm zu erstellen, das einen kontinuierlichen Zahlenstrom ausgibt. Ähnlich wie bei der zweiten Option müssen Trennzeichen zwischen aufeinanderfolgenden Begriffen vorhanden sein.
Ihre Antwort sollte einen Header wie diesen enthalten, um das Analysieren von Stack-Snippets zu erleichtern:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
Ihre Antwort sollte den Code zum Generieren der Sequenz enthalten, zusammen mit den ersten Begriffen, die Nachkommen enthalten müssen. Vorterms:
diesen wenigen Begriffen sollte das genaue Wort stehen, damit der Controller sie als Teil des Baumdiagramms verwenden kann. Es wird auch empfohlen, eine Beschreibung der von Ihnen gewählten Sequenz zu verfassen.
Wenn Ihr Beitrag eine Antwort der Tiefe 1 ist und daher keinen Vorfahren hat, sollten Sie das from A[number]
in Ihrem Header einfach weglassen .
Hier ist eine Beispielantwort:
# 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 ....
Verkettungsanforderungen
Um diese Herausforderung fairer zu gestalten, gibt es Einschränkungen, an welche Antworten Sie Ihre verketten können. Diese Regeln dienen hauptsächlich dazu, zu verhindern, dass eine einzelne Person einen ganzen Zweig des Baums selbst erstellt oder viele "Wurzel" -Knoten besitzt.
- Sie können nicht an sich selbst ketten.
- Sie können nicht zwei Ihrer Antworten direkt an denselben Vorfahren ketten.
- Sie können nicht mehr als eine "Level 1" -Antwort geben.
Wenn der Vorfahr Tiefe N hat, muss Ihr Beitrag Tiefe N + 1 haben, auch wenn mehr als die erforderliche Anzahl von Begriffen übereinstimmt.
Wertung
Ihre Punktzahl als Benutzer ist die Summe der Punkte aller Ihrer Antworten. Die Punktzahl einer einzelnen Antwort wird durch die folgende Formel bestimmt:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Dieses Bewertungssystem sollte Benutzer dazu ermutigen, eine große Anzahl tiefer gehender Antworten einzureichen. Kürzere Antworten werden längeren Antworten vorgezogen, aber die Tiefe hat einen viel größeren Einfluss.
Unten finden Sie einen Stapelausschnitt, der eine Rangliste sowie ein Baumdiagramm aller Antworten generiert. Ich möchte Martin Büttner und d3noob als Quellen für viel Code danken . Sie sollten auf "Vollbild" klicken, um die vollständigen Ergebnisse anzuzeigen.
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>