นี่คือความท้าทายขึ้นอยู่กับคำตอบ! ลำดับของคำตอบมีความสำคัญและงานที่แน่นอนของคุณขึ้นอยู่กับคำตอบสุดท้ายที่โพสต์ คุณอาจต้องการที่จะเรียงลำดับคำตอบโดยที่เก่าแก่ที่สุด
มารวมรหัสกัน! ต่อไปนี้คือ 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ตัวอักษรออกจาก "box of pieces" และเลือกช่องว่างมากมายบน "Puzzle floor" ซึ่งคุณจะแทนที่ด้วยอักขระเหล่านั้น นี่คือโปรแกรมที่คุณส่ง โปรดระบุทั้ง "ปริศนาพื้น" และ "กล่องชิ้นส่วน" ใหม่ในคำตอบของคุณ
โพสต์คำตอบของคุณในรูปแบบต่อไปนี้:
# 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
เป็นจำนวนของคำตอบของคุณนี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับการท้าทาย! ฉันได้จัดทำเครื่องมือแดชบอร์ดสำหรับความท้าทายที่จะช่วยในการทำบัญชีและมันอาศัยเทมเพลตข้างต้น (ดูด้านล่างของโพสต์)
- โปรดรวมแถบแนวตั้งที่ด้านข้างของพื้นจิ๊กซอว์เพราะมิฉะนั้น Exchange Stack จะไม่แสดงบรรทัดว่างเปล่า สองคอลัมน์นี้ไม่ถือว่าเป็นส่วนหนึ่งของรหัส
- ตอนนี้ผู้ใช้รายอื่นควรตรวจทานการส่งของคุณและแสดงความคิดเห็น "การยืนยันความถูกต้อง" หากคำตอบของคุณเป็นไปตามกฎทั้งหมด (ดูด้านล่าง) หากไม่เป็นเช่นนั้นพวกเขาควรแสดงความคิดเห็นเพื่อชี้ให้เห็นถึงข้อบกพร่องใด ๆ จากนั้นคุณมีเวลา 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
)ผู้ชนะจะเป็นผู้ใช้ที่สะสมคะแนนมากที่สุดในคำตอบของพวกเขา ในกรณีที่เสมอกันผู้ใช้ที่มีคำตอบล่าสุดจะเป็นผู้ชนะ ฉันจะยอมรับคำตอบล่าสุดของผู้ชนะ
- ในเหตุการณ์ที่ไม่น่าจะเกิดขึ้นซึ่งตัวละครทั้งหมดจะหมดความท้าทายจะสิ้นสุดลง
แผงควบคุม
นี่คือเครื่องมือแดชบอร์ดเล็ก ๆ ซึ่งควรช่วยทำบัญชีที่จำเป็นสำหรับความท้าทายประเภทนี้
จะแสดงสถานะปัจจุบันของความท้าทาย - โดยเฉพาะอย่างยิ่งหากมีคำตอบที่ขัดแย้งกันหากคำตอบต้องได้รับการตรวจสอบหรือถ้าคำตอบต่อไปสามารถโพสต์
นอกจากนี้ยังสร้างรายการภาษาทั้งหมดที่มีการใช้งานรวมถึงกระดานผู้นำของผู้ใช้ทั้งหมด โปรดยึดรูปแบบคำตอบข้างต้นเพื่อให้แดชบอร์ดสามารถอ่านสตริงที่เกี่ยวข้องจากคำตอบของคุณ ไม่เช่นนั้นคุณอาจไม่ได้รวมอยู่ในกระดานแต้มนำ
โปรดแจ้งให้เราทราบ ( นึกคิดในการแชท ) หากคุณพบข้อบกพร่องใด ๆ หรือมีความคิดบางอย่างเกี่ยวกับวิธีการปรับปรุงประโยชน์ของเครื่องมือ
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}{*}?}
มันจะแสดงว่ามีการเพิ่มตัวอักษร(ไม่ว่าจะมีจำนวนเท่าใด)
หากมีคนต้องการปรับใช้สิ่งเหล่านี้เป็นกองย่อยฉันยินดีที่จะเพิ่มลงในโพสต์นี้