Diese Herausforderung wird sich mehr oder weniger wie ein traditionelles Code-Golfspiel verhalten . Der einzige Unterschied besteht darin, dass Benutzer anstelle der Bewertung der Antworten anhand der Anzahl der Zeichen oder Bytes verschiedenen Zeichen in den Kommentaren Gewichte zuweisen und das Programm mit der niedrigsten kumulativen Gewichtung gewinnt.
Herausforderung
Ihre Aufgabe ist es, ein Programm zu schreiben, das eine Zeichenfolge verwendet und eine Rautenform druckt, bei der das erste Zeichen in der Mitte beginnt und nachfolgende Zeichen die Leerzeichen orthogonal zu den zuletzt platzierten Zeichen belegen. Leerzeichen ( ) werden zum Auffüllen verwendet.
Zum Beispiel CAT
würde die Eingabe erzeugen
T
TAT
TACAT
TAT
T
und ()
würde produzieren
)
)()
)
und desserts
würde produzieren
s
sts
strts
strerts
streserts
stressserts
stressesserts
stressedesserts
stressed desserts
stressedesserts
stressesserts
stressserts
streserts
strerts
strts
sts
s
und 9
würde produzieren 9
.
Einzelheiten
Der Code darf nur druckbare ASCII- und Zeilenumbrüche enthalten. (Siehe warum unten.)
Die Eingabe / Ausgabe sollte über stdin / stdout erfolgen oder, falls dies nicht möglich ist, ähnliche Alternativen verwenden.
Sie können davon ausgehen, dass die Eingabezeichenfolge nur druckbares ASCII (einschließlich Leerzeichen) enthält.
Spalten mit führenden Leerzeichen, die keinen Teil des Rautenmusters enthalten, sind in der Ausgabe nicht zulässig. Jede Anzahl und Kombination von Leerzeichen ist zulässig.
Optional kann die Ausgabe einen nachgestellten Zeilenumbruch enthalten.
Sie können Ihre Antwort so oft bearbeiten, wie Sie möchten.
Wertung
Der gesamte Code darf nur mit Zeilenumbrüchen und den 95 druckbaren ASCII-Zeichen geschrieben werden:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Tabs sind leider nicht zulässig, da Stack Exchange sie als Leerzeichen in Codeblöcken rendert.)
Jedem dieser 96 Zeichen ist ein Gewichtungswert zugeordnet. Standardmäßig sind alle Gewichte 97.
Die Punktzahl eines Programms ist die Summe der Gewichtswerte für jedes seiner Zeichen. Wenn zum Beispiel das Programm wäre print(4)
und das Gewicht für 4
70 wäre, aber für alles andere unverändert, wäre die Punktzahl 749 = 97+97+97+97+97+97+70+97
.
Sobald sich die Aktivität in dieser Frage auf fast nichts beruhigt hat, gewinnt die Einreichung mit der niedrigsten Punktzahl. Im vermutlich unwahrscheinlichen Fall eines Unentschieden gehen die Siege an die Antwort mit der höchsten Stimme.
Gewichte ändern
Jeder Benutzer, unabhängig davon, ob er geantwortet hat oder nicht, kann die Gewichtung eines der 96 Zeichen auf einen eindeutigen Wert von 1 bis 96 ändern. Fügen Sie dazu einen Kommentar zu dieser Frage des Formulars hinzu #### W -> C ####
, wobei W eine Ganzzahl von ist 1 bis 96 und C ist das Zeichen (wie selbst, keine Anführungszeichen, keine Backticks). Verwenden Sie \n
anstelle von C Zeilenumbrüche und \s
Leerzeichen, da Stack Exchange 3 Leerzeichen hintereinander komprimiert. Das print(4)
obige Beispiel hätte den Kommentar gehabt #### 70 -> 4 ####
.
Jeder Benutzer darf nur EINEN Kommentar wie diesen abgeben, und dieser ist nur gültig, wenn sowohl das Zeichen als auch der Gewichtswert nicht in einem zuvor gemachten Kommentar verwendet wurden. Somit kann es schließlich 96 #### W -> C ####
Kommentare geben, alle von verschiedenen Benutzern, alle mit unterschiedlichen Gewichten, die verschiedenen Zeichen zugewiesen sind.
Benutzer können ihren eigenen Kommentar löschen, wenn sie möchten, und das Gewicht ihrer Charaktere auf 97 zurücksetzen, bis sie oder eine andere Person erneut Kommentare abgeben. Sie können sie auch bearbeiten. Kommentare, die nicht den Regeln für bestimmte Benutzer / Gewichte / Zeichen entsprechen, sollten gelöscht oder als "nicht konstruktiv" gekennzeichnet werden. Allgemeine Kommentare zu Regeln und anderen Dingen sind in Ordnung, sollten aber auf ein Minimum beschränkt werden.
Dieses Stack-Snippet ist die offizielle Rangliste für diese Frage. Es berechnet automatisch die Punktzahlen für alle Einsendungen, indem bei jeder Ausführung die Gewichte aus den Kommentaren erfasst werden. Es geht nicht um Krawatten. Sie können es auch verwenden, um die Punktzahl eines Programms zu überprüfen.
Sie müssen wahrscheinlich right-click -> Open link in new tab
für die Links.
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>
Damit diese Rangliste funktioniert, müssen die Kommentare genau das oben beschriebene Format haben und der Code Ihres Programms muss sich im ersten mehrzeiligen Codeblock in Ihrer Antwort ( <pre><code>...</code></pre>
denjenigen) befinden. Verwenden Sie keine Syntaxhervorhebung, da Ihr Code sonst nicht richtig gelesen wird. Es kann ein oder zwei Minuten dauern, bis das Snippet aktualisiert wird.
Ich habe das Snippet nicht gründlich getestet, aber ich werde es im Auge behalten, wenn dieser Wettbewerb beginnt. Wenn Sie Fehler bemerken, sagen Sie es mir bitte. Hier ist eine nicht minimierte Version:
Denken Sie daran, dass dieses Bewertungssystem völlig neu und experimentell ist. Hoffentlich macht es Stack Exchange nichts aus, dass es Unmengen von Kommentaren enthält. : P.
Verwandte Herausforderung: Drucken Sie diesen Diamanten
quelle
Antworten:
CJam,
144150 BytesVersuchte einige Codierung ...
Aktualisiert, da sich das Gewicht von
b
geändert hat.Eine andere Codierung, die theoretisch nur besser ist (140 Bytes):
quelle
Python 2, 120 Bytes
Bearbeiten: Geringere Kosten mit einigen günstigeren Charakteren.
quelle
Pyth , 21 Bytes
Probieren Sie es online aus: Pyth Compiler / Executor
quelle
CJam, 31 Bytes
Nur eine Anpassung meiner Antwort auf Print this Diamond . Ich könnte es optimieren, wenn sich die Gewichte geändert haben.
Testen Sie es hier.
quelle
J, 45 Zeichen
Längere Lösung, wird es mit ein paar billigen Zeichen Golf spielen ...
Probieren Sie es online aus. (Fügen Sie die Eingabezeichenfolge mit einfachen Anführungszeichen hinzu.)
quelle
PHP (131 Zeichen)
http://3v4l.org/9Vvkm
Optimiert, sobald die Gewichtungen klarer sind.
quelle
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";}
funktioniert möglicherweise nicht. Aber es ist 6 Bytes kürzer! Wahrscheinlich könnten Sie etwas von hier nehmen.Java, 318 Bytes
quelle