Este é um desafio que depende da resposta! A ordem das respostas é importante e sua tarefa exata depende da última resposta publicada. Você pode ordenar as respostas por mais antigas .
Vamos juntar algum código! Aqui estão 1920 caracteres aleatórios (ASCII imprimíveis). Pense neles como um grande monte de peças de quebra-cabeças não classificadas ainda na caixa:
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
O "piso" no qual estamos intrigando é inicialmente apenas uma grade de 96x20 de espaços (ponto de código 0x20). Cada resposta pode se mover pelos blocos adjacentes de peças, escolher até 10 peças do quebra-cabeça (caracteres) e adicioná-las ao quebra-cabeça para criar um novo programa. Esse programa deve imprimir o número da sua resposta (numerada sequencialmente, iniciando em 1).
Respondendo
O principal a entender sobre esse desafio é que apenas uma pessoa pode responder de cada vez e cada resposta depende da resposta anterior .
Nunca deve haver duas respostas com o mesmo número N . Se duas pessoas responderem simultaneamente por algum N , quem responder mais tarde (mesmo que haja uma diferença de alguns segundos) deve excluir graciosamente sua resposta.
Para tornar isso um pouco mais suave, tente seguir as etapas abaixo ao postar sua resposta:
- Certifique-se de que alguém tenha verificado independentemente a exatidão da resposta anterior (e deixado um comentário correspondente).
Pegue o "chão do quebra-cabeça" anterior e a "caixa de peças". Você pode mover qualquer bloco adjacente de caracteres no chão do quebra-cabeça livremente como uma unidade (os personagens são adjacentes se tocarem na direção horizontal ou vertical). Blocos adjacentes não podem ser divididos novamente. Exemplos em uma grade 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 |
No exemplo válido,
a
foi movido um passo para baixo e para a direita. Odf
bloco foi movido para o canto superior esquerdo. Obce
bloco foi movido para baixo por 1. Og
movimento foi dois para cima e um para a esquerda. Oh
bloco foi movido todo para a esquerda.
No primeiro exemplo inválidodf
foi separado. No segundo,a
foi removido. No terceiro,df
foi rotacionado.Em seguida, remova pelo menos 1 e até 10 caracteres da "caixa de peças" e escolha quantos espaços no "chão do quebra-cabeça" serão substituídos por esses personagens. Este é o seu programa enviado. Inclua o novo "chão do quebra-cabeça" e a "caixa de peças" na sua resposta.
Poste sua resposta no seguinte 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]
Onde
N
está o número da sua resposta.Isso é absolutamente vital para o desafio! Forneci uma ferramenta de painel para o desafio de ajudar na contabilidade e ela se baseia no modelo acima. (Veja a parte inferior da postagem.)
- Inclua as barras verticais nas laterais do piso do quebra-cabeça, pois, caso contrário, o Stack Exchange não exibirá linhas vazias. Essas duas colunas nunca devem ser consideradas parte do código.
- Outro usuário agora deve revisar seu envio e deixar um comentário "Correção verificada" se sua resposta seguir todas as regras (veja abaixo). Caso contrário, eles devem deixar um comentário indicando falhas. Você tem 15 minutos para corrigir esses problemas. Caso contrário, sua resposta será considerada inválida, deverá ser excluída e outra pessoa poderá postar uma resposta de acompanhamento na resposta anterior. (Se isso acontecer, você poderá enviar uma nova resposta a qualquer momento.)
Esses regulamentos podem parecer bastante rígidos, mas são necessários para evitar respostas inválidas em algum lugar da cadeia.
As regras
- Um usuário pode enviar apenas uma resposta por período de 4 horas.(Isso evita que os usuários assistam constantemente à pergunta e respondam o máximo possível.)
- Um usuário não pode enviar duas respostas seguidas. (por exemplo, desde que eu enviei a resposta 1, não posso responder 2, mas poderia fazer 3.)
- Nenhum idioma pode ser usado mais de uma vez! Versões diferentes do mesmo idioma contam como o mesmo idioma. Os idiomas contam como distintos se forem tradicionalmente chamados por dois nomes diferentes. (Pode haver algumas ambiguidades aqui, mas não deixe que isso estrague o concurso.)
- Não edite respostas que foram verificadas.
Se um erro for descoberto mais cedo na cadeia (ou seja, após as respostas serem postadas), a resposta incorreta deve ser excluída. No entanto , todas as respostas postadas desde então não devem ser alteradas para refletir isso.
Seu programa precisa imprimir
N
, o número de sua resposta, em STDOUT ou na alternativa mais próxima. Ele deve ser um programa completo e não deve assumir um ambiente REPL.- Você pode ou não imprimir uma nova linha à direita.
Deixe M ser o número de blocos movidos pela sua resposta (não importa quão longe) e P o número de caracteres que você adicionou ao chão quebra-cabeça, a pontuação de sua resposta será 10 + N - M - P . Como um exemplo de 5x4, se sua resposta mudou o chão do quebra-cabeça da seguinte forma
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
sua pontuação seria 10 + N - 2 - 3 = N + 5 , porque dois blocos foram movidos (
h
ebce
) e três caracteres foram adicionados (i
,j
ek
).O vencedor será o usuário que acumular o maior número de pontos nas respostas. Em caso de empate, o usuário com a resposta mais recente vence. Aceitarei a última resposta do vencedor.
- No caso improvável de todos os personagens serem usados, o desafio termina.
painel de controle
Aqui está uma pequena ferramenta do Painel, que deve ajudar na contabilidade necessária para esse tipo de desafio.
Ele exibe o status atual do desafio - em particular, se houver respostas conflitantes, se uma resposta precisa ser verificada ou se a próxima resposta pode ser postada.
Também produz uma lista de todos os idiomas que foram usados, bem como uma tabela de classificação de todos os usuários. Atenha-se ao formato de resposta acima, para que o painel possa ler as sequências relevantes de suas respostas. Caso contrário, você pode não ser incluído na tabela de classificação.
Informe-me ( idealmente no chat ) se você encontrar algum erro ou tiver alguma idéia de como a utilidade da ferramenta pode ser melhorada.
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 úteis
Aqui estão dois scripts CJam para sua conveniência. Você pode executá-los no intérprete online .
- Para remover a primeira e a última coluna do chão do quebra-cabeça (para obter o código real), cole-o no STDIN e execute
qN/1f>Wf<N*
. - Para inserir seu código em um retângulo de 96 x 20 e adicionar as colunas de barras verticais ao redor, execute
qN/La20*+20<{96S*+96<'|\+'|+}%N*
o código. Para descobrir quais caracteres foram removidos da caixa de pedaços entre duas respostas, cole os dois em STDIN (sem uma linha vazia no meio) e execute
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
Também mostrará se os caracteres foram adicionados (mas não quantos).
Se alguém quiser reimplementá-los como snippets de pilha, será um prazer adicioná-los a esta postagem.