Это зависимый от ответа вызов! Порядок ответов имеет значение, и ваша точная задача зависит от последнего ответа, который был опубликован. Вы можете отсортировать ответы по самым старым .
Давайте соберем вместе немного кода! Здесь 1920 случайных (печатных ASCII) символов. Думайте о них как о большой куче несортированных частей мозаики, все еще находящихся в коробке:
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
«Этаж», на котором мы размышляем, изначально представляет собой сетку пространств 96x20 (кодовая точка 0x20). Каждый ответ может перемещаться по соседним блокам кусочков, выбирать до 10 кусочков головоломки (персонажей) и добавлять их в головоломку, чтобы создать новую программу. Эта программа должна напечатать номер вашего ответа (нумеруются последовательно, начиная с 1).
Ответ
Главное, что нужно понять в этой задаче, - это то, что только один человек может ответить одновременно, и каждый ответ зависит от предыдущего .
Там никогда не должно быть два ответа с тем же номером N . Если два человека одновременно отвечают за некоторые N , тот, кто ответил позже (даже если разница в несколько секунд), должен любезно удалить свой ответ.
Чтобы сделать это немного более плавным, попробуйте придерживаться следующих шагов при публикации вашего ответа:
- Убедитесь, что кто-то самостоятельно проверил правильность предыдущего ответа (и оставил соответствующий комментарий).
Возьмите предыдущий «пол головоломки» и «коробку с кусочками». Вы можете перемещать любой смежный блок персонажей на полу головоломки как единое целое (персонажи соседствуют, если они касаются в горизонтальном или вертикальном направлении). Соседние блоки не могут быть разделены снова. Примеры на сетке 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 |
В действительном примере
a
был перемещен на один шаг вниз и вправо.df
Блок был перемещен в левом верхнем углу.bce
Блок был перемещен вниз 1.g
было переместить два вверх и один влево.h
Блок был перемещен весь путь влево.
В первом неверном примереdf
был отделен. Во второмa
был удален. В третьих,df
был повернут.Далее удалите как минимум 1 и до 10 символов из «коробки с кусочками» и выберите столько пробелов на «полу головоломки», которые вы замените этими персонажами. Это ваша заявленная программа. Пожалуйста, включите в свой ответ как новый «пол головоломки», так и «коробку с кусочками».
Опубликуйте свой ответ в следующем формате:
# 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]
где
N
номер вашего ответа.Это абсолютно необходимо для вызова! Я предоставил инструментальную панель для решения этой задачи, чтобы помочь с бухгалтерией, и он опирается на вышеупомянутый шаблон. (См. Нижнюю часть поста.)
- Пожалуйста, включите вертикальные полосы по бокам пола головоломки, потому что в противном случае Stack Exchange не будет отображать пустые строки. Эти два столбца никогда не должны рассматриваться как часть кода.
- Теперь другой пользователь должен просмотреть вашу заявку и оставить комментарий «Проверена правильность», если ваш ответ соответствует всем правилам (см. Ниже). Если это не так, они должны оставить комментарий, указывая на любые недостатки. Затем у вас есть 15 минут чтобы решить эти проблемы. Если вы этого не сделаете, ваш ответ будет считаться недействительным, должен быть удален, и кто-то другой может опубликовать последующий ответ на предыдущий. (Если это произойдет, вы можете в любое время отправить новый ответ.)
Эти правила могут показаться довольно строгими, но они необходимы, чтобы избежать неправильных ответов где-нибудь в цепочке.
Правила
- Пользователь может отправить только один ответ за 4 часа.(Это сделано для того, чтобы пользователи не могли постоянно следить за вопросом и отвечать на него как можно больше.)
- Пользователь не может отправить два ответа подряд. (например, так как я отправил ответ 1, я не могу сделать ответ 2, но я мог сделать 3.)
- Ни один язык не может быть использован более одного раза! Различные версии одного и того же языка считаются одним и тем же языком. Языки считаются различными, если они традиционно называются двумя разными именами. (Здесь могут быть некоторые неясности, но не позволяйте этому разрушить соревнование.)
- Не редактируйте ответы, которые были проверены.
Если ошибка будет обнаружено ранее в цепи (т.е. после того, как последующие ответы были размещены), нарушивший ответ должен быть удален. Тем не менее , все ответы, которые были опубликованы с тех пор, не должны быть изменены, чтобы отразить это.
Ваша программа должна напечатать
N
номер вашего ответа на STDOUT или ближайшую альтернативу. Это должна быть полная программа и не должна предполагать среду REPL.- Вы можете или не можете печатать завершающий перевод новой строки.
Пусть М будет количество блоков вы перешли на ваш ответ (независимо от того , как далеко) и P число символов , которые вы добавили к полу головоломки, оценка вашего ответа будет 10 + N - M - P . В качестве примера 5x4, если ваш ответ изменил пол головоломки следующим образом
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
Ваша оценка будет 10 + N - 2 - 3 = N + 5 , потому что два блока были перемещены (
h
иbce
) и три символа были добавлены (i
,j
иk
).Победителем станет пользователь, набравший наибольшее количество баллов за свои ответы. В случае ничьей побеждает пользователь с последним ответом. Я приму последний ответ победителя.
- В маловероятном случае, когда все персонажи будут израсходованы, испытание заканчивается.
Приборная доска
Вот небольшой инструмент Dashboard, который должен помочь с необходимой бухгалтерией для этого типа задач.
Он отображает текущий статус запроса - в частности, если есть противоречивые ответы, если ответ необходимо проверить, или если следующий ответ может быть опубликован.
Он также создает список всех использованных языков, а также список лидеров всех пользователей. Пожалуйста, придерживайтесь формата ответа выше, чтобы приборная панель могла считывать соответствующие строки из ваших ответов. В противном случае вы не можете быть включены в таблицу лидеров.
Пожалуйста, дайте мне знать (в идеале в чате ), если вы обнаружите какие-либо ошибки или у вас есть идеи, как можно повысить полезность инструмента.
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>
Полезные скрипты
Вот два скрипта CJam для вашего удобства. Вы можете запустить их в онлайн-переводчике .
- Чтобы удалить первый и последний столбец с пола головоломки (чтобы получить реальный код), вставьте его в STDIN и запустите
qN/1f>Wf<N*
. - Чтобы добавить код в прямоугольник 96x20 и добавить столбцы вертикальных полос вокруг него, запустите
qN/La20*+20<{96S*+96<'|\+'|+}%N*
код. Чтобы выяснить, какие символы были удалены из коробки частей между двумя ответами, вставьте их оба в STDIN (без пустой строки между ними) и запустите
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
Он также покажет, были ли добавлены символы (но не сколько).
Если кто-то хочет переопределить их как фрагменты стека, я буду рад добавить их в этот пост.