Bu zorluğun amacı, On-Line Tamsayı Dizileri Ansiklopedisi'nin her seferinde bir diziyi yeniden oluşturmaktır . Merhaba Dünya'nın Evrimi'ne benzer şekilde , her bir cevap önceki bir cevaba bağlıdır.
Zamanla, bu zorluk OEIS dizilerinin bir "soy ağacı" yaratacaktır. Bu ağaca eklemek kolaydır.
- Ağacın herhangi bir derinliğinde N olabilecek önceki bir cevabı bulun.
- Bu cevaplayıcı tarafından üretilen ilk N sayısını belirleyin.
- OEIS'te aynı numaralarla başlayan ve daha önce kullanılmamış bir dizi bulun.
- Yeni bulduğun bu diziyi oluşturmak için bir program yaz.
- Cevabınızı derinlik N + 1 olarak gönderin
Cevabınızın seviyesi puanlamayı etkilediğinden, cevabınızı her zaman mümkün olan en derin seviyede ağaca eklemelisiniz. Cevabınızı ağacın hiçbir yerine sığdıramazsanız, ağacın yeni bir dalını başlatabilir ve cevabınızı derinlik 1 olarak koyabilirsiniz.
Cevap Gereksinimleri
Bir diziyi çıkarmanın birkaç yolu vardır.
İlk seçenek, bir sayı giren bir program veya işlev yazmaktır (STDIN'den veya bir argüman olarak) ve N'ci sayıyı seçtiğiniz sırada döndürür. Dizinin N için tanımlanacağını ve N ve S_N'nin "makul boyutta" olduğunu varsayabilir (taşmalara neden olmaz). Ayrıca, 0 indeksleme, 1 indeksleme veya sekansın OEIS sayfasındaki "ofset" altında listelenen indeksleme gibi makul herhangi bir indekslemeyi kullanabilirsiniz. İlk endeks tarafından üretilen terim, OEIS girişinin ilk terimiyle eşleşmelidir.
İkinci seçenek, bir sayı giren ve dizinin ilk N terimini döndüren bir program veya işlev yazmaktır. Çıktının ilk şartları, OEIS girişinin ilk şartları olmalıdır (ilk birkaç terimi bırakamazsınız). Ardışık terimler, rakam içermeyen karakterlerin rastgele dizeleriyle sınırlandırılmalıdır, bu nedenle 0,1 1.2/3,5;8,11
işe yarar ancak 011235811
sayılmaz.
Üçüncü seçenek, sürekli bir sayı akışı veren bir program oluşturmaktır. İkinci seçeneğe benzer şekilde, ardışık terimler arasında sınırlayıcılar bulunmalıdır.
Cevabınız Stack Snippet ayrıştırmaya yardımcı olması için böyle bir başlık içermelidir :
# [language], [number] bytes, depth [number], A[new sequence] from A[old sequence]
Cevabınız, diziyi oluşturacak kodu ve herhangi bir torunun içermesi gereken ilk birkaç terimi içermelidir. Bu birkaç terimden önce, kelimenin tamterms:
anlamıyla gelmesi gerekir; böylece denetleyici bunları ağaç diyagramının bir parçası olarak kullanabilir. Seçtiğiniz dizinin bir tanımını yazmanız da önerilir.
Gönderiniz bir derinlik 1 cevabıysa ve bu nedenle bir atası yoksa from A[number]
, başlığınızı eklemelisiniz .
İşte bir örnek cevap:
# 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 ....
Zincir Gereksinimleri
Bu meydan okumayı daha adil hale getirmek için, sizin cevaplarınızı zincirleyebileceğiniz kısıtlamalar vardır. Bu kurallar çoğunlukla tek bir kişinin ağacın bütün bir dalını kendi başına oluşturmasını veya bir çok "kök" düğüme sahip olmasını engellemektir.
- Kendine zincir veremezsin.
- Cevaplarınızı iki tanesini doğrudan aynı ataya zincirleyemezsiniz.
- Birden fazla "Seviye 1" cevabı yapamazsınız.
Ayrıca, ata N derinliğinde ise, istenen terim sayısından daha fazla kabul görse bile gönderinizin derinliği N + 1 olmalıdır.
puanlama
Bir kullanıcı olarak puanınız , tüm cevaplarınızın puanlarının toplamıdır . Tek bir cevabın skoru aşağıdaki formüle göre belirlenir:
Answer Score = Sqrt(Depth) * 1024 / (Length + 256)
Bu puanlama sistemi, kullanıcıları çok sayıda daha derin yanıt göndermeye teşvik etmelidir. Daha kısa cevaplar daha uzun cevaplarda tercih edilir, ancak derinlik çok daha büyük bir etkiye sahiptir.
Aşağıda, tüm cevapların bir ağaç şemasının yanı sıra bir lider tablosu oluşturan bir yığın pasajı bulunmaktadır. Martin Büttner ve d3noob'a bu kodun çoğunun kaynağı olduğu için teşekkür ediyorum . Sonuçların tamamını görmek için "Tam ekran" seçeneğini tıklamanız gerekir.
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>