ความท้าทายนี้จะทำตัวเหมือนนักกอล์ฟทั่วไป ความแตกต่างเพียงอย่างเดียวคือแทนที่จะให้คะแนนคำตอบตามจำนวนตัวอักษรหรือไบต์ผู้ใช้จะกำหนด น้ำหนักให้กับตัวละครที่แตกต่างกันในความคิดเห็นและโปรแกรมที่มีน้ำหนักสะสมต่ำสุดจะเป็นผู้ชนะ
ท้าทาย
งานของคุณคือการเขียนโปรแกรมที่ใช้สตริงและพิมพ์รูปสี่เหลี่ยมขนมเปียกปูนที่ตัวอักษรตัวแรกเริ่มตรงกลางและตัวละครที่ตามมาจะใช้พื้นที่ว่างฉากตั้งฉากกับชุดของตัวอักษรที่วางไว้ล่าสุด Spaces ( ) จะใช้สำหรับการขยาย
ตัวอย่างเช่นการป้อนข้อมูลCAT
จะผลิต
T
TAT
TACAT
TAT
T
และ()
จะผลิต
)
)()
)
และ desserts
จะผลิต
s
sts
strts
strerts
streserts
stressserts
stressesserts
stressedesserts
stressed desserts
stressedesserts
stressesserts
stressserts
streserts
strerts
strts
sts
s
และจะผลิต9
9
รายละเอียด
รหัสอาจมีเฉพาะASCII ที่พิมพ์ได้และบรรทัดใหม่ (ดูสาเหตุด้านล่าง)
อินพุต / เอาต์พุตควรผ่าน stdin / stdout หรือหากไม่สามารถทำได้ให้ใช้ทางเลือกอื่นที่คล้ายกัน
คุณอาจสมมติว่าสายป้อนข้อมูลมี ASCII ที่พิมพ์ได้เท่านั้น (รวมถึงช่องว่าง)
คอลัมน์ของช่องว่างนำหน้าที่ไม่มีส่วนใดส่วนหนึ่งของลวดลายเพชรจะไม่ได้รับอนุญาตในผลลัพธ์ จำนวนและการรวมกันของพื้นที่ช่องว่างต่อท้ายได้รับอนุญาต
อาจมีทางเลือกขึ้นบรรทัดใหม่ในเอาต์พุต
คุณสามารถแก้ไขคำตอบได้มากเท่าที่คุณต้องการ
เกณฑ์การให้คะแนน
รหัสทั้งหมดจะต้องเขียนโดยใช้บรรทัดใหม่เท่านั้นและอักขระ ASCII ที่พิมพ์ได้ 95 ตัว:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(ไม่อนุญาตให้ใช้แท็บที่น่าเศร้าเพราะการแลกเปลี่ยนแบบสแต็กจะแสดงผลเป็นช่องว่างในบล็อคโค้ด)
อักขระ 96 ตัวเหล่านี้แต่ละตัวมีค่าน้ำหนักที่เกี่ยวข้อง โดยค่าเริ่มต้นน้ำหนักทั้งหมดคือ 97
คะแนนของโปรแกรมคือผลรวมของค่าน้ำหนักสำหรับตัวละครแต่ละตัว ตัวอย่างเช่นถ้าโปรแกรมได้print(4)
และน้ำหนักสำหรับ4
70 749 = 97+97+97+97+97+97+70+97
แต่ไม่เปลี่ยนแปลงทุกอย่างอื่นคะแนนจะเป็น
เมื่อกิจกรรมในคำถามนี้จบลงแทบจะไม่มีอะไรเลย ในกรณีที่ไม่น่าเป็นไปได้อย่างแน่นอนว่าการชนะจะไปที่คำตอบที่ได้รับคะแนนสูงสุด
เปลี่ยนน้ำหนัก
ผู้ใช้ทุกคนไม่ว่าพวกเขาจะตอบหรือไม่ก็ตามสามารถเปลี่ยนน้ำหนักของหนึ่งใน 96 ตัวอักษรให้เป็นค่าที่ไม่ซ้ำกันจาก 1 เป็น 96 โดยการเพิ่มความคิดเห็นในคำถามของแบบฟอร์ม#### W -> C ####
โดยที่ W เป็นจำนวนเต็มจาก 1 ถึง 96 และ C คืออักขระ (ตามที่เป็นอยู่, ไม่มีเครื่องหมายคำพูด, ไม่มี backticks) ใช้\n
แทน C สำหรับการขึ้นบรรทัดใหม่และ\s
เพื่อเว้นวรรคเนื่องจาก Stack Exchange บีบอัด 3 ช่องว่างในแถว ตัวอย่างข้างต้นจะมีการแสดงความคิดเห็นprint(4)
#### 70 -> 4 ####
ผู้ใช้แต่ละคนสามารถแสดงความคิดเห็นแบบนี้ได้เพียงหนึ่งรายการเท่านั้นและจะใช้ได้เมื่อทั้งตัวละครและค่าน้ำหนักไม่ได้ใช้ในการแสดงความคิดเห็นก่อนหน้านี้ ดังนั้นในที่สุดอาจมี 96 #### W -> C ####
ความคิดเห็นทั้งหมดจากผู้ใช้ที่แตกต่างกันทั้งหมดที่มีน้ำหนักแตกต่างกันที่กำหนดให้กับตัวละครที่แตกต่างกัน
ผู้ใช้อาจลบความคิดเห็นของตนเองหากต้องการตั้งค่าน้ำหนักตัวละครของพวกเขากลับเป็น 97 จนกว่าพวกเขาหรือคนอื่นจะแสดงความคิดเห็นอีกครั้ง พวกเขายังสามารถแก้ไขได้ ความคิดเห็นที่ไม่ปฏิบัติตามกฎเกี่ยวกับผู้ใช้ / น้ำหนัก / ตัวอักษรที่แตกต่างกันควรถูกลบหรือตั้งค่าสถานะเป็น "ไม่สร้างสรรค์" ความคิดเห็นทั่วไปเกี่ยวกับกฎและสิ่งอื่น ๆ นั้นดี แต่ควรเก็บไว้อย่างน้อยที่สุด
ตัวอย่างสแต็กนี้เป็นกระดานผู้นำที่เป็นทางการสำหรับคำถามนี้ โดยจะคำนวณคะแนนสำหรับการส่งทั้งหมดโดยอัตโนมัติโดยรวบรวมน้ำหนักจากความคิดเห็นทุกครั้งที่เรียกใช้ มันไม่ได้จัดการความสัมพันธ์ คุณสามารถใช้มันเพื่อตรวจสอบคะแนนที่โปรแกรมจะมี
คุณอาจจะต้องไปright-click -> Open link in new tab
ที่ลิงค์
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>
เพื่อให้กระดานแต้มนำนี้ทำงานได้ความคิดเห็นจะต้องอยู่ในรูปแบบที่ถูกต้องตามที่อธิบายไว้ข้างต้นและรหัสของโปรแกรมของคุณจะต้องอยู่ในบล็อครหัสหลายบรรทัดแรกในคำตอบของคุณ (ความคิดเห็น<pre><code>...</code></pre>
) อย่าใช้การเน้นไวยากรณ์มิฉะนั้นโค้ดของคุณจะอ่านไม่ถูกต้อง ตัวอย่างอาจใช้เวลาหนึ่งหรือสองนาทีก่อนที่จะอัปเดต
ฉันไม่ได้ทดสอบตัวอย่างอย่างละเอียด แต่ฉันจะจับตามองเมื่อการประกวดนี้เริ่มดำเนินการ หากคุณสังเกตเห็นข้อบกพร่องใด ๆ โปรดบอกฉัน นี่คือเวอร์ชันที่ไม่ย่อเล็กสุด:
โปรดทราบว่าระบบการให้คะแนนนี้เป็นระบบใหม่และสมบูรณ์แบบ หวังว่า Stack Exchange จะไม่คิดว่าเกี่ยวข้องกับความคิดเห็นมากมาย : P
ความท้าทายที่เกี่ยวข้อง: พิมพ์เพชรนี้