Trong thử thách này, mục tiêu là tái tạo lại bách khoa toàn thư trực tuyến về chuỗi số nguyên một chuỗi một lần. Tương tự như Evolution of Hello World , mỗi câu trả lời phụ thuộc vào câu trả lời trước đó.
Theo thời gian, thử thách này sẽ tạo ra một "cây gia đình" của các chuỗi OEIS. Nó là đơn giản để thêm vào cây này.
- Tìm một câu trả lời trước đó, có thể ở bất kỳ độ sâu N nào của cây.
- Xác định N số đầu tiên được tạo bởi chuỗi câu trả lời đó.
- Tìm một chuỗi trong OEIS bắt đầu bằng các số đó và chưa được sử dụng trước đó.
- Viết chương trình để tạo chuỗi mới này mà bạn vừa tìm thấy.
- Gửi câu trả lời của bạn dưới dạng độ sâu N + 1
Vì mức độ câu trả lời của bạn ảnh hưởng đến việc ghi điểm, bạn nên luôn luôn thêm câu trả lời của mình lên cây ở mức sâu nhất có thể. Nếu bạn không thể đặt câu trả lời của mình ở bất cứ đâu trên cây, bạn có thể bắt đầu một nhánh mới của cây và đặt câu trả lời của bạn ở độ sâu 1.
Trả lời yêu cầu
Có một vài cách để xuất một chuỗi.
Tùy chọn đầu tiên là viết chương trình hoặc hàm nhập một số (từ STDIN hoặc làm đối số) và trả về số thứ N trong chuỗi đã chọn của bạn. Bạn có thể giả sử rằng chuỗi sẽ được xác định cho N và N và S_N là "có kích thước hợp lý" (vì vậy nó sẽ không gây ra tràn). Bạn cũng có thể sử dụng bất kỳ lập chỉ mục hợp lý nào, chẳng hạn như lập chỉ mục 0, lập chỉ mục 1 hoặc lập chỉ mục được liệt kê trong phần "bù" trên trang OEIS của chuỗi, không thành vấn đề. Thuật ngữ được tạo bởi chỉ mục đầu tiên phải khớp với thuật ngữ đầu tiên của mục nhập OEIS.
Tùy chọn thứ hai là viết một chương trình hoặc hàm nhập một số và trả về N điều khoản đầu tiên của chuỗi. Các điều khoản đầu tiên của đầu ra phải là các điều khoản đầu tiên của mục nhập OEIS (bạn không thể bỏ qua một vài điều khoản đầu tiên). Các thuật ngữ liên tiếp phải được phân định bằng các chuỗi ký tự không có chữ số tùy ý, do đó 0,1 1.2/3,5;8,11
hoạt động nhưng 011235811
không được tính.
Tùy chọn thứ ba là tạo ra một chương trình tạo ra một chuỗi số liên tục. Tương tự như tùy chọn thứ hai, phải có các dấu phân cách giữa các số hạng liên tiếp.
Câu trả lời của bạn nên chứa một tiêu đề như thế này để hỗ trợ phân tích cú pháp Stack Snippet:
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
Câu trả lời của bạn nên chứa mã để tạo chuỗi, cùng với một vài thuật ngữ đầu tiên mà bất kỳ hậu duệ nào cũng cần có. Một vài thuật ngữ nên được đi trước bởi từ chính xácterms:
để bộ điều khiển có thể sử dụng chúng như một phần của sơ đồ cây. Bạn cũng nên viết một mô tả về trình tự bạn đã chọn.
Nếu bài đăng của bạn là câu trả lời sâu 1 và do đó không có tổ tiên, bạn chỉ cần bỏ qua phần from A[number]
tiêu đề.
Đây là một câu trả lời ví dụ:
# 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 ....
Yêu cầu xích
Để làm cho thách thức này công bằng hơn, có những hạn chế về câu trả lời mà bạn có thể xâu chuỗi câu trả lời của bạn. Các quy tắc này chủ yếu là để ngăn chặn một người tự tạo một nhánh của cây hoặc sở hữu nhiều nút "gốc".
- Bạn không thể xâu chuỗi với chính mình.
- Bạn không thể trực tiếp xâu chuỗi hai câu trả lời của mình cho cùng một tổ tiên.
- Bạn không thể thực hiện nhiều hơn một câu trả lời "Cấp 1".
Ngoài ra, nếu tổ tiên có độ sâu N, bài đăng của bạn phải có độ sâu N + 1, ngay cả khi nhiều hơn số lượng điều khoản yêu cầu đồng ý.
Chấm điểm
Điểm của bạn với tư cách là người dùng là tổng điểm của tất cả các câu trả lời của bạn. Điểm của một câu trả lời được xác định theo công thức sau:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Hệ thống tính điểm này nên khuyến khích người dùng gửi một số lượng lớn câu trả lời sâu hơn. Câu trả lời ngắn hơn được ưa thích hơn câu trả lời dài hơn, nhưng độ sâu có ảnh hưởng lớn hơn nhiều.
Dưới đây là một đoạn ngăn xếp tạo ra bảng thành tích cũng như sơ đồ cây của tất cả các câu trả lời. Tôi muốn cảm ơn Martin Büttner và d3noob là nguồn cho rất nhiều mã này. Bạn nên nhấp vào "Toàn màn hình" để xem kết quả hoàn chỉnh.
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>