Bu zorluk aşağı yukarı geleneksel bir kod golfü gibi davranacaktır . Tek fark, cevapları karakter veya bayt sayısına göre puanlamak yerine, kullanıcıların yorumlarda farklı karakterlere ağırlık atayacağı ve en düşük kümülatif ağırlığa sahip programın kazanacağıdır.
Meydan okuma
Göreviniz, dize alan ve ilk karakterin merkezde başladığı ve sonraki karakterlerin en son yerleştirilen karakter grubuna dikey boş alanları kapladığı bir elmas şekli basan bir program yazmaktır. Dolgu için boşluklar ( ) kullanılacaktır.
Örneğin, girdi CAT
üretmek
T
TAT
TACAT
TAT
T
ve ()
üretecekti
)
)()
)
ve desserts
üretecekti
s
sts
strts
strerts
streserts
stressserts
stressesserts
stressedesserts
stressed desserts
stressedesserts
stressesserts
stressserts
streserts
strerts
strts
sts
s
ve 9
üretecekti 9
.
ayrıntılar
Kod yalnızca yazdırılabilir ASCII ve yeni satırlar içerebilir . (Aşağıdaki nedenlere bakın.)
Giriş / çıkış stdin / stdout yoluyla olmalı veya mümkün değilse benzer alternatifler kullanmalıdır.
Giriş dizesinin yalnızca yazdırılabilir ASCII (boşluk dahil) içerdiğini varsayabilirsiniz.
Baklava deseninde herhangi bir kısmını içermeyen gelen boşluklar kolonları olan değil çıkış izin verdi. Sondaki boşlukların herhangi bir miktarına ve kombinasyonuna izin verilir.
İsteğe bağlı olarak çıktıda sondaki bir satırsonu olabilir.
Cevabınızı istediğiniz kadar düzenleyebilirsiniz.
puanlama
Tüm kodlar yalnızca yeni satırlar ve yazdırılabilir 95 ASCII karakteri kullanılarak yazılmalıdır:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Stack Exchange bunları kod bloklarında boşluk olarak oluşturduğu için sekmelere izin verilmez.)
Bu 96 karakterin her biri, onunla ilişkili bir ağırlık değerine sahiptir . Varsayılan olarak, tüm ağırlıklar 97'dir.
Bir programın puanı, karakterlerinin her biri için ağırlık değerlerinin toplamıdır. Örneğin, program print(4)
ve ağırlığı 4
70 olsaydı, ancak diğer her şey için değişmemiş olsaydı, skor olurdu 749 = 97+97+97+97+97+97+70+97
.
Bu sorudaki etkinlik neredeyse hiçbir şeye yerleşmediğinde, en düşük puanlı başvuru kazanır. Muhtemelen olası bir beraberlik durumunda, kazananlar en yüksek oyu alan cevaba gider.
Ağırlıkları Değiştirme
Yanıtlamış olsun ya da olmasın, her kullanıcı 96 karakterden birinin ağırlığını 1'den 96'ya kadar benzersiz bir değere değiştirebilir. Bunu yapmak için, formun bu sorusuna bir yorum ekleyin #### W -> C ####
; burada W, 1 ila 96 ve C karakterdir (kendisi gibi, tırnak işareti yok, ters tırnak yok). Yığın Değişimi arka arkaya 3 boşluk sıkıştırdığından \n
, yeni satırlar ve \s
boşluk için C yerine kullanın . Yukarıdaki print(4)
örnek yorumda bulunabilirdi #### 70 -> 4 ####
.
Her kullanıcı böyle bir yorum yapabilir ve yalnızca karakter ve ağırlık değeri daha önce yapılmış bir açıklamada kullanılmamışsa geçerlidir. Sonuç olarak #### W -> C ####
, hepsi farklı kullanıcılardan, hepsi farklı karakterlere farklı ağırlıklar atanmış 96 yorum olabilir .
Kullanıcılar istedikleri takdirde kendi yorumlarını silebilirler, ya da başka biri tekrar yorum yapana kadar karakterlerinin ağırlığını 97'ye geri yükleyebilirler. Onları da düzenleyebilirler. Farklı kullanıcılar / ağırlıklar / karakterler hakkındaki kurallara uymayan yorumlar silinmeli veya "yapıcı değil" olarak işaretlenmelidir. Kurallar ve diğer şeyler hakkında genel yorumlar iyidir ancak asgari düzeyde tutulmalıdır.
Bu yığın snippet'i bu sorunun resmi lider tablosu. Her çalıştırıldığında yorumlardan ağırlıkları toplayarak tüm gönderimler için puanları otomatik olarak hesaplar. Bağları idare etmez. Bir programın sahip olacağı puanı kontrol etmek için de kullanabilirsiniz.
right-click -> Open link in new tab
Bağlantılar için muhtemelen gerekecek .
function compute(){var e=computeScore($("#code").val());$("#score").val(e==-1?"Invalid characters":e)}function computeScore(e){var t=0;for(var n=0;n<e.length;n++){if(weights.hasOwnProperty(e[n])){t+=weights[e[n]]}else{return-1}}return t}function htmlDecode(e){var t=document.createElement("div");t.innerHTML=e;return t.childNodes.length===0?"":t.childNodes[0].nodeValue}function addLeaderboard(){validAnswers.sort(function(e,t){return e.score>t.score});var e=1;var t="";for(var n=0;n<validAnswers.length;n++){var r=validAnswers[n];t+="<tr><td>"+e+"</td><td><a href='"+r.link+"'>"+r.owner.display_name+"</a></td><td>"+r.score+"</td><td>"+r.length+"</td></tr>";if(n+1<validAnswers.length&&validAnswers[n+1].score>r.score){e++}}$("#leaderboard").append(t)}function addAnalytics(){var e="";for(var t in weights){if(weights.hasOwnProperty(t)&&weights[t]!=defaultWeight){e+=(t=="\n"?"\\n":t)+"="+weights[t]+" "}}$("#weights").val(e);var n="";for(var t in usedChars){if(usedChars.hasOwnProperty(t)&&usedChars[t]==false){n+=t=="\n"?"\\n":t}}$("#unusedc").val(n);var r="";for(var t in usedWeights){if(usedWeights.hasOwnProperty(t)&&usedWeights[t]==false){r+=t+" "}}$("#unusedw").val(r);var i="";if(invalidComments.length>0){for(var s=0;s<invalidComments.length;s++){var o=invalidComments[s];i+="<a href='#"+o.link+"'>"+o.owner.display_name+"</a> "}}else{i="none"}$("#comments").html(i);var u="";if(invalidAnswers.length>0){for(var s=0;s<invalidAnswers.length;s++){var a=invalidAnswers[s];u+="<a href='#"+a.link+"'>"+a.owner.display_name+"</a> "}}else{u="none"}$("#answers").html(u)}function checkAnswers(e){for(var t=0;t<e.items.length;t++){var n=e.items[t];var r=answerPattern.exec(n.body);if(r){var i=htmlDecode(r[1]);var s=computeScore(i);if(s==-1){invalidAnswers.push(n)}else{n.length=i.length;n.score=s;validAnswers.push(n)}}else{invalidAnswers.push(n)}}addLeaderboard();addAnalytics()}function checkComments(e){for(var t=0;t<e.items.length;t++){var n=e.items[t];var r=commentPattern.exec(htmlDecode(n.body));if(r){var i=n.owner.user_id;var s=parseInt(r[1]);var o=r[2]=="\\n"?"\n":r[2]=="\\s"?" ":r[2];if(userIDs.hasOwnProperty(i)||!usedWeights.hasOwnProperty(s)||usedWeights[s]||!usedChars.hasOwnProperty(o)||usedChars[o]){invalidComments.push(n)}else{userIDs[i]=true;usedWeights[s]=true;usedChars[o]=true;weights[o]=s}}}$.get(answersURL,checkAnswers)}function refresh(){$.get(commentsURL,checkComments)}questionID=45040;commentsURL="https://api.stackexchange.com/2.2/questions/"+questionID+"/comments?order=asc&sort=creation&site=codegolf&filter=!t)IWLXOkOvAuPe8m2xJrXOknWcw(ZqZ";answersURL="https://api.stackexchange.com/2.2/questions/"+questionID+"/answers?order=desc&sort=activity&site=codegolf&filter=!.FjsvG2LuND(frE*)WTvqQev1.lyu";commentPattern=/^#### (\d+) -> (\\(?:n|s)|[ -~]) ####$/;answerPattern=/<pre><code>((?:\n|.)*?)\n<\/code><\/pre>/;chars="\n !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";validAnswers=[];invalidAnswers=[];invalidComments=[];userIDs={};usedWeights={};usedChars={};weights={};defaultWeight=chars.length+1;for(var i=0;i<chars.length;i++){usedChars[chars[i]]=false;usedWeights[i+1]=false;weights[chars[i]]=defaultWeight}refresh()
*{font-family:Helvetica,Arial,sans-serif}table{border:3px solid green;border-collapse:collapse}button{font-size:100%}th{background-color:green;color:#fff;padding:6pt}td{border:1px solid green;padding:6pt}.large{font-size:140%}.title{font-weight:700;margin:6pt 0}textarea{font-family:"Courier New";white-space:nowrap;overflow:auto}input[readonly]{background-color:#dcdcdc}.analytics{font-size:90%;padding:4pt 0 0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div class='large title'>Leaderboard</div><table id='leaderboard'> <tr> <th>Place</th> <th>Submitter</th> <th>Score</th> <th>Program Length</th> </tr></table><br><div class='title'>Compute Score</div><textarea id='code' rows='5' cols='40' placeholder='paste code here...'></textarea><br><button type='button' onclick='compute()'>Compute</button> Score: <input type='text' id='score' readonly><br><br><div class='title'>Analytics</div><div class='analytics'>Assigned weights: <input type='text' id='weights' readonly></div><div class='analytics'>Unused characters: <input type='text' id='unusedc' readonly> (all weight 97)</div><div class='analytics'>Unused weights: <input type='text' id='unusedw' readonly></div><div class='analytics'>Invalid comments (duplicate user/char/weight): <span id='comments'></span></div><div class='analytics'>Invalid answers (illegal characters or no code block): <span id='answers'><span></div><br><button type='button' onclick='refresh'>Refresh</button>
Bu skor tablosunun çalışması için yorumların yukarıda açıklanan biçimde olması ve program kodunuzun yanıtınızdaki ilk çok satırlı kod bloğunda olması gerekir <pre><code>...</code></pre>
. Sözdizimi vurgulamayı kullanmayın, aksi takdirde kodunuz doğru şekilde okunmaz. Snippet'in güncellenmesi bir veya iki dakika sürebilir.
Parçacığı tam olarak test etmedim, ancak bu yarışma devam ederken göz kulak olacağım. Herhangi bir hata fark ederseniz lütfen bana bildirin. İşte küçültülmemiş bir sürüm:
Bu puanlama sisteminin tamamen yeni ve deneysel olduğunu unutmayın. Umarım Stack Exchange, tonlarca yorum içerdiğini düşünmez. : P
İlgili zorluk: Bu elması yazdır