사용자 스코어 코드 골프-다이아몬드 그리기 [실험]


11

이 과제는 전통적인 와 거의 비슷하게 작동합니다 . 유일한 차이점은 문자 또는 바이트 수로 답변의 점수를 매기는 대신 사용자가 주석에서 다른 문자에 가중치 를 할당 하고 누적 가중치가 가장 낮은 프로그램이 승리한다는 것입니다.

도전

당신의 임무는 첫 번째 문자가 중앙에서 시작하고 후속 문자가 마지막에 놓인 문자 세트와 직교하는 빈 공간을 차지하는 문자열을 가져 와서 다이아몬드 모양을 인쇄하는 프로그램을 작성하는 것입니다. 공백 ( )이 패딩에 사용됩니다.

예를 들어 입력 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 (공백 포함) 만 포함되어 있다고 가정 할 수 있습니다.

  • 다이아몬드 패턴의 일부를 포함하지 않는 선행 공간의 열은 출력에 허용 되지 않습니다. 후행 공백의 양과 조합이 허용됩니다.

  • 출력에 후행 줄 바꿈이 선택적으로있을 수 있습니다.

  • 원하는만큼 답을 편집 할 수 있습니다.

채점

모든 코드는 개행과 95 개의 인쇄 가능한 ASCII 문자 만 사용하여 작성해야합니다.

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

Stack Exchange는 탭을 코드 블록의 공백으로 렌더링하므로 탭이 허용되지 않습니다.

이 96 자 각각에는 가중치 값이 있습니다. 기본적으로 모든 가중치는 97입니다.

프로그램의 점수는 각 문자의 가중치 값의 합계입니다. 예를 들어, 프로그램이 print(4)있고 가중치 4가 70이지만 다른 모든 것에는 변경되지 않은 경우 점수는입니다 749 = 97+97+97+97+97+97+70+97.

이 질문의 활동이 거의 아무것도 해결되지 않으면, 가장 낮은 점수 제출이 이깁니다. 아마 동점 일 가능성이없는 경우, 승리는 가장 높은 투표 응답으로갑니다.

무게 변경

응답 여부에 관계없이 모든 사용자는 96 자 중 하나의 가중치를 1에서 96 사이의 고유 한 값으로 변경할 수 있습니다. 이렇게하려면이 질문에 주석을 추가하십시오. #### W -> C ####여기서 W는 정수입니다. 1에서 96까지, C는 문자 (따옴표 자체, 역 따옴표 없음)입니다. 스택 교환은 3 개의 공백을 연속으로 압축하므로 줄 \n바꿈과 \s공백 에 C 대신 사용하십시오 . print(4)위 의 예는 주석을 가지고 있었을 것 #### 70 -> 4 ####입니다.

각 사용자는 이와 같이 하나의 주석 만 작성할 수 있으며, 이전에 작성된 주석에 문자와 가중치가 모두 사용되지 않은 경우에만 유효합니다. 따라서 결국 #### W -> C ####다른 사용자에 의해 다른 문자에 할당 된 서로 다른 가중치를 가진 96 개의 주석 이있을 수 있습니다 .

사용자는 원하는 경우 자신의 댓글을 삭제하여 자신이나 다른 사람이 다시 댓글을 달 때까지 캐릭터의 무게를 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>하나)에 있어야 합니다. 구문 강조를 사용하지 마십시오. 그렇지 않으면 코드를 올바르게 읽을 수 없습니다. 스 니펫은 업데이트되기까지 1-2 분 정도 걸릴 수 있습니다.

나는 스 니펫을 철저히 테스트하지는 않았지만이 콘테스트가 진행되는 동안 계속 지켜 볼 것입니다. 당신이 어떤 버그를 발견하면 알려주십시오. 축소되지 않은 버전은 다음과 같습니다.

이 스코어링 시스템은 완전히 새롭고 실험적이라는 점을 명심하십시오. 다행스럽게도 Stack Exchange는 많은 의견이 필요하다는 것을 신경 쓰지 않습니다. :피

관련 도전 : 이 다이아몬드 인쇄


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

주석은 5 분 동안 편집 할 수 있으므로 편집을 허용하면 반복되지 않는 규칙으로 완전한 동작이 발생할 수 있습니다.
피터 테일러

@PeterTaylor하지만 댓글 편집을 어떻게 중지 할 수 있습니까? 편집 된 것을 완전히 무시하는 것 외에도. 5 분이 빨리갑니다.
Calvin 's Hobbies

1
나는이 채점 시스템을 전혀 좋아하지 않지만 (채팅 참조) 그것을 사용하려는 경우 편집 된 주석을 무시하는 것이 반드시 옳은 일입니다.
피터 테일러

#### 2-> : ####
논리 기사

답변:


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~

5

파이썬 2, 120 바이트

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

편집 : 저렴한 문자로 비용이 절감되었습니다.





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

자바, 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.