Ini adalah tantangan yang bergantung pada jawaban! Urutan jawaban penting, dan tugas Anda yang tepat tergantung pada jawaban terakhir yang diposting. Anda mungkin ingin mengurutkan jawaban berdasarkan yang terlama .
Mari kita mengumpulkan beberapa kode! Berikut adalah 1920 karakter acak (cetak ASCII). Pikirkan mereka sebagai tumpukan besar potongan puzzle yang belum disortir yang masih ada di dalam kotak:
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
"Lantai" yang kami bingung awalnya hanya berupa kisi spasi 96x20 (titik kode 0x20). Setiap jawaban dapat bergerak di sekitar blok potongan yang berdekatan, dan memilih hingga 10 buah puzzle (karakter) dan menambahkannya ke puzzle untuk membuat program baru. Program itu harus mencetak nomor jawaban Anda (diberi nomor secara berurutan, mulai dari 1).
Menjawab
Hal utama yang perlu dipahami tentang tantangan ini adalah bahwa hanya satu orang yang dapat menjawab pada satu waktu dan setiap jawaban tergantung pada yang sebelumnya .
Seharusnya tidak ada dua jawaban dengan nomor N yang sama . Jika dua orang secara bersamaan menjawab beberapa N , orang yang menjawab kemudian (bahkan jika itu perbedaan beberapa detik) harus dengan ramah menghapus jawaban mereka.
Agar ini berjalan sedikit lebih lancar, cobalah untuk tetap pada langkah-langkah berikut saat memposting jawaban Anda:
- Pastikan seseorang telah memverifikasi secara independen kebenaran jawaban sebelumnya (dan meninggalkan komentar yang sesuai).
Ambil "lantai puzzle" sebelumnya dan "kotak keping". Anda dapat memindahkan blok karakter yang berdekatan di lantai puzzle secara bebas sebagai unit (karakter berdekatan jika menyentuh sepanjang arah horizontal atau vertikal). Blok yang berdekatan tidak dapat dipisahkan lagi. Contoh pada kisi 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 |
Dalam contoh yang valid,
a
dipindahkan satu langkah ke bawah dan ke kanan. Thedf
blok dipindahkan ke kiri atas. Thebce
blok dipindahkan ke bawah oleh 1.g
adalah langkah dua dan satu ke kiri. Theh
blok dipindahkan semua jalan ke kiri.
Dalam contoh tidak valid pertamadf
telah dipisahkan. Yang kedua,a
sudah dihapus. Yang ketiga,df
sudah diputar.Selanjutnya, hapus setidaknya 1 dan hingga 10 karakter dari "kotak keping" dan pilih banyak ruang di "lantai teka-teki", yang akan Anda gantikan dengan karakter tersebut. Ini adalah program yang Anda kirimkan. Harap sertakan "lantai puzzle" dan "kotak keping" baru dalam jawaban Anda.
Posting jawaban Anda dalam format berikut:
# 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]
di mana
N
nomor jawaban Anda.Ini sangat penting untuk tantangan! Saya telah menyediakan alat dasbor untuk tantangan untuk membantu pembukuan, dan itu bergantung pada templat di atas. (Lihat bagian bawah pos.)
- Harap sertakan bilah vertikal di sisi lantai puzzle, karena jika tidak, Stack Exchange tidak akan menampilkan garis kosong. Dua kolom ini tidak pernah dianggap sebagai bagian dari kode.
- Pengguna lain sekarang harus meninjau kiriman Anda dan meninggalkan komentar "Kebenaran diverifikasi" jika jawaban Anda mengikuti semua aturan (lihat di bawah). Jika tidak, mereka harus meninggalkan komentar yang menunjukkan kekurangan. Anda punya waktu 15 menit untuk memperbaiki masalah itu. Jika tidak, jawaban Anda akan dianggap tidak valid, harus dihapus, dan orang lain dapat memposting jawaban tindak lanjut ke yang sebelumnya. (Jika ini terjadi, Anda bebas mengirimkan jawaban baru kapan saja.)
Peraturan ini mungkin tampak agak ketat, tetapi mereka perlu untuk menghindari jawaban yang tidak valid di suatu tempat di rantai.
Aturan
- Seorang pengguna hanya dapat mengirimkan satu jawaban per periode 4 jam. (Ini untuk mencegah pengguna terus menonton pertanyaan dan menjawab sebanyak mungkin.)
- Seorang pengguna tidak boleh mengirimkan dua jawaban berturut-turut. (mis. sejak saya mengirimkan jawaban 1, saya tidak bisa menjawab 2, tetapi saya bisa melakukannya 3.)
- Tidak ada bahasa yang dapat digunakan lebih dari sekali! Versi berbeda dari bahasa yang sama dihitung sebagai bahasa yang sama. Bahasa dianggap berbeda jika mereka secara tradisional dipanggil oleh dua nama berbeda. (Mungkin ada beberapa ambiguitas di sini tapi jangan biarkan itu merusak kontes.)
- Jangan edit jawaban yang telah diverifikasi.
Jika kesalahan ditemukan sebelumnya dalam rantai (yaitu setelah jawaban tindak lanjut telah diposting), jawaban yang menyinggung harus dihapus. Namun , semua jawaban yang sudah diposting semestinya tidak diubah untuk mencerminkan hal ini.
Program Anda harus mencetak
N
, jumlah jawaban Anda, untuk STDOUT atau alternatif terdekat. Itu harus menjadi program penuh dan tidak boleh mengasumsikan lingkungan REPL.- Anda mungkin atau mungkin tidak mencetak baris baru.
Biarkan M menjadi jumlah blok Anda pindah untuk jawaban Anda (tidak peduli seberapa jauh) dan P jumlah karakter yang Anda ditambahkan ke lantai puzzle, skor jawaban Anda akan 10 + N - M - P . Sebagai contoh 5x4, jika jawaban Anda mengubah lantai puzzle sebagai berikut
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
skor Anda akan 10 + N - 2 - 3 = N + 5 , karena dua blok dipindahkan (
h
danbce
) dan tiga karakter ditambahkan (i
,j
dank
).Pemenangnya adalah pengguna yang mengumpulkan jumlah poin terbanyak di seluruh jawaban mereka. Dalam kasus seri, pengguna dengan jawaban terakhir menang. Saya akan menerima jawaban terakhir pemenang.
- Jika semua karakter tidak digunakan, tantangan berakhir.
Dasbor
Berikut adalah alat Dashboard kecil, yang akan membantu dengan pembukuan yang diperlukan untuk jenis tantangan ini.
Ini menampilkan status tantangan saat ini - khususnya, jika ada jawaban yang bertentangan, jika jawaban perlu diverifikasi, atau jika jawaban berikutnya dapat diposting.
Ini juga menghasilkan daftar semua bahasa yang telah digunakan, serta papan peringkat semua pengguna. Harap pertahankan format jawaban di atas, sehingga dasbor dapat membaca string yang relevan dari jawaban Anda. Kalau tidak, Anda mungkin tidak termasuk dalam leaderboard.
Harap beri tahu saya ( idealnya dalam obrolan ) jika Anda menemukan bug atau memiliki ide bagaimana kegunaan alat ini dapat ditingkatkan.
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>
Skrip yang bermanfaat
Berikut adalah dua skrip CJam untuk kenyamanan Anda. Anda dapat menjalankannya di juru bahasa online .
- Untuk menghapus kolom pertama dan terakhir dari lantai puzzle (untuk mendapatkan kode aktual), rekatkan ke STDIN, dan jalankan
qN/1f>Wf<N*
. - Untuk membuat kode Anda menjadi persegi panjang 96x20 dan menambahkan kolom batang vertikal di sekitarnya, jalankan
qN/La20*+20<{96S*+96<'|\+'|+}%N*
kode Anda. Untuk mengetahui karakter mana yang dihapus dari kotak potongan di antara dua jawaban, rekatkan keduanya ke dalam STDIN (tanpa garis kosong di antaranya), dan jalankan
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
Itu juga akan menunjukkan jika karakter ditambahkan (tidak berapa banyak).
Jika seseorang ingin menerapkan ini sebagai Stack Snippets, saya senang menambahkannya ke posting ini.