โค้ดที่ผู้ใช้ทำคะแนนกอล์ฟ - วาดเพชร [ทดลอง]


11

ความท้าทายนี้จะทำตัวเหมือนนักทั่วไป ความแตกต่างเพียงอย่างเดียวคือแทนที่จะให้คะแนนคำตอบตามจำนวนตัวอักษรหรือไบต์ผู้ใช้จะกำหนด น้ำหนักให้กับตัวละครที่แตกต่างกันในความคิดเห็นและโปรแกรมที่มีน้ำหนักสะสมต่ำสุดจะเป็นผู้ชนะ

ท้าทาย

งานของคุณคือการเขียนโปรแกรมที่ใช้สตริงและพิมพ์รูปสี่เหลี่ยมขนมเปียกปูนที่ตัวอักษรตัวแรกเริ่มตรงกลางและตัวละครที่ตามมาจะใช้พื้นที่ว่างฉากตั้งฉากกับชุดของตัวอักษรที่วางไว้ล่าสุด 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        

และจะผลิต99

รายละเอียด

  • รหัสอาจมีเฉพาะASCII ที่พิมพ์ได้และบรรทัดใหม่ (ดูสาเหตุด้านล่าง)

  • อินพุต / เอาต์พุตควรผ่าน stdin / stdout หรือหากไม่สามารถทำได้ให้ใช้ทางเลือกอื่นที่คล้ายกัน

  • คุณอาจสมมติว่าสายป้อนข้อมูลมี ASCII ที่พิมพ์ได้เท่านั้น (รวมถึงช่องว่าง)

  • คอลัมน์ของช่องว่างนำหน้าที่ไม่มีส่วนใดส่วนหนึ่งของลวดลายเพชรจะไม่ได้รับอนุญาตในผลลัพธ์ จำนวนและการรวมกันของพื้นที่ช่องว่างต่อท้ายได้รับอนุญาต

  • อาจมีทางเลือกขึ้นบรรทัดใหม่ในเอาต์พุต

  • คุณสามารถแก้ไขคำตอบได้มากเท่าที่คุณต้องการ

เกณฑ์การให้คะแนน

รหัสทั้งหมดจะต้องเขียนโดยใช้บรรทัดใหม่เท่านั้นและอักขระ ASCII ที่พิมพ์ได้ 95 ตัว:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(ไม่อนุญาตให้ใช้แท็บที่น่าเศร้าเพราะการแลกเปลี่ยนแบบสแต็กจะแสดงผลเป็นช่องว่างในบล็อคโค้ด)

อักขระ 96 ตัวเหล่านี้แต่ละตัวมีค่าน้ำหนักที่เกี่ยวข้อง โดยค่าเริ่มต้นน้ำหนักทั้งหมดคือ 97

คะแนนของโปรแกรมคือผลรวมของค่าน้ำหนักสำหรับตัวละครแต่ละตัว ตัวอย่างเช่นถ้าโปรแกรมได้print(4)และน้ำหนักสำหรับ470 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):&nbsp;<span id='comments'></span></div><div class='analytics'>Invalid answers (illegal characters or no code block):&nbsp;<span id='answers'><span></div><br><button type='button' onclick='refresh'>Refresh</button>

เพื่อให้กระดานแต้มนำนี้ทำงานได้ความคิดเห็นจะต้องอยู่ในรูปแบบที่ถูกต้องตามที่อธิบายไว้ข้างต้นและรหัสของโปรแกรมของคุณจะต้องอยู่ในบล็อครหัสหลายบรรทัดแรกในคำตอบของคุณ (ความคิดเห็น<pre><code>...</code></pre>) อย่าใช้การเน้นไวยากรณ์มิฉะนั้นโค้ดของคุณจะอ่านไม่ถูกต้อง ตัวอย่างอาจใช้เวลาหนึ่งหรือสองนาทีก่อนที่จะอัปเดต

ฉันไม่ได้ทดสอบตัวอย่างอย่างละเอียด แต่ฉันจะจับตามองเมื่อการประกวดนี้เริ่มดำเนินการ หากคุณสังเกตเห็นข้อบกพร่องใด ๆ โปรดบอกฉัน นี่คือเวอร์ชันที่ไม่ย่อเล็กสุด:

โปรดทราบว่าระบบการให้คะแนนนี้เป็นระบบใหม่และสมบูรณ์แบบ หวังว่า Stack Exchange จะไม่คิดว่าเกี่ยวข้องกับความคิดเห็นมากมาย : P

ความท้าทายที่เกี่ยวข้อง: พิมพ์เพชรนี้


#### 1 -> * ####
Martin Ender

ความคิดเห็นสามารถแก้ไขได้เป็นเวลา 5 นาทีดังนั้นการอนุญาตให้แก้ไขอาจทำให้ havok สมบูรณ์โดยใช้กฎที่ไม่ใช่การทำซ้ำ
Peter Taylor

@PeterTaylor แต่ฉันจะหยุดแก้ไขความคิดเห็นได้อย่างไร นอกจากนั้นไม่สนใจสิ่งที่ถูกแก้ไขทั้งหมด 5 นาทีค่อนข้างเร็ว
งานอดิเรกของ Calvin

1
ฉันไม่ชอบระบบการให้คะแนนนี้เลย (ดูการแชท) แต่ถ้าคุณจะใช้มันการเพิกเฉยต่อความคิดเห็นที่ถูกแก้ไขเป็นสิ่งที่ถูกต้องแน่นอน
Peter Taylor

#### 2 ->: ####
Logic Knight

คำตอบ:


4

CJam, 144 150 ไบต์

"x*3:*3:3*::33:3:::333*::333*3::***3::**::33:3::3*:::::*3:3:3:**33*333333::33*:*333:*3*3**:**3:**:3*3:33*3:3*:333**:3**33:*3:::*:3*::3"'3/'b*3b127b:c~

พยายามเข้ารหัส ...

อัปเดตเนื่องจากน้ำหนักของbมีการเปลี่ยนแปลง

การเข้ารหัสอื่นซึ่งดีกว่าในทางทฤษฎีเท่านั้น (140 ไบต์):

":***(*3:**3*I**:3*****:*3*******: ::::*:***II@3*******: :**I:**:***:*3***3*I3I:3***33:::*I**3I***3***:3:*I*3I"{"*:I3( **@"#1a*~0}%2b126b:c~




1

J, 45 ตัวอักษร

(({~((]*]<#@[)>:@(+/~)@:|@i:@(2-#)))@(' '&,))

ทางออก Longish จะตีกอล์ฟด้วยตัวอักษรราคาถูกบางส่วน ...

ลองออนไลน์ (ผนวกสตริงอินพุตด้วยเครื่องหมายคำพูดเดี่ยว)


1

PHP (131 ตัวอักษร)

function f($s){for($i=-($l=strlen($s));$i<$l;$I=abs(++$i)){$t=substr($s,$I);echo str_repeat(' ',$I).strrev($t).substr($t,1)."\n";}}

http://3v4l.org/9Vvkm

จะปรับให้เหมาะสมเมื่อน้ำหนักชัดเจนขึ้น


รหัสของคุณอาจถูกเขียนใหม่ในสิ่งนี้: function f($s){for($i=-($l=strlen($s));$i<$l;)echo str_repeat(' ',$I=abs(++$i)),strrev($t=substr($s,$I)),substr($t,1),"\n";}ซึ่งอาจไม่ทำงาน แต่สั้นกว่า 6 ไบต์! อาจเป็นไปได้ว่าคุณอาจนำบางสิ่งบางอย่างจากที่นี่
Ismael Miguel

0

Java, 318 ไบต์

class N{public static void main(String[]a){char[]s=new java.util.Scanner(System.in).nextLine().toCharArray();int l=s.length,m=l-1,$=0,b;String t="";for(;$<l;$++,t+='\n')for(b=0;b<l+$;b++)t+=b+$<m?' ':s[b>m?m-b+$:b+$-m];for($=l-2;$>-1;$--,t+='\n')for(b=0;b<l+$;b++)t+=b+$<m?' ':s[b>m?m-b+$:b+$-m];System.out.print(t);}}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.