Đây là một thách thức phụ thuộc vào câu trả lời! Thứ tự câu trả lời là vấn đề và nhiệm vụ chính xác của bạn phụ thuộc vào câu trả lời cuối cùng được đăng. Bạn có thể muốn sắp xếp các câu trả lời theo cách cũ nhất .
Chúng ta hãy ghép một số mã! Dưới đây là 1920 ký tự ngẫu nhiên (có thể in ASCII). Hãy nghĩ về chúng như một đống lớn các mảnh ghép hình chưa ghép hình vẫn còn trong hộp:
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
"Tầng" chúng tôi khó hiểu ban đầu chỉ là một lưới không gian 96x20 (mã điểm 0x20). Mỗi câu trả lời có thể di chuyển xung quanh các khối mảnh liền kề và chọn tối đa 10 mảnh ghép (ký tự) và thêm chúng vào câu đố để tạo ra một chương trình mới. Chương trình đó phải in số câu trả lời của bạn (được đánh số liên tục, bắt đầu từ 1).
Trả lời
Điều quan trọng để hiểu về thử thách này là chỉ một người có thể trả lời tại một thời điểm và mỗi câu trả lời phụ thuộc vào câu hỏi trước nó .
Không bao giờ nên hai câu trả lời với cùng một số N . Nếu hai người tình cờ trả lời đồng thời cho một số N , người trả lời sau (ngay cả khi đó chỉ là một vài giây) nên xóa câu trả lời của họ.
Để làm cho điều này chạy trơn tru hơn một chút, hãy thử làm theo các bước sau khi đăng câu trả lời của bạn:
- Hãy chắc chắn rằng ai đó đã xác minh độc lập tính chính xác của câu trả lời trước đó (và để lại nhận xét tương ứng).
Lấy "sàn câu đố" trước đó và "hộp các mảnh". Bạn có thể di chuyển bất kỳ khối ký tự liền kề nào trên sàn câu đố xung quanh dưới dạng một đơn vị (các ký tự nằm liền kề nếu chúng chạm dọc theo hướng ngang hoặc dọc). Các khối liền kề không thể được tách ra một lần nữa. Ví dụ trên lưới 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 |
Trong ví dụ hợp lệ,
a
đã được di chuyển xuống một bước và phải. Cácdf
khối đã được chuyển đến phía trên trái. Cácbce
khối đã được chuyển xuống bằng 1.g
đã di chuyển hai lên và một bên trái. Cách
khối đã được di chuyển tất cả các bên trái.
Trong ví dụ không hợp lệ đầu tiêndf
đã được tách ra. Trong lần thứ hai,a
đã được gỡ bỏ. Trong phần ba,df
đã được luân chuyển.Tiếp theo, xóa ít nhất 1 và tối đa 10 ký tự khỏi "hộp các mảnh" và chọn nhiều khoảng trống trên "sàn câu đố" mà bạn sẽ thay thế bằng các ký tự đó. Đây là chương trình gửi của bạn. Vui lòng bao gồm cả "sàn câu đố" mới và "hộp các mảnh" trong câu trả lời của bạn.
Gửi câu trả lời của bạn ở định dạng sau:
# 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ơi
N
là số câu trả lời của bạn.Điều này là hoàn toàn quan trọng đối với các thách thức! Tôi đã cung cấp một công cụ bảng điều khiển cho thử thách để giúp ghi sổ và nó phụ thuộc vào mẫu trên. (Xem dưới cùng của bài viết.)
- Vui lòng bao gồm các thanh dọc ở hai bên của sàn câu đố, vì nếu không, Stack Exchange sẽ không hiển thị các dòng trống. Hai cột này không bao giờ được coi là một phần của mã.
- Một người dùng khác bây giờ nên xem lại bài đăng của bạn và để lại nhận xét "Xác minh chính xác" nếu câu trả lời của bạn tuân theo tất cả các quy tắc (xem bên dưới). Nếu không, họ nên để lại một bình luận chỉ ra bất kỳ sai sót nào. Sau đó, bạn đã có 15 phút để khắc phục những vấn đề đó. Nếu bạn không, câu trả lời của bạn sẽ bị coi là không hợp lệ, nên bị xóa và người khác có thể đăng câu trả lời tiếp theo cho câu trả lời trước đó. (Nếu điều này xảy ra, bạn có thể gửi câu trả lời mới bất cứ lúc nào.)
Các quy định này có vẻ khá nghiêm ngặt, nhưng chúng là cần thiết để tránh các câu trả lời không hợp lệ ở đâu đó trong chuỗi.
Những quy định
- Một người dùng chỉ có thể gửi một câu trả lời trong mỗi khoảng thời gian 4 giờ. (Điều này là để ngăn người dùng liên tục xem câu hỏi và trả lời nhiều nhất có thể.)
- Một người dùng không thể gửi hai câu trả lời liên tiếp. (ví dụ: kể từ khi tôi gửi câu trả lời 1, tôi không thể trả lời 2, nhưng tôi có thể làm 3.)
- Không có ngôn ngữ có thể được sử dụng nhiều hơn một lần! Các phiên bản khác nhau của cùng một ngôn ngữ được tính là cùng một ngôn ngữ. Ngôn ngữ được tính là khác biệt nếu chúng được gọi theo truyền thống bởi hai tên khác nhau. (Có thể có một số sự mơ hồ ở đây nhưng đừng để điều đó phá hỏng cuộc thi.)
- Không chỉnh sửa câu trả lời đã được xác minh.
Nếu một lỗi được phát hiện sớm hơn trong chuỗi (tức là sau khi câu trả lời tiếp theo đã được đăng), câu trả lời vi phạm sẽ bị xóa. Tuy nhiên , tất cả các câu trả lời đã được đăng từ đó không nên thay đổi để phản ánh điều này.
Chương trình của bạn phải in
N
, số câu trả lời của bạn, đến STDOUT hoặc thay thế gần nhất. Nó phải là một chương trình đầy đủ và không được sử dụng môi trường REPL.- Bạn có thể hoặc không thể in một dòng mới.
Hãy để M là số khối bạn chuyển cho câu trả lời của bạn (bất kể có bao xa) và P số lượng ký tự mà bạn thêm vào sàn câu đố, số điểm của câu trả lời của bạn sẽ được 10 + N - M - P . Như một ví dụ 5x4, nếu câu trả lời của bạn thay đổi sàn câu đố như sau
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
điểm số của bạn sẽ là 10 + N - 2 - 3 = N + 5 , bởi vì hai khối đã được chuyển (
h
vàbce
) và ba nhân vật đã được thêm vào (i
,j
vàk
).Người chiến thắng sẽ là người dùng tích lũy số điểm lớn nhất qua các câu trả lời của họ. Trong trường hợp hòa, người dùng có câu trả lời mới nhất sẽ thắng. Tôi sẽ chấp nhận câu trả lời mới nhất của người chiến thắng.
- Trong trường hợp không chắc là tất cả các nhân vật sẽ được sử dụng hết, thử thách kết thúc.
bảng điều khiển
Dưới đây là một công cụ Bảng điều khiển nhỏ, sẽ giúp ích cho việc ghi sổ cần thiết cho loại thử thách này.
Nó hiển thị trạng thái hiện tại của thử thách - đặc biệt, nếu có câu trả lời mâu thuẫn, nếu câu trả lời cần được xác minh hoặc nếu câu trả lời tiếp theo có thể được đăng.
Nó cũng tạo ra một danh sách tất cả các ngôn ngữ đã được sử dụng, cũng như bảng xếp hạng của tất cả người dùng. Vui lòng bám vào định dạng câu trả lời ở trên, để bảng điều khiển có thể đọc các chuỗi có liên quan từ câu trả lời của bạn. Nếu không, bạn có thể không được bao gồm trong bảng thành tích.
Vui lòng cho tôi biết ( lý tưởng nhất là trong trò chuyện ) nếu bạn phát hiện ra bất kỳ lỗi nào hoặc có một số ý tưởng về tính hữu ích của công cụ có thể được cải thiện.
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>
Kịch bản hữu ích
Đây là hai tập lệnh CJam để thuận tiện cho bạn. Bạn có thể chạy chúng trong trình thông dịch trực tuyến .
- Để xóa cột đầu tiên và cuối cùng khỏi sàn câu đố (để lấy mã thực tế), hãy dán nó vào STDIN và chạy
qN/1f>Wf<N*
. - Để chuyển mã của bạn ra một hình chữ nhật 96x20 và thêm các cột của các thanh dọc xung quanh nó, hãy chạy
qN/La20*+20<{96S*+96<'|\+'|+}%N*
trên mã của bạn. Để tìm ra các ký tự đã bị xóa khỏi hộp các mảnh giữa hai câu trả lời, dán cả hai vào STDIN (không có một dòng trống ở giữa) và chạy
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
Nó cũng sẽ hiển thị nếu các ký tự được thêm vào (không phải bao nhiêu).
Nếu ai đó muốn thực hiện lại chúng dưới dạng Stack Snippets, tôi rất vui khi thêm chúng vào bài đăng này.