Người dùng đánh dấu mã Golf - Vẽ kim cương [thử nghiệm]


11

Thử thách này sẽ hành xử ít nhiều giống như một 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 CATsẽ tạo ra

  T  
 TAT 
TACAT
 TAT 
  T  

()sẽ sản xuất

 ) 
)()
 ) 

 dessertssẽ sản xuất

        s        
       sts       
      strts      
     strerts     
    streserts    
   stressserts   
  stressesserts  
 stressedesserts 
stressed desserts
 stressedesserts 
  stressesserts  
   stressserts   
    streserts    
     strerts     
      strts      
       sts       
        s        

9sẽ 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ố 4là 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 \nthay cho C cho dòng mới và \scho 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 tabcho 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):&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>

Để 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


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

Nhận xét có thể được chỉnh sửa trong 5 phút, do đó, cho phép chúng được chỉnh sửa có thể gây ra sự hỗn loạn hoàn toàn với các quy tắc không lặp lại.
Peter Taylor

@PeterTaylor Nhưng làm thế nào tôi có thể dừng chỉnh sửa nhận xét? Bên cạnh đó hoàn toàn bỏ qua những người được chỉnh sửa. 5 phút trôi qua khá nhanh.
Sở thích của Calvin

1
Tôi hoàn toàn không thích hệ thống tính điểm này (xem trò chuyện), nhưng nếu bạn sẽ sử dụng nó thì bỏ qua những bình luận được chỉnh sửa chắc chắn là điều nên làm.
Peter Taylor

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

Câu trả lời:


4

CJam, 144 150 byte

"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~

Đã thử một số mã hóa ...

Cập nhật vì trọng lượng bđã thay đổi.

Một mã hóa khác chỉ tốt hơn về lý thuyết (140 byte):

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

5

Python 2, 120 byte

T=raw_input()
L=len(T)
r=[b[::-1]+b[1:]for b in [T[-b:]+' '*(L-b)for b in range(1,L+1)]]
for b in r[:-1]+r[::-1]:print b

Chỉnh sửa: Giảm chi phí với một số nhân vật rẻ hơn.




1

J, 45 ký tự

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

Giải pháp lâu dài, sẽ chơi golf với một số ký tự giá rẻ ...

Hãy thử trực tuyến. (Nối chuỗi đầu vào với dấu ngoặc đơn.)


1

PHP (131 ký tự)

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

Sẽ tối ưu hóa một khi trọng số rõ ràng hơn.


Mã của bạn có thể được viết lại vào đây: 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";}có thể không hoạt động. Nhưng nó ngắn hơn 6 byte! Có lẽ bạn có thể lấy một cái gì đó từ đây.
Ismael Miguel

0

Java, 318 byte

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);}}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.