これは答えに依存する課題です!回答の順序は重要であり、正確なタスクは最後に投稿された回答に依存します。回答を最も古い順に並べ替えることができます。
コードをつなぎましょう!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から始まる連続番号)を印刷する必要があります。
返事
この課題について理解する重要なことは、一度に答えることができる人は1人だけであり、それぞれの答えはその前のものに依存するということです。
同じ数Nの回答が2つあることはありません。2人が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
は、1つ下および右に移動されました。df
ブロックは左上に移動しました。bce
ブロックは1で下方に移動したg
左に移動する2つまでと一つでした。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は空の行を表示しないため、パズルの床の両側に垂直バーを含めてください。これらの2つの列がコードの一部と見なされることはありません。
- 別のユーザーが提出物を確認し、回答がすべてのルールに従っている場合は、「正当性を確認済み」というコメントを残してください(以下を参照)。そうでない場合は、欠陥を指摘するコメントを残す必要があります。その後、これらの問題を修正するのに15分かかります。そうしないと、回答は無効とみなされ、削除する必要があります。他の誰かが前の回答にフォローアップの回答を投稿する場合があります。(この場合、いつでも新しい回答を送信できます。)
これらの規制はかなり厳しいように思えるかもしれませんが、チェーンのどこかで無効な回答を避けるために必要です。
ルール
- ユーザーは、4時間ごとに1つの回答のみを提出できます。(これは、ユーザーが常に質問を見て、できる限り回答するのを防ぐためです。)
- ユーザーは、2つの回答を連続して送信することはできません。(たとえば、回答1を提出したので、回答2はできませんが、3はできます。)
- 言語を複数回使用することはできません!同じ言語の異なるバージョンは同じ言語としてカウントされます。伝統的に2つの異なる名前で呼び出される場合、言語は別個のものとしてカウントされます。(ここにはいくつかのあいまいさがありますが、コンテストを台無しにしないでください。)
- 確認済みの回答は編集しないでください。
チェーンの早い段階で(つまり、フォローアップの回答が投稿された後)間違いが発見された場合は、問題のある回答を削除する必要があります。ただし、それ以降に投稿されたすべての回答は、これを反映するように変更しないでください。
あなたのプログラムは
N
あなたの答えの数をSTDOUTまたは最も近い代替物に印刷しなければなりません。完全なプログラムである必要があり、REPL環境を想定してはなりません。- 末尾の改行を印刷する場合としない場合があります。
レッツMは、多くのことがブロックあなたがあなたの答えのために移動(どんなに遠く)とP、あなたの答えのスコアは、あなたがパズルの床に追加された文字の数になりますM - - P 10 + N。5x4の例として、答えが次のようにパズルのフロアを変更した場合
|a bc| |a ij | | d e | --> | d bc| | f g| | f eg| | h | | h k|
スコアは10 + N-2-3 = N + 5になります。これは、2つのブロックが移動(
h
およびbce
)され、3つの文字が追加された(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>
便利なスクリプト
便宜上、2つのCJamスクリプトを示します。オンラインインタープリターで実行できます。
- (実際のコードを取得するために)パズルフロアから最初と最後の列を削除するには、STDINに貼り付けて、実行し
qN/1f>Wf<N*
ます。 - 96x20の長方形にコードを埋め込み、その周りに垂直バーの列を追加する
qN/La20*+20<{96S*+96<'|\+'|+}%N*
には、コードで実行します。 2つの回答の間にある箱からどのキャラクターが削除されたかを調べるには、両方のキャラクターをSTDINに貼り付け(間に空行を入れずに)、実行します
qS-N/20/{:+}%94,\f{\33+c_@\f/:,~-_0<{N"Added character: "@;@N}{*}?}
文字が追加されたかどうかも表示されます(ただし、文字数は表示されません)。
誰かがこれらをスタックスニペットとして再実装したい場合は、この投稿に追加できてうれしいです。