이것은 답변에 따른 도전입니다! 답변 순서는 중요하며 정확한 작업은 마지막으로 게시 된 답변에 따라 다릅니다. 가장 오래된 답변 을 정렬 할 수 있습니다 .
몇 가지 코드를 함께합시다! 다음은 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
답의 수는 ?이것은 도전에 절대적으로 중요합니다! 부기와 관련하여 도움을 줄 수있는 대시 보드 도구를 제공했으며 위의 템플릿을 사용합니다. (포스트 하단 참조)
- 스택 교환에는 빈 줄이 표시되지 않으므로 퍼즐 바닥 측면에 세로 막대를 포함하십시오. 이 두 열은 코드의 일부로 간주되지 않습니다.
- 다른 사용자가 제출 한 내용을 검토하고 답변이 모든 규칙 (아래 참조)을 준수하는 경우 "수정 확인"이라는 메모를 남기십시오. 그렇지 않은 경우, 결함을 지적하는 주석을 남겨야합니다. 그런 다음 15 분 안에 해당 문제를 해결해야합니다. 그렇지 않으면 답변이 유효하지 않은 것으로 간주되어 삭제되어야하며 다른 사람이 이전 답변에 대한 후속 답변을 게시 할 수 있습니다. (이러한 경우 언제든지 새 답변을 제출할 수 있습니다.)
이러한 규정은 다소 엄격한 것처럼 보일 수 있지만 체인의 어딘가에 잘못된 답변을 피하기 위해 필요합니다.
규칙
- 사용자는 4 시간마다 하나의 답변 만 제출할 수 있습니다. (이는 사용자가 지속적으로 질문을보고 최대한 많이 답변하지 못하도록하기위한 것입니다.)
- 사용자는 두 개의 답변을 한 번에 제출할 수 없습니다. (예 : 답변 1을 제출 한 후 답변 2는 할 수 없지만 3은 할 수 있습니다.)
- 언어를 두 번 이상 사용할 수 없습니다! 같은 언어의 다른 버전은 같은 언어로 계산됩니다. 언어가 전통적으로 두 개의 다른 이름으로 불려지는 경우 언어는 별개의 것으로 간주됩니다. (여기에 모호한 부분이있을 수 있지만 그로 인해 대회가 망가지지 않도록하십시오.)
- 확인 된 답변을 편집하지 마십시오.
체인에서 초기 에 실수가 발견 되면 (즉, 후속 답변을 게시 한 후) 문제가되는 답변을 삭제해야합니다. 그러나 이후에 게시 된 모든 답변 이이를 반영하도록 변경 되어서는 안됩니다 .
프로그램이 인쇄되어야합니다
N
답의 수인 STDOUT 또는 가장 가까운 대안 해야합니다. 전체 프로그램이어야하며 REPL 환경을 가정해서는 안됩니다.- 후행 줄 바꿈을 인쇄하거나 인쇄하지 않을 수 있습니다.
하자없는 남성 의 숫자 블록 과 (얼마나 멀리 상관없이) 당신이 당신의 대답을 이동 P 는 퍼즐 바닥에 추가 된 문자의 수는, 당신의 대답의 점수가 될 것 M - - P 10 + N . 5x4 예를 들어, 답변이 퍼즐 바닥을 다음과 같이 변경하면
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
2 개의 블록이 이동되고 (
h
및bce
) 3 개의 문자가 추가되어 (i
,j
및k
) 점수가 10 + N-2-3 = N + 5 가됩니다 .승자 는 답변에서 가장 많은 수의 포인트를 누적 한 사용자가됩니다. 동점 인 경우 최신 답변을 얻은 사용자가 승리합니다. 승자의 최신 답변을 수락하겠습니다.
- 드물게 모든 캐릭터가 다 쓰게되면 도전이 끝납니다.
계기반
다음은 이러한 유형의 문제에 필요한 부기를 유지하는 데 도움이되는 작은 대시 보드 도구입니다.
챌린지의 현재 상태, 특히 상충되는 답변이 있거나 답변을 확인해야하는 경우 또는 다음 답변을 게시 할 수있는 경우에 표시됩니다.
또한 사용 된 모든 언어 목록과 모든 사용자의 리더 보드를 생성합니다. 대시 보드가 답변에서 관련 문자열을 읽을 수 있도록 위의 답변 형식을 고수하십시오. 그렇지 않으면 리더 보드에 포함되지 않을 수 있습니다.
버그를 발견하거나 도구의 유용성을 개선 할 수있는 방법에 대한 아이디어가 있으면 알려주십시오 ( 이상적으로는 채팅에서 ).
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}{*}?}
또한 문자가 추가 되었는지 표시됩니다 (얼마나 많지는 않지만).
누군가 이것을 스 니펫으로 다시 구현하고 싶다면이 게시물에 추가하게되어 기쁩니다.