ユーザースコアコードゴルフ-ダイヤモンドの描画[実験的]


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

この質問のアクティビティがほぼゼロに落ち着くと、最低スコアの提出が勝ちます。おそらくありそうにないタイの場合、勝利は最高の投票された答えになります。

重みの変更

すべてのユーザー、彼らは答えたかいませんでしたか、フォームのこの質問にコメントを追加するには、これを行うには1から96に一意の値に96文字の1の重さを変更することができ#### W -> C ####、Wは整数であり、 1〜96およびCは文字です(それ自体、引用符、バッククォートなし)。Stack Exchangeは3つのスペースを連続して圧縮するため\n、改行と\sスペースにCの代わりに使用します。上記のprint(4)例にはコメントがあり#### 70 -> 4 ####ます。

各ユーザーは、このようなコメントを1つだけ作成できます。また、以前に作成されたコメントで文字と重量の値の両方が使用されていない場合にのみ有効です。したがって、最終的には、#### 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が大量のコメントを含むことを気にしないことを願っています。:P

関連する課題:このダイヤモンドを印刷する


#### 1-> * ####
マーティン・エンダー

コメントは5分間編集できるため、コメントを編集できるようにすると、繰り返しのないルールに完全な混乱が生じる可能性があります。
ピーターテイラー

@PeterTaylorしかし、どうすればコメントの編集を停止できますか?編集されたものを完全に無視することに加えて。5分はかなり速くなります。
カルビンの趣味

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

Python 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バイト短くなっています!おそらくここから何かを取るかもしれません。
イスマエルミゲル

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.