Questa sfida si comporterà più o meno come un code-golf tradizionale . L'unica differenza è che invece di assegnare un punteggio alle risposte in base al loro numero di caratteri o byte, gli utenti assegneranno pesi a diversi personaggi nei commenti e vincerà il programma con il peso cumulativo più basso.
Sfida
Il tuo compito è quello di scrivere un programma che prende una stringa e stampa una forma di diamante in cui il primo carattere inizia al centro e i caratteri successivi occupano gli spazi vuoti ortogonali all'insieme di caratteri che sono stati posizionati per ultimi. Spaces ( ) verrà utilizzato per il riempimento.
Ad esempio l'immissione CAT
produrrebbe
T
TAT
TACAT
TAT
T
e ()
produrrebbe
)
)()
)
e desserts
produrrebbe
s
sts
strts
strerts
streserts
stressserts
stressesserts
stressedesserts
stressed desserts
stressedesserts
stressesserts
stressserts
streserts
strerts
strts
sts
s
e 9
produrrebbe 9
.
Dettagli
Il codice può contenere solo ASCII e newline stampabili . (Vedi perché di seguito.)
L'input / output dovrebbe avvenire tramite stdin / stdout o, se non sono possibili, utilizzare alternative simili.
Si può presumere che la stringa di input contenga solo ASCII stampabile (incluso lo spazio).
Le colonne di spazi iniziali che non contengono alcuna porzione del motivo a diamante non sono consentite nell'output. È consentita qualsiasi quantità e combinazione di spazi trailing space.
Opzionalmente potrebbe esserci una nuova riga finale nell'output.
Puoi modificare la tua risposta quanto vuoi.
punteggio
Tutto il codice deve essere scritto usando solo le nuove righe e i 95 caratteri ASCII stampabili:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
(Purtroppo le schede non sono consentite perché Stack Exchange le rende come spazi nei blocchi di codice.)
A ciascuno di questi 96 caratteri è associato un valore di peso . Per impostazione predefinita, tutti i pesi sono 97.
Il punteggio di un programma è la somma dei valori di peso per ciascuno dei suoi caratteri. Ad esempio, se il programma fosse print(4)
e il peso per 4
fosse 70, ma invariato per tutto il resto, il punteggio sarebbe 749 = 97+97+97+97+97+97+70+97
.
Una volta che l'attività in questa domanda si è stabilizzata quasi per nulla, vince la proposta con il punteggio più basso. Nel caso presumibilmente improbabile di pareggio, le vittorie vanno alla risposta più votata.
Cambiare peso
Ogni utente, indipendentemente dal fatto che abbia risposto o meno, può modificare il peso di uno dei 96 caratteri in un valore univoco compreso tra 1 e 96. A tale scopo, aggiungi un commento a questa domanda del modulo #### W -> C ####
, dove W è un numero intero da Da 1 a 96 e C è il personaggio (come se stesso, senza virgolette, senza backtick). Utilizzare \n
al posto di C per newline e \s
per spazio poiché Stack Exchange comprime 3 spazi di fila. L' print(4)
esempio sopra avrebbe avuto il commento #### 70 -> 4 ####
.
Ogni utente può fare UN SOLO commento in questo modo e sarà valido solo se sia il carattere che il valore di peso non sono stati usati in un commento precedentemente fatto. Quindi, alla fine, potrebbero esserci 96 #### W -> C ####
commenti, tutti di utenti diversi, tutti con pesi diversi assegnati a personaggi diversi.
Gli utenti possono eliminare il proprio commento se lo desiderano, riportando il peso dei loro personaggi su 97 fino a quando loro o qualcun altro non commentano nuovamente. Possono anche modificarli. I commenti che non seguono le regole relative a utenti / pesi / caratteri distinti devono essere eliminati o contrassegnati come "non costruttivi". I commenti generali su regole e altre cose vanno bene, ma dovrebbero essere ridotti al minimo.
Questo frammento di stack è la classifica ufficiale di questa domanda. Calcola automaticamente i punteggi per tutti gli invii raccogliendo i pesi dai commenti ogni volta che viene eseguito. Non gestisce i legami. Puoi anche usarlo per verificare il punteggio di un programma.
Probabilmente dovrai farlo right-click -> Open link in new tab
per i link.
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>
Perché questa classifica funzioni, i commenti devono essere nel formato esatto sopra descritto e il codice del programma deve trovarsi nel primo blocco di codice a più righe nella risposta ( <pre><code>...</code></pre>
quelli). Non utilizzare l'evidenziazione della sintassi o il codice non verrà letto correttamente. Lo snippet può richiedere un minuto o due prima di essere aggiornato.
Non ho testato a fondo lo snippet ma lo terrò d'occhio mentre questo concorso inizia. Se noti qualche bug, per favore dimmelo. Ecco una versione non minimizzata:
Tieni presente che questo sistema di punteggio è completamente nuovo e sperimentale. Spero che Stack Exchange non si preoccupi del fatto che coinvolga tonnellate di commenti. : P
Sfida correlata: stampare questo diamante