Thử thách này sẽ hành xử ít nhiều giống như một môn đánh gôn truyền thống . Sự khác biệt duy nhất là thay vì chấm điểm câu trả lời bằng số ký tự hoặc byte của họ, người dùng sẽ gán trọng số cho các ký tự khác nhau trong các nhận xét và chương trình có trọng số tích lũy thấp nhất sẽ giành chiến thắng.
Thử thách
Nhiệm vụ của bạn là viết một chương trình lấy một chuỗi và in hình kim cương trong đó ký tự đầu tiên bắt đầu ở giữa và các ký tự tiếp theo chiếm các khoảng trống trực giao với tập hợp các ký tự được đặt cuối cùng. Spaces ( ) sẽ được sử dụng để đệm.
Ví dụ, nhập liệu CAT
sẽ tạo ra
T
TAT
TACAT
TAT
T
và ()
sẽ sản xuất
)
)()
)
và desserts
sẽ sản xuất
s
sts
strts
strerts
streserts
stressserts
stressesserts
stressedesserts
stressed desserts
stressedesserts
stressesserts
stressserts
streserts
strerts
strts
sts
s
và 9
sẽ sản xuất 9
.
Chi tiết
Mã chỉ có thể chứa ASCII có thể in và dòng mới. (Xem lý do bên dưới.)
Đầu vào / đầu ra phải thông qua stdin / stdout, hoặc, nếu không thể, hãy sử dụng các lựa chọn thay thế tương tự.
Bạn có thể giả sử chuỗi đầu vào chỉ chứa ASCII có thể in (bao gồm cả khoảng trắng).
Các cột của không gian hàng đầu không chứa bất kỳ phần nào của mẫu kim cương không được phép trong đầu ra. Bất kỳ số lượng và sự kết hợp của không gian dấu cách được cho phép.
Có thể tùy chọn có một dòng mới ở đầu ra.
Bạn có thể chỉnh sửa câu trả lời của bạn nhiều như bạn muốn.
Chấm điểm
Tất cả mã phải được viết chỉ bằng các dòng mới và 95 ký tự ASCII có thể in:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Đáng buồn là các tab không được phép vì Stack Exchange kết xuất chúng dưới dạng khoảng trắng trong các khối mã.)
Mỗi 96 ký tự này có một giá trị trọng lượng liên quan đến nó. Theo mặc định, tất cả các trọng số là 97.
Điểm của một chương trình là tổng giá trị trọng số cho mỗi ký tự của nó. Ví dụ: nếu chương trình là print(4)
và trọng số 4
là 70, nhưng không thay đổi đối với mọi thứ khác, điểm sẽ là 749 = 97+97+97+97+97+97+70+97
.
Khi hoạt động trong câu hỏi này lắng xuống gần như không có gì, bài nộp điểm thấp nhất sẽ thắng. Trong trường hợp có lẽ không có khả năng ràng buộc, chiến thắng sẽ thuộc về câu trả lời được bình chọn cao nhất.
Thay đổi trọng lượng
Mọi người dùng, dù họ đã trả lời hay chưa, có thể thay đổi trọng số của một trong 96 ký tự thành giá trị duy nhất từ 1 đến 96. Để thực hiện điều này, hãy thêm nhận xét cho câu hỏi này của biểu mẫu #### W -> C ####
, trong đó W là số nguyên từ 1 đến 96 và C là ký tự (như chính nó, không trích dẫn, không backticks). Sử dụng \n
thay cho C cho dòng mới và \s
cho không gian vì Stack Exchange nén 3 khoảng trắng liên tiếp. Các print(4)
ví dụ trên sẽ có những nhận xét #### 70 -> 4 ####
.
Mỗi người dùng chỉ có thể thực hiện MỘT nhận xét như thế này và nó sẽ chỉ có hiệu lực nếu cả ký tự và giá trị trọng lượng chưa được sử dụng trong một nhận xét được thực hiện trước đó. Do đó, cuối cùng, có thể có 96 #### W -> C ####
bình luận, tất cả từ những người dùng khác nhau, tất cả đều có trọng lượng khác nhau được gán cho các nhân vật khác nhau.
Người dùng có thể xóa nhận xét của riêng họ nếu họ muốn, đặt lại trọng lượng của nhân vật của họ trở lại 97 cho đến khi họ hoặc người khác nhận xét lại. Họ cũng có thể chỉnh sửa chúng. Nhận xét không tuân theo các quy tắc về người dùng / trọng lượng / ký tự riêng biệt nên bị xóa hoặc gắn cờ là "không mang tính xây dựng". Nhận xét chung về các quy tắc và những thứ khác là tốt nhưng nên được giữ ở mức tối thiểu.
Đoạn trích ngăn xếp này là bảng xếp hạng chính thức cho câu hỏi này. Nó tự động tính điểm cho tất cả các bài nộp bằng cách thu thập các trọng số từ các bình luận mỗi khi nó được chạy. Nó không xử lý các mối quan hệ. Bạn cũng có thể sử dụng nó để kiểm tra số điểm mà một chương trình sẽ có.
Có lẽ bạn sẽ cần right-click -> Open link in new tab
cho các liên kết.
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>
Để bảng thành tích này hoạt động, các nhận xét phải ở định dạng chính xác được mô tả ở trên và mã chương trình của bạn phải nằm trong khối mã nhiều dòng đầu tiên trong câu trả lời của bạn (các bình luận <pre><code>...</code></pre>
). Không sử dụng tô sáng cú pháp hoặc mã của bạn sẽ không được đọc chính xác. Đoạn mã có thể mất một hoặc hai phút trước khi cập nhật.
Tôi chưa kiểm tra đoạn trích kỹ lưỡng nhưng tôi sẽ để mắt đến nó khi cuộc thi này đang diễn ra. Nếu bạn nhận thấy bất kỳ lỗi xin vui lòng cho tôi biết. Đây là một phiên bản không rút gọn:
Hãy nhớ rằng hệ thống tính điểm này là hoàn toàn mới và thử nghiệm. Hy vọng rằng Stack Exchange sẽ không bận tâm rằng nó liên quan đến hàng tấn bình luận. : P
Thử thách liên quan: In viên kim cương này