C'est un défi dépendant de la réponse! L'ordre des réponses est important et votre tâche exacte dépend de la dernière réponse publiée. Vous voudrez peut-être trier les réponses en fonction des plus anciennes .
Rassemblons du code! Voici 1920 caractères aléatoires (ASCII imprimables). Considérez-les comme un gros tas de pièces de puzzle non triées encore dans la boîte:
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
Le "sol" sur lequel nous nous posons des questions n'est au départ qu'une grille d'espaces 96x20 (point de code 0x20). Chaque réponse peut se déplacer autour de blocs de pièces adjacents, choisir jusqu'à 10 pièces (personnages) de puzzle et les ajouter au puzzle pour créer un nouveau programme. Ce programme doit imprimer le numéro de votre réponse (numéroté séquentiellement, à partir de 1).
Répondre
La chose clé à comprendre à propos de ce défi est qu'une seule personne peut répondre à la fois et chaque réponse dépend de celle qui la précède .
Il ne devrait jamais y avoir deux réponses avec le même nombre N . Si deux personnes répondent simultanément à un certain N , celui qui a répondu plus tard (même si c'est quelques secondes de différence) devrait gracieusement supprimer sa réponse.
Pour rendre cela plus fluide, essayez de vous en tenir aux étapes suivantes lors de la publication de votre réponse:
- Assurez-vous que quelqu'un a indépendamment vérifié l'exactitude de la réponse précédente (et laissé un commentaire correspondant).
Prenez le «plancher de puzzle» et la «boîte de pièces» précédents. Vous pouvez déplacer librement n'importe quel bloc de personnages adjacent sur le sol du puzzle en tant qu'unité (les personnages sont adjacents s'ils se touchent dans le sens horizontal ou vertical). Les blocs adjacents ne peuvent plus être divisés. Exemples sur une grille 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 |
Dans l'exemple valide, a
a
été déplacé d'un pas vers le bas et vers la droite. Ledf
bloc a été déplacé en haut à gauche. Lebce
bloc a été abaissé de 1. Il ag
été déplacé deux vers le haut et un vers la gauche. Leh
bloc a été déplacé complètement vers la gauche.
Dans le premier exemple invalidedf
a été séparé. Dans le second,a
a été supprimé. Dans le troisième,df
a été tourné.Ensuite, supprimez au moins 1 et jusqu'à 10 caractères de la "boîte de pièces" et choisissez autant d'espaces sur le "sol du puzzle", que vous remplacerez par ces caractères. Ceci est votre programme soumis. Veuillez inclure à la fois le nouveau «plancher de puzzle» et la «boîte de pièces» dans votre réponse.
Postez votre réponse dans le format suivant:
# 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]
où
N
est le numéro de votre réponse.C'est absolument vital pour le défi!J'ai fourni un outil de tableau de bord pour le défi pour aider à la comptabilité, et il s'appuie sur le modèle ci-dessus. (Voir en bas de l'article.)
- Veuillez inclure les barres verticales sur les côtés du sol du puzzle, car sinon, Stack Exchange n'affichera pas les lignes vides. Ces deux colonnes ne doivent jamais être considérées comme faisant partie du code.
- Un autre utilisateur devrait maintenant examiner votre soumission et laisser un commentaire "Exactitude vérifiée" si votre réponse suit toutes les règles (voir ci-dessous). Si ce n'est pas le cas, ils devraient laisser un commentaire signalant tout défaut. Vous avez alors 15 minutes pour résoudre ces problèmes. Si vous ne le faites pas, votre réponse sera considérée comme non valide, doit être supprimée et quelqu'un d'autre peut publier une réponse de suivi à la précédente. (Si cela se produit, vous êtes libre de soumettre une nouvelle réponse à tout moment.)
Ces réglementations peuvent sembler assez strictes, mais elles sont nécessaires pour éviter des réponses invalides quelque part dans la chaîne.
Les règles
- Un utilisateur ne peut soumettre qu'une seule réponse par période de 4 heures.(Ceci empêche les utilisateurs de regarder constamment la question et d'y répondre autant que possible.)
- Un utilisateur ne peut pas soumettre deux réponses consécutives. (Par exemple, depuis que j'ai soumis la réponse 1, je ne peux pas faire la réponse 2, mais je pourrais faire 3.)
- Aucune langue ne peut être utilisée plus d'une fois! Différentes versions de la même langue comptent comme la même langue. Les langues comptent comme distinctes si elles sont traditionnellement appelées par deux noms différents. (Il peut y avoir des ambiguïtés ici, mais ne laissez pas cela gâcher le concours.)
- Ne modifiez pas les réponses qui ont été vérifiées.
Si une erreur est découverte plus tôt dans la chaîne (c'est-à-dire après la publication des réponses de suivi), la réponse incriminée doit être supprimée. Cependant , toutes les réponses qui ont été publiées depuis ne doivent pas être modifiées pour refléter cela.
Votre programme doit imprimer
N
le numéro de votre réponse sur STDOUT ou l'alternative la plus proche. Il doit s'agir d'un programme complet et ne doit pas supposer un environnement REPL.- Vous pouvez ou non imprimer une nouvelle ligne de fin.
Que M soit le nombre de blocs que vous avez déplacés pour votre réponse (peu importe la distance) et P le nombre de caractères que vous avez ajouté au rez - de - puzzle, le score de votre réponse sera 10 + N - M - P . Comme exemple 5x4, si votre réponse a changé le sol du puzzle comme suit
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
votre score serait de 10 + N - 2 - 3 = N + 5 , car deux blocs ont été déplacés (
h
etbce
) et trois caractères ont été ajoutés (i
,j
etk
).Le gagnant sera l'utilisateur qui accumulera le plus grand nombre de points dans ses réponses. En cas d'égalité, l'utilisateur avec la dernière réponse l'emporte. J'accepterai la dernière réponse du gagnant.
- Dans le cas peu probable où tous les personnages seront épuisés, le défi se termine.
Tableau de bord
Voici un petit outil Dashboard, qui devrait vous aider avec la tenue de livres nécessaire pour ce type de défi.
Il affiche l'état actuel du défi - en particulier, s'il y a des réponses conflictuelles, si une réponse doit être vérifiée ou si la réponse suivante peut être publiée.
Il produit également une liste de toutes les langues qui ont été utilisées, ainsi qu'un classement de tous les utilisateurs. Veuillez vous en tenir au format de réponse ci-dessus, afin que le tableau de bord puisse lire les chaînes pertinentes de vos réponses. Sinon, vous pourriez ne pas être inclus dans le classement.
Veuillez me faire savoir ( idéalement dans le chat ) si vous repérez des bugs ou avez des idées sur la façon dont l'utilité de l'outil pourrait être améliorée.
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>
Scripts utiles
Voici deux scripts CJam pour votre commodité. Vous pouvez les exécuter dans l' interpréteur en ligne .
- Pour supprimer la première et la dernière colonne du sol du puzzle (pour obtenir le code réel), collez-le dans STDIN et exécutez
qN/1f>Wf<N*
. - Pour ajouter votre code à un rectangle 96x20 et ajouter les colonnes de barres verticales autour de lui, exécutez
qN/La20*+20<{96S*+96<'|\+'|+}%N*
votre code. Pour savoir quels caractères ont été supprimés de la boîte de morceaux entre deux réponses, collez-les tous les deux dans STDIN (sans ligne vide entre les deux) et exécutez
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
Il montrera également si des caractères ont été ajoutés (mais pas combien cependant).
Si quelqu'un veut les réimplémenter en tant qu'extraits de pile, je suis heureux de les ajouter à ce message.