Questa è una sfida dipendente dalla risposta! L'ordine delle risposte è importante e l'attività esatta dipende dall'ultima risposta che è stata pubblicata. Potresti voler ordinare le risposte per più vecchio .
Mettiamo insieme un po 'di codice! Qui ci sono 1920 caratteri casuali (stampabili ASCII). Pensa a loro come a un grande mucchio di pezzi di puzzle non ordinati ancora nella scatola:
L-^=v^Ej2tW8OxNOIecSt4m}tji2O%YRJ;PJ!M|0*oO77$*Rs&2*<c"KI7e%FY^?I=];Y@`x)u)IBk%_a#<E6<yv5O*$kL):
KNGq)2Wa%b)j."(6U|{[UY@`lrCSJ`u0RHX!1z7f,v}n=GvRgkrEZ=YT:4H44bz]iC<](:+FF?Ay'vX~h5QMF)0vaXk1sk@p
Zj).{+l;PBKHABvEP%FnSw>u<_-4B^A>I8Kay&5]vXZJ{fCF]UVZ<!ZpOI$7\Y%`@:%H3wPsX-`/l]ZZ?Q/d`\M<T@'t]zip
{[ovg:6EpCT&'+vU4Heb^;}0AV|?<}M0rAH/^DL"RkT~%$[VUlM]-&We4(P=66},hL~;a`:$'yty.W[g2OWcL~b:Ryj0*eN<
;&-n[F1F=oh0k[NI!xS"]pA@Y;K}'=ekG5yda8J$+`N;:FIx:l,f_LT@sV[]HF@2*vl?|q"GL1j&%e(CyYPqY%3W|@`z}]bp
4_'1Nx{"G2&j6$UWt_#%`sTt2xC}s1P8J<gV24_RWge/aMuyVOjz=zS!1i2s@`Q#@^~@W/k@.YLbKxS:g9?J^p;7ju?B\yC5
x,ZApKS5G4}kx_iM)f4/|su>=[{XSV#{,j5Qn3U.v5LF;HXs%DYm4'+efmU;\}f6j$SFCRC`Gsd37:'3$q=bs;lvsW0Yj^:-
I[94@I|.IpR=}4KB4Z0G4>8PR29'L?n\gk,*4X[-%T`\FC)jj0jl_x<xL8E:G2-"3tT8&E}"sE+SH[7jR%@V)a{!m8K>.rAO
2[dq7GX9nrz8p4}^2mn@q|dF%<.Tl8)Dk?O.<UoE(a*k_=4+u!h$^bVd:$jS#EHFh@Z=y=ib^~/~lEJ^SQ3E_t#&^IOov7v8
~j#I#OHgxg{DZDyCsq-(GVq}HbiG,JV?eJ~5wJ;bSt@;3LI!2(6gIT92>}`_dw;YF@ccTIEz\Gu@2(}J2I1"S{R(2niIYPp9
8A3iiP[*!SH2*SN8'`V?w4Ufx2H*Az%{}FlUdH31TJ5{:ge^N91^;9Gj`Uqf'$_|8P"kHR1w.(ASwmN)U-~q"[XcWbqPnns=
d.ZoPJ}$Xc2lA>HN28`(d0y+UAr*sQ=?KE07=\FsVN(#?&hRabS%BVI#<`O$o#4x5ZFFLGDcA4t?&Eh~Z$oBWwNSNv`^;vO'
2&9egng~L#\QkfMG?S/n@%-VA[?f9K&3"V%P#Sv0!D<,GV:Z;3c&zFe^k&^0b7fAjvrbMc^Lq7k$h=YL<h7<0\NK>~Q=uUv)
4cI$.'b-RVS-=rom:=8QR=c>9am-^5F[XGv>E/>|]~\']3{r{kTc?ee1v=;I7]52#NE)~A;}!z>5?hi{5<9FtWH6{VO_Y-Jy
Mw>{l8n#mD,kl'8cG^.7sy=QqU-3~SKGs5(.Ta]:-Vfr'NS$o*q:w6e$&7spk3{CFT'l_hGY0-0Xui*5i^0^fO@6?2IdCn_C
lPKaJ6]0t!u>v8<d'Vby]8kEHh04p(YI)&7w82BrGB3PkI,s+%7ux5)gau`G!8F8hLa4[lfD55Xf3Hqy*-K,?;2'fxH3JWYE
Z.[N`:[K:CY@TzKX4TMXsm{Xbd:B3)Gy[mlwnC$>)z`:k=C\0ho/v{57#+2,*%]>p~vI2^C:2DebJR>.ESw^wd2N<~]O9sOQ
`_yvIw&Ryf%JgT@W(G1wfU3.4G3U}x1jKJzJY\S9n$2~P;F}*eT9UXcTNBTrTs>~0v_Oi.y8ofX6i5u$;'^"q][QhTb*gO[U
n'R0"v1r+9fv;5G7Bg=D:c*a=1@[}7}dYOO{Mz2&@6`jnNq.QcBDM9Dd=R.*=MqZ93#'{AJJFqx<{qb':B!H8ig1L%T\Vuc"
(h$i3`,scX'hqpbw"=nY`*Lu:h1wR{+-`\^3cQkIWfq)3?&p;~pvDW$o7\O|R6rB2{PX.s#G6A.s<OA_,TI_b*&lO@L3KrQv
Il "piano" su cui ci stiamo scervellando è inizialmente solo una griglia di spazi 96x20 (codice punto 0x20). Ogni risposta può spostarsi tra blocchi di pezzi adiacenti e scegliere fino a 10 pezzi di puzzle (personaggi) e aggiungerli al puzzle per creare un nuovo programma. Tale programma deve stampare il numero della tua risposta (numerata in sequenza, a partire da 1).
Rispondere
La cosa chiave da capire su questa sfida è che solo una persona può rispondere alla volta e ogni risposta dipende da quella precedente .
Non ci dovrebbe essere due risposte con lo stesso numero N . Se due persone rispondono contemporaneamente per qualche N , colui che ha risposto in seguito (anche se è una differenza di pochi secondi) dovrebbe eliminare gentilmente la propria risposta.
Per rendere questo processo un po 'più fluido, prova a seguire i seguenti passaggi quando pubblichi la tua risposta:
- Assicurati che qualcuno abbia verificato in modo indipendente la correttezza della risposta precedente (e lasciato un commento corrispondente).
Prendi il "pavimento puzzle" e la "scatola dei pezzi" precedenti. Puoi spostare liberamente qualsiasi blocco adiacente di personaggi sul pavimento del puzzle come unità (i personaggi sono adiacenti se toccano lungo la direzione orizzontale o verticale). I blocchi adiacenti non possono essere nuovamente suddivisi. Esempi su una griglia 5x4:
Last answer: Valid: Invalid: |a bc| |d g | |a bc| | bc | |a bc| | d e | |fa bc| |d e | -or- |d e | -or- | e | | f g| | e | | f g| |f g | |df g | | h | |h | | h | | h | | h |
Nell'esempio valido, è
a
stato spostato di un passo verso il basso e verso destra. Ildf
blocco è stato spostato in alto a sinistra. Ilbce
blocco è stato spostato in basso di 1. Èg
stato spostato due in alto e uno a sinistra. Ilh
blocco è stato spostato completamente a sinistra.
Nel primo esempio non validodf
è stato separato. Nel secondo,a
è stato rimosso. Nel terzo,df
è stato ruotato.Quindi, rimuovi almeno 1 e fino a 10 caratteri dalla "scatola dei pezzi" e scegli tanti spazi sul "pavimento del puzzle", che sostituirai con quei personaggi. Questo è il tuo programma inviato. Includi sia il nuovo "pavimento del puzzle" che la "scatola dei pezzi" nella tua risposta.
Pubblica la tua risposta nel seguente formato:
# N. [Language], [number of blocks moved], [number of pieces added] [grid that is your program] ### Remaining pieces: [grid of remaining characters] [notes, explanation, observations, whatever]
dov'è
N
il numero della tua risposta.Questo è assolutamente vitale per la sfida! Ho fornito uno strumento di dashboard per la sfida per aiutare con la contabilità e si basa sul modello sopra. (Vedi in fondo al post.)
- Includi le barre verticali ai lati del pavimento del puzzle, perché altrimenti Stack Stack non visualizzerà le righe vuote. Queste due colonne non devono mai essere considerate parte del codice.
- Un altro utente dovrebbe ora rivedere la tua richiesta e lasciare un commento "Verifica della correttezza" se la tua risposta segue tutte le regole (vedi sotto). In caso contrario, dovrebbero lasciare un commento sottolineando eventuali difetti. Hai quindi 15 minuti per risolvere questi problemi. In caso contrario, la risposta verrà considerata non valida, dovrebbe essere eliminata e qualcun altro potrebbe pubblicare una risposta di follow-up alla precedente. (In questo caso, sei libero di inviare una nuova risposta in qualsiasi momento.)
Queste normative possono sembrare piuttosto rigide, ma sono necessarie per evitare risposte non valide da qualche parte nella catena.
Le regole
- Un utente può inviare una sola risposta ogni 4 ore. (Questo per impedire agli utenti di osservare costantemente la domanda e di rispondere il più possibile.)
- Un utente non può inviare due risposte di seguito. (ad es. da quando ho inviato la risposta 1 non posso fare la risposta 2, ma potrei fare 3.)
- Nessuna lingua può essere utilizzata più di una volta! Versioni diverse della stessa lingua contano come la stessa lingua. Le lingue contano come distinte se tradizionalmente sono chiamate con due nomi diversi. (Potrebbero esserci alcune ambiguità qui, ma non lasciare che ciò rovini il concorso.)
- Non modificare le risposte che sono state verificate.
Se un errore dovesse essere scoperto in precedenza nella catena (ovvero dopo che sono state pubblicate le risposte di follow-up), la risposta offensiva dovrebbe essere eliminata. Tuttavia , tutte le risposte che sono state pubblicate da allora non devono essere modificate per riflettere questo.
Il tuo programma deve stampare
N
, il numero della tua risposta, su STDOUT o l'alternativa più vicina. Deve essere un programma completo e non deve assumere un ambiente REPL.- È possibile o meno stampare una nuova riga finale.
Lasciate che M sia il numero di blocchi spostati per la risposta (non importa quanto lontano) e P il numero di caratteri aggiunto al piano di puzzle, il punteggio della vostra risposta sarà 10 + N - M - P . Come esempio 5x4, se la tua risposta ha cambiato il piano puzzle nel modo seguente
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
il tuo punteggio sarebbe 10 + N - 2 - 3 = N + 5 , perché due blocchi sono stati spostati (
h
ebce
) e tre caratteri aggiunti (i
,j
ek
).Il vincitore sarà l'utente che accumula il maggior numero di punti attraverso le loro risposte. In caso di pareggio, vince l'utente con l'ultima risposta. Accetterò l'ultima risposta del vincitore.
- Nell'improbabile caso in cui tutti i personaggi saranno esauriti, la sfida termina.
Pannello di controllo
Ecco un piccolo strumento Dashboard, che dovrebbe aiutare con la contabilità necessaria per questo tipo di sfida.
Visualizza lo stato corrente della sfida, in particolare se vi sono risposte contrastanti, se è necessario verificare una risposta o se è possibile pubblicare la risposta successiva.
Produce inoltre un elenco di tutte le lingue utilizzate, nonché una classifica di tutti gli utenti. Attenersi al formato di risposta sopra, in modo che la dashboard possa leggere le stringhe pertinenti dalle risposte. Altrimenti potresti non essere incluso nella classifica.
Per favore fatemi sapere ( idealmente in chat ) se individuate qualche bug o avete qualche idea su come migliorare l'utilità dello strumento.
function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentsUrl(e,t){return"http://api.stackexchange.com/2.2/answers/"+e+"/comments?page="+t+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){$.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(e){answers.push.apply(answers,e.items);if(e.has_more)getAnswers();else{page=1;getFinalComments()}}})}function getFinalComments(){answers=answers.filter(shouldHaveHeading);answers=answers.filter(shouldHaveScore);console.log(answers);$.ajax({url:commentsUrl(answers[0].answer_id,page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(e){comments.push.apply(comments,e.items);if(e.has_more)getAnswers();else process()}})}function shouldHaveHeading(e){var t=false;try{t|=/^(#|<h).*/.test(e.body_markdown);t|=["-","="].indexOf(e.body_markdown.split("\n")[1][0])>-1}catch(n){}return t}function shouldHaveScore(e){var t=false;try{t|=HEADER_REG.test(e.body_markdown.split("\n")[0])}catch(n){}return t}function findDuplicates(e){var t=false;var n={};e.forEach(function(e){var r=e.body_markdown.split("\n")[0].match(NUMBER_REG)[0];if(n[r])t=t||r;n[r]=true});return t}function hasBeenVerified(e,t){var n=false;t.forEach(function(t){n|=/correctness verified/i.test(t.body_markdown)&&e!=t.owner.user_id});return n}function userTimedOut(e){return NOW-e.creation_date*1e3<MSEC_PER_ANSWER}function getAuthorName(e){return e.owner.display_name}function getAnswerScore(e,t,n){e=parseInt(e);t=parseInt(t);n=parseInt(n);return 10+e-t-n}function process(){$("#last-user").append(answers[0].owner.display_name);var e=answers.slice(1).filter(userTimedOut).map(getAuthorName).join(", ");if(e)$("#timed-out-users").append(e);else $("#timed-out-notice").hide();var t=answers[0].body_markdown.split("\n")[0].match(NUMBER_REG)[0];var n=findDuplicates(answers);if(n){var r=$("#status-conflict-template").html();$("#challenge-status").append(r.replace("{{NUMBER}}",n));$("#challenge-status").addClass("conflict")}else if(!hasBeenVerified(answers[0].owner.user_id,comments)){var r=$("#status-verification-template").html();$("#challenge-status").append(r.replace("{{NUMBER}}",t));$("#challenge-status").addClass("verification")}else{var r=$("#status-next-template").html();$("#challenge-status").append(r.replace("{{NUMBER}}",t).replace("{{NEXT}}",parseInt(t)+1));$("#challenge-status").addClass("next")}var i={};var s={};var o=[];answers.forEach(function(e){var t=e.body_markdown.split("\n")[0];var n=$("#answer-template").html();var r=t.match(HEADER_REG)||[0,-1,"",0,0];var u=r[1];var a=r[2];var f=r[3];var l=r[4];var c=getAnswerScore(u,f,l);var h=getAuthorName(e);n=n.replace("{{NAME}}",h).replace("{{NUMBER}}",u).replace("{{LANGUAGE}}",a).replace("{{MOVED}}",f).replace("{{ADDED}}",l).replace("{{SCORE}}",c).replace("{{LINK}}",e.share_link);n=$(n);$("#answers").append(n);i[h]=(i[h]||0)+c;s[h]=(s[h]||0)+1;o.push({lang:a,link:e.share_link})});var u=[];for(var a in i)if(i.hasOwnProperty(a)){u.push({name:a,numAnswers:s[a],score:i[a]})}u.sort(function(e,t){return t.score-e.score});var f=1;u.forEach(function(e){var t=$("#user-template").html();t=t.replace("{{NAME}}",e.name).replace("{{NUMBER}}",f++).replace("{{COUNT}}",e.numAnswers).replace("{{SCORE}}",e.score);t=$(t);$("#users").append(t)});o.sort(function(e,t){return e.lang.localeCompare(t.lang)});o.forEach(function(e){var t=$("#lang-template").html();t=t.replace("{{LANGUAGE}}",e.lang).replace("{{LINK}}",e.link);t=$(t);$("#lang-list").append(t)})}var QUESTION_ID=44966;var ANSWER_FILTER="!*cCFgu5yS6BFQP8Z)xIZ.qGoikO4jB.Ahv_g-";var COMMENT_FILTER="!)Q2B_A497Z2O1kEH(Of5MUPK";var HOURS_PER_ANSWER=4;var MSEC_PER_ANSWER=HOURS_PER_ANSWER*60*60*1e3;var NOW=Date.now();var answers=[],comments=[],page=1;getAnswers();var NUMBER_REG=/\d+/;var HEADER_REG=/(\d+)[.]\s*([^,]*[^,\s])\s*,[^,\d]*(\d+)[^,\d]*,[^,\d]*(\d+)/
body { text-align: left !important} #challenge-status { font-weight: bold; padding: 10px; width: 800px; } #blocked-users { padding: 10px; width: 800px; } .conflict { background: #994343; color: white; } .verification { background: #FFDB12; } .next { background: #75FF6E; } #last-user, #timed-out-users { font-weight: bold; } #answer-list { padding: 10px; width: 350px; float: left; } #leaderboard { padding: 10px; width: 280px; float: left; } #languages { padding: 10px; width: 130px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="challenge-status"> </div> <div id="blocked-users"> User <span id="last-user"></span> has posted the last answer, and may not post the next one. <div id="timed-out-notice"><span id="timed-out-users"></span> have answered within the last four hours and may not answer again yet. (If a user appears in this list twice, they must have answered twice within four hours!)</div> </div> <div id="answer-list"> <h2>List of Answers (newest first)</h2> <table class="answer-list"> <thead> <tr><td>No.</td><td>Author</td><td>Language</td><td>M</td><td>P</td><td>Score</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <div id="leaderboard"> <h2>Leaderboard</h2> <table class="leaderboard"> <thead> <tr><td>No.</td><td>User</td><td>Answers</td><td>Score</td></tr> </thead> <tbody id="users"> </tbody> </table> </div> <div id="languages"> <h2>Languages</h2> <table class="languages"> <tbody id="lang-list"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{NUMBER}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{MOVED}}</td><td>{{ADDED}}</td><td>{{SCORE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="user-template"> <tr><td>{{NUMBER}}</td><td>{{NAME}}</td><td>{{COUNT}}</td><td>{{SCORE}}</td></tr> </tbody> </table> <table style="display: none"> <tbody id="lang-template"> <tr><td><a href="{{LINK}}">{{LANGUAGE}}</a></td></tr> </tbody> </table> <div id="status-conflict-template" style="display: none"> There is more than one answer with number {{NUMBER}}!<br> Please resolve this conflict before posting any further answer. </div> <div id="status-verification-template" style="display: none"> Answer {{NUMBER}} has not been verified!<br> Please review the answer and post a comment reading "Correctness verified." on the answer if it is valid. Note that this has to be done by a different user than the author of the answer! </div> <div id="status-next-template" style="display: none"> Answer {{NUMBER}} has been verified!<br> You may now post answer {{NEXT}}. </div>
Script utili
Ecco due script di CJam per la tua comodità. Puoi eseguirli nell'interprete online .
- Per rimuovere la prima e l'ultima colonna dal puzzle (per ottenere il codice reale), incollalo in STDIN ed esegui
qN/1f>Wf<N*
. - Per riempire il tuo codice in un rettangolo 96x20 e aggiungere le colonne di barre verticali attorno ad esso, esegui
qN/La20*+20<{96S*+96<'|\+'|+}%N*
il tuo codice. Per scoprire quali personaggi sono stati rimossi dalla scatola dei pezzi tra due risposte, incollali entrambi in STDIN (senza una linea vuota tra) e corri
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
Mostrerà anche se sono stati aggiunti personaggi (non quanti però).
Se qualcuno vuole reimplementarli come Stack Snippet, sono felice di aggiungerli a questo post.