ในความท้าทายนี้เป้าหมายคือการสร้างสารานุกรมออนไลน์ของลำดับจำนวนหนึ่งในแต่ละครั้ง คล้ายกับวิวัฒนาการของ Hello Worldแต่ละคำตอบขึ้นอยู่กับคำตอบก่อนหน้า
เมื่อเวลาผ่านไปความท้าทายนี้จะสร้าง "ลำดับวงศ์ตระกูล" ของลำดับ OEIS มันง่ายที่จะเพิ่มไปยังต้นไม้ต้นนี้
- ค้นหาคำตอบก่อนหน้าซึ่งสามารถอยู่ที่ระดับความลึก N ของต้นไม้
- กำหนดหมายเลข N แรกที่สร้างโดยลำดับของคำตอบนั้น
- ค้นหาลำดับใน OEIS ที่เริ่มต้นด้วยหมายเลขเดียวกันและไม่เคยใช้มาก่อน
- เขียนโปรแกรมเพื่อสร้างลำดับใหม่ที่คุณเพิ่งพบ
- ส่งคำตอบของคุณในเชิงลึก N + 1
เนื่องจากระดับคำตอบของคุณมีผลต่อการให้คะแนนคุณควรเพิ่มคำตอบลงบนต้นไม้ในระดับที่ลึกที่สุดเท่าที่จะทำได้ หากคุณไม่สามารถหาคำตอบได้ทุกที่บนต้นไม้คุณสามารถเริ่มต้นสาขาใหม่ของต้นไม้และตั้งคำตอบให้ลึก 1
ตอบข้อกำหนด
มีสองสามวิธีในการส่งออกลำดับ
ตัวเลือกแรกคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ป้อนตัวเลข (จาก STDIN หรือเป็นอาร์กิวเมนต์) และส่งกลับหมายเลข Nth ในลำดับที่คุณเลือก คุณสามารถสันนิษฐานได้ว่าลำดับจะถูกกำหนดสำหรับ N และ N และ S_N นั้น "มีขนาดพอสมควร" (ดังนั้นมันจะไม่ทำให้เกิดการโอเวอร์โฟลว์) คุณสามารถใช้การจัดทำดัชนีที่สมเหตุสมผลเช่น 0 การจัดทำดัชนีการจัดทำดัชนี 1 รายการหรือการจัดทำดัชนีที่อยู่ภายใต้ "ออฟเซ็ต" ในหน้า OEIS ของลำดับที่ไม่สำคัญ คำที่สร้างโดยดัชนีแรกจะต้องตรงกับคำแรกของรายการ OEIS
ตัวเลือกที่สองคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ป้อนตัวเลขและส่งกลับเงื่อนไข N แรกของลำดับ ข้อกำหนดแรกของผลลัพธ์ต้องเป็นเงื่อนไขแรกของรายการ OEIS (คุณไม่สามารถละทิ้งเงื่อนไขสองสามข้อแรก) คำที่ต่อเนื่องกันจะต้องถูกคั่นด้วยสตริงที่ไม่ใช่ตัวอักขระหลักดังนั้น0,1 1.2/3,5;8,11
ทำงานได้ แต่011235811
ไม่นับ
ตัวเลือกที่สามคือการสร้างโปรแกรมที่ส่งออกกระแสตัวเลขอย่างต่อเนื่อง เช่นเดียวกับตัวเลือกที่สองจะต้องมีตัวคั่นระหว่างคำที่ต่อเนื่องกัน
คำตอบของคุณควรมีส่วนหัวเช่นนี้เพื่อช่วยในการแยกส่วนของการแยกตัวอย่างขนาดเล็ก:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
คำตอบของคุณควรมีรหัสเพื่อสร้างลำดับพร้อมกับคำสองสามคำแรกที่ทายาทใด ๆ จะต้องมี คำบางคำเหล่านี้ควรอยู่ข้างหน้าด้วยคำที่ถูกต้องterms:
เพื่อให้คอนโทรลเลอร์สามารถใช้เป็นส่วนหนึ่งของแผนผังไดอะแกรม ขอแนะนำให้เขียนคำอธิบายของลำดับที่คุณเลือกด้วย
หากโพสต์ของคุณมีความลึก 1 คำตอบดังนั้นจึงไม่มีบรรพบุรุษคุณควรละเว้นfrom A[number]
ในส่วนหัวของคุณ
นี่คือคำตอบตัวอย่าง:
# 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 ....
ข้อกำหนดการโยง
เพื่อให้การท้าทายนี้เป็นไปอย่างยุติธรรมยิ่งขึ้นมีข้อ จำกัด ในการตอบคำถามที่คุณสามารถเชื่อมโยงคุณได้ กฎเหล่านี้ส่วนใหญ่เพื่อป้องกันบุคคลเดียวจากการสร้างทั้งกิ่งของต้นไม้ด้วยตนเองหรือมีโหนด "รูท" จำนวนมาก
- คุณไม่สามารถผูกมัดตัวเอง
- คุณไม่สามารถโยงคำตอบของคุณไปยังบรรพบุรุษเดียวกันได้โดยตรง
- คุณไม่สามารถตอบได้มากกว่าหนึ่งคำตอบ "ระดับ 1"
นอกจากนี้หากบรรพบุรุษของคุณมีความลึก N โพสต์ของคุณจะต้องมีความลึก N + 1 แม้ว่าจะมีมากกว่าจำนวนคำศัพท์ที่ต้องการก็ตาม
เกณฑ์การให้คะแนน
คะแนนของคุณในฐานะผู้ใช้คือผลรวมของคะแนนคำตอบทั้งหมดของคุณ คะแนนของคำตอบเดียวถูกกำหนดโดยสูตรต่อไปนี้:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
ระบบการให้คะแนนนี้ควรส่งเสริมให้ผู้ใช้ส่งคำตอบที่ลึกซึ้งยิ่งขึ้น คำตอบที่สั้นกว่าเป็นที่ต้องการมากกว่าคำตอบที่ยาวกว่า แต่ความลึกมีอิทธิพลมากกว่า
ด้านล่างเป็นตัวอย่างสแต็กที่สร้างกระดานผู้นำรวมทั้งแผนผังต้นไม้ของคำตอบทั้งหมด ฉันขอขอบคุณMartin Büttnerและd3noobเป็นแหล่งข้อมูลสำหรับรหัสนี้มากมาย คุณควรคลิก "เต็มหน้าจอ" เพื่อดูผลลัพธ์ที่สมบูรณ์
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>