¡Este es un desafío dependiente de la respuesta! El orden de las respuestas es importante, y su tarea exacta depende de la última respuesta publicada. Es posible que desee ordenar las respuestas por las más antiguas .
¡Vamos a armar un código! Aquí hay 1920 caracteres aleatorios (ASCII imprimibles). Piense en ellos como un gran montón de piezas de rompecabezas sin clasificar todavía en la caja:
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
El "piso" en el que estamos desconcertando es inicialmente solo una cuadrícula de espacios de 96x20 (punto de código 0x20). Cada respuesta puede moverse alrededor de bloques de piezas adyacentes, y elegir hasta 10 piezas de rompecabezas (personajes) y agregarlas al rompecabezas para crear un nuevo programa. Ese programa debe imprimir el número de su respuesta (numerada secuencialmente, comenzando desde 1).
Respondiendo
La clave para entender sobre este desafío es que solo una persona puede responder a la vez y cada respuesta depende de la anterior .
Nunca debe haber dos respuestas con el mismo número N . Si dos personas responden simultáneamente por un poco de N , el que respondió más tarde (incluso si es una diferencia de unos segundos) debería eliminar gentilmente su respuesta.
Para que esto funcione un poco más suave, trate de seguir los siguientes pasos cuando publique su respuesta:
- Asegúrese de que alguien haya verificado independientemente la corrección de la respuesta anterior (y haya dejado un comentario correspondiente).
Tome el "piso de rompecabezas" y la "caja de piezas" anteriores. Puedes mover cualquier bloque adyacente de personajes en el piso del rompecabezas libremente como una unidad (los personajes son adyacentes si se tocan en la dirección horizontal o vertical). Los bloques adyacentes no se pueden dividir nuevamente. Ejemplos en una cuadrícula de 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 |
En el ejemplo válido,
a
se movió un paso hacia abajo y hacia la derecha. Eldf
bloque se movió a la esquina superior izquierda. Elbce
bloque se movió hacia abajo por 1. Elg
se movió dos hacia arriba y uno hacia la izquierda. Elh
bloque se movió completamente hacia la izquierda.
En el primer ejemplo inválidodf
se ha separado. En el segundo,a
se ha eliminado. En el tercero,df
se ha rotado.A continuación, elimine al menos 1 y hasta 10 caracteres de la "caja de piezas" y elija esa cantidad de espacios en el "piso del rompecabezas", que reemplazará por esos caracteres. Este es su programa enviado. Incluya tanto el nuevo "rompecabezas" como la "caja de piezas" en su respuesta.
Publique su respuesta en el siguiente 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]
¿Dónde
N
está el número de tu respuesta?¡Esto es absolutamente vital para el desafío! He proporcionado una herramienta de tablero para el desafío de ayudar con la contabilidad, y se basa en la plantilla anterior. (Ver al final de la publicación).
- Incluya las barras verticales a los lados del piso del rompecabezas, porque de lo contrario, Stack Exchange no mostrará líneas vacías. Estas dos columnas nunca deben considerarse parte del código.
- Otro usuario ahora debería revisar su envío y dejar un comentario "Verificación correcta" si su respuesta sigue todas las reglas (ver más abajo). Si no es así, deben dejar un comentario señalando cualquier falla. Luego tienes 15 minutos para solucionar esos problemas. Si no lo hace, su respuesta se considerará inválida, debería eliminarse y otra persona puede publicar una respuesta de seguimiento a la anterior. (Si esto sucede, puede enviar una nueva respuesta en cualquier momento).
Estas regulaciones pueden parecer bastante estrictas, pero son necesarias para evitar respuestas no válidas en algún lugar de la cadena.
Las normas
- Un usuario solo puede enviar una respuesta por período de 4 horas. (Esto es para evitar que los usuarios vean constantemente la pregunta y respondan lo más posible).
- Un usuario no puede enviar dos respuestas seguidas. (por ejemplo, desde que envié la respuesta 1 no puedo responder 2, pero podría responder 3.)
- ¡Ningún idioma puede ser usado más de una vez! Las diferentes versiones del mismo idioma cuentan como el mismo idioma. Los idiomas cuentan como distintos si tradicionalmente se llaman con dos nombres diferentes. (Puede haber algunas ambigüedades aquí, pero no dejes que eso arruine el concurso).
- No edite respuestas que hayan sido verificadas.
Si se descubre un error antes en la cadena (es decir, después de que se hayan publicado las respuestas de seguimiento), la respuesta ofensiva debe eliminarse. Sin embargo , todas las respuestas que se han publicado desde entonces no deben cambiarse para reflejar esto.
Su programa tiene que imprimir
N
, el número de su respuesta, a STDOUT o la alternativa más cercana. Tiene que ser un programa completo y no debe asumir un entorno REPL.- Puede o no imprimir una nueva línea final.
Deje que M es el número de bloques que movió por su respuesta (no importa lo lejos) y P el número de caracteres que agregó a la baja rompecabezas, la puntuación de su respuesta será 10 + N - M - P . Como ejemplo de 5x4, si su respuesta cambió el piso del rompecabezas de la siguiente manera
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
su puntaje sería 10 + N - 2 - 3 = N + 5 , porque se movieron dos bloques (
h
ybce
) y se agregaron tres caracteres (i
,j
yk
).El ganador será el usuario que acumule la mayor cantidad de puntos en sus respuestas. En caso de empate, el usuario con la última respuesta gana. Aceptaré la última respuesta del ganador.
- En el caso poco probable de que todos los personajes se agoten, el desafío termina.
Tablero
Aquí hay una pequeña herramienta de Tablero, que debería ayudar con la contabilidad necesaria para este tipo de desafío.
Muestra el estado actual del desafío, en particular, si hay respuestas en conflicto, si es necesario verificar una respuesta o si se puede publicar la siguiente respuesta.
También produce una lista de todos los idiomas que se han utilizado, así como una tabla de clasificación de todos los usuarios. Siga el formato de respuesta anterior para que el panel pueda leer las cadenas relevantes de sus respuestas. De lo contrario, es posible que no esté incluido en la tabla de clasificación.
Avíseme ( idealmente en el chat ) si detecta algún error o tiene alguna idea de cómo se podría mejorar la utilidad de la herramienta.
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>
Guiones útiles
Aquí hay dos scripts de CJam para su conveniencia. Puede ejecutarlos en el intérprete en línea .
- Para eliminar la primera y la última columna del piso del rompecabezas (para obtener el código real), péguelo en STDIN y ejecútelo
qN/1f>Wf<N*
. - Para rellenar su código en un rectángulo de 96x20 y agregar las columnas de barras verticales a su alrededor, ejecute
qN/La20*+20<{96S*+96<'|\+'|+}%N*
su código. Para averiguar qué caracteres se eliminaron de la caja de piezas entre dos respuestas, pegue ambos en STDIN (sin una línea vacía en el medio) y ejecute
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
También mostrará si se agregaron caracteres (no cuántos).
Si alguien quiere volver a implementar estos como fragmentos de pila, me complace agregarlos a esta publicación.