用户评分的代码高尔夫-拉丝钻石[实验性]


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),权重为470,而其他所有权重不变,则得分为749 = 97+97+97+97+97+97+70+97

一旦该问题的活动降到几乎为零,得分最低的提交者将获胜。在平局的可能性不大的情况下,获胜者将获得最高票数的答案。

改变体重

每个用户(无论是否回答)都可以将96个字符之一的权重更改为从1到96的唯一值。为此,请向以下形式的问题添加注释#### W -> C ####,其中W是从1到96,并且C是字符(本身,没有引号,没有反引号)。因为Stack Exchange连续压缩3个空格,所以用\nC代替换行符和\s空格。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-> * ####
马丁·恩德

注释可以编辑5分钟,因此,允许对其进行编辑可能会导致使用非重复规则完全改变。
彼得·泰勒

@PeterTaylor但是我怎么可能停止评论编辑呢?除了完全忽略那些被编辑的内容。5分钟很快。
加尔文的爱好

1
我完全不喜欢这种计分系统(请参阅聊天),但是如果您要使用它,那么忽略编辑的注释绝对是正确的选择。
彼得·泰勒

#### 2->:####
逻辑骑士

Answers:


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

J,45个字符

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

长久的解决方案,将打一些廉价的高尔夫球...

在线尝试。(用单引号将输入字符串附加。)


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);}}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.