전통적인 테트리스 에는 7 개의 별개의 테트로 미노 브릭이 있으며 각각 모양과 비슷한 문자로 표시됩니다.
#
# # #
# ## # # ### ## ##
# ## ## ## # ## ##
I O L J T Z S
일부 양의 정수 W 및 H에 대해 솔리드 WxH 사각형을 만들 수있는 이러한 브릭의 배열을 고려하십시오. 예를 들어, 2 I, 1 L, 1 J, 2 T 및 1 S를 사용하면 7x4 사각형은 만들어지다:
IIIITTT
LIIIITJ
LTTTSSJ
LLTSSJJ
동일한 브릭을 다른 7x4 패턴 으로 재배치 (이동 및 회전하지만 뒤집지 않음 ) 할 수 있습니다 .
IJJTLLI
IJTTTLI
IJSSTLI
ISSTTTI
이제 첫 번째 배열 대신 사각형 코드 블록을 사용해보십시오. 예를 들어이 7 x 4 비트의 Python 3 Tetris
은 stdout으로 인쇄 합니다.
p=print
x='Tet'
y='ris'
p(x+y)#
첫 번째 테트리스 배열에 따르면 7 개의 브릭은 ...
x '
int y ' ='r is
p=pr t p( ='Te )# x +y
다른 배열 (많은 가능한 것 중 하나)에서는 코드로 이해할 수 없습니다.
r#)x(x=
p'r'=y'
='istpT
p+ytnie
그러나 벽돌이 별도로 제공되면 벽돌을 제대로 다시 조각하는 것이 가능할 수 있습니다. 이것이 도전의 기초입니다.
도전
이것은 경찰과 강도 도전입니다. Jumblers 와 Rebuilders 라는 두 가지 경쟁 역할이 있습니다 .
Jumblers는 Tetris 브릭으로 분류 된 코드 블록으로 답변을 제출합니다.
Rebuilders는 이러한 블록 을 그들 전용의 질문 으로 재구성하려고 시도 합니다 : Jumblers vs Rebuilders : Retrier Bricks-Rebuilder Answers 영역 코딩 .
덤 블러
인쇄 가능한 ASCII (16 진 코드 20-7E) 만 사용 하여 WxH 직사각형 프로그램을 작성하십시오. 실행될 때 유일한 단어 Tetris
를 stdout (또는 가장 가까운 대안)으로 출력해야합니다 . 답변에이 코드를 게시하지 마십시오. W 나 H도주지 마십시오. 위의 예와 같이 Tetris 벽돌을 몇 가지 배열로 나누고 답에 게시하십시오. (코드에 공백이 포함될 수 있지만 구분하기가 어렵 기 때문에 공백 대신 다른 문자를 사용하고 사람들에게 사용한 것을 알려주는 것이 가장 좋습니다.)
프로그램을 더 잘 재구성하는 것이 어려워집니다. 코드 브릭을 다른 차원의 사각형으로 재정렬하는 방법에는 여러 가지가있을 수 있습니다. 이러한 여러 가지 배열에서 실행될 때 코드가 수행하는 작업은 하나 이상의 배열 Tetris
이 표준 출력 으로 인쇄 되는 한 중요하지 않습니다 .
다른 제한 사항은 W * H가 1025보다 작다는 것입니다.
범 블러는 프로그래밍 언어 (및 버전)를 지정해야합니다.
리 빌더
목표는 Jumbler의 코드 브릭을 가져 와서 원래 순서대로 되 돌리는 것이므로 Tetris
코드가 실행될 때 인쇄됩니다. 만약 당신이 찾은 작업 배열이 Jumbler이 염두에 둔 것이 아니라면 그것들은 너무 나쁘다.
미러링이 아닌 재 배열에서는 평행 이동과 회전 만 허용됩니다.
채점
제출물이 다시 작성 될 때마다 "크랙"으로 간주되어 더 이상 실행되지 않습니다. 제출물을 재구성하는 첫 번째 Rebuilder가 제출 한 크레딧을 얻습니다. 응답이 72 시간 동안 크랙되지 않으면 Jumbler가 솔루션을 공개해야하므로 크랙되지 않습니다. Jumbler가이기려면 반드시이 작업을 수행해야합니다. 그렇지 않으면 솔루션이 있는지 확실하지 않기 때문입니다.
이기는 Jumbler는 가장 작은 면적 (W * H = 4 * 벽돌 수)의 균열이없는 답변입니다. 동점 인 경우 가장 높은 투표 응답이 이깁니다. 이 질문에 대한 대답은 승리 한 Jumbler입니다.
우승 한 Rebuilder는 가장 많이 제출 한 사용자입니다. 동점 인 경우 가장 누적 된 지역을 균열 한 사람에게 전달됩니다.
노트
- 자신의 제출물을 다시 작성할 수 없습니다. (그렇지 않으면 두 가지 역할을 모두 수행 할 수 있습니다.)
- 리 빌더는 동일한 답변을 두 번 이상 크래킹하지 않을 수 있습니다.
스코어 보드
가장 오래된 제출에서 최신으로 정렬되었습니다.
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
| Jumbler | Language | Area | Immune? | Rebuilt? | Rebuilder | Link | Solution Link |
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
| xnor | Python 3 | 212 | no | yes | foobar | https://codegolf.stackexchange.com/a/40142 | https://codegolf.stackexchange.com/a/40203 |
| xnor | Python 3 | 340 | no | yes | feersum | https://codegolf.stackexchange.com/a/40146 | https://codegolf.stackexchange.com/a/40189 |
| es1024 | C | 80 | no | yes | user23013 | https://codegolf.stackexchange.com/a/40155 | https://codegolf.stackexchange.com/a/40210 |
| Ethiraric | Brainfuck | 108 | yes | | | https://codegolf.stackexchange.com/a/40156 | |
| Qwertiy | JavaScript | 420 | yes | | | https://codegolf.stackexchange.com/a/40161 | |
| user23013 | Befunge | 360 | yes | | | https://codegolf.stackexchange.com/a/40163 | |
| user23013 | CJam | 80 | yes | | | https://codegolf.stackexchange.com/a/40171 | |
| Geobits | Java | 360 | yes | | | https://codegolf.stackexchange.com/a/40180 | |
| Dennis | CJam | 60 | yes | | | https://codegolf.stackexchange.com/a/40184 | |
| xnor | Python 3 | 160 | yes | | | https://codegolf.stackexchange.com/a/40192 | |
| COTO | C | 72 | yes | | | https://codegolf.stackexchange.com/a/40198 | |
| es1024 | C | 780 | yes | | | https://codegolf.stackexchange.com/a/40202 | |
| Gerli | Mathematica | 72 | no | yes | Martin Büttner | https://codegolf.stackexchange.com/a/40230 | https://codegolf.stackexchange.com/a/40242 |
| Hydrothermal | JavaScript | 80 | yes | | | https://codegolf.stackexchange.com/a/40235 | |
| Sam Yonnou | GolfScript | 48 (frontrunner) | yes | | | https://codegolf.stackexchange.com/a/40239 | |
| feersum | Matlab | 48 | | | | https://codegolf.stackexchange.com/a/40310 | |
| Beta Decay | Python 3 | 484 | | | | https://codegolf.stackexchange.com/a/40312 | |
| potato | Python 3 | 176 | | | | https://codegolf.stackexchange.com/a/40341 | |
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
( 테이블 형식에 대해서는 http://www.sensefulsolutions.com/2010/10/format-text-as-table.html 에 감사합니다 .)
사용자 COTO 는 코드 브릭으로 연주하기위한 훌륭한 도구를 만들었습니다. 나는 그것을 편리한 스 니펫으로 바꿨다.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>function parseSpec(s){function first(){var e,t;t=S.findIndex(function(t){return(e=t.findIndex(function(e){return/\S/.test(e)}))!=-1});return t==-1?null:[e,t]}function at(e){var t=e[0],n=e[1];return n>=0&&n<S.length&&t>=0&&t<S[n].length?S[n][t]:" "}function wipe(e){var t=e[0],n=e[1];if(n>=0&&n<S.length&&t>=0&&t<S[n].length)S[n][t]=" "}var P,S=s.split("\n").map(function(e){return e.split("")});var oPats=$(".proto-tet [pat]").get().map(function(e){return{sPat:eval("["+$(e).attr("pat")+"]"),e:e,block:function(e){return[at(e)].concat(this.sPat.map(function(t){return at([e[0]+t[0],e[1]+t[1]])}))},wipe:function(e){this.sPat.forEach(function(e){return wipe([P[0]+e[0],P[1]+e[1]])})},match:function(e){return!/\s/.test(this.block(e).join(""))}}});window.oPats=oPats;while(P=first()){var oPat=oPats.find(function(e){return e.match(P)});if(!oPat){orphan(at(P));wipe(P);continue}createPiece(oPat.e,oPat.block(P));wipe(P);oPat.wipe(P)}}function createPiece(e,t){function r(e){var t=$(this).position();G.isIgnoreClick=false;G.eDrag=this;G.iOffsets=[e.clientX-t.left,e.clientY-t.top]}function i(){if(G.isIgnoreClick)return;var e=$(this);s($(".proto-tet ."+e.attr("rr")),function(e,t){return n[t-1]},e.css("left"),e.css("top"));e.remove()}function s(e,t,n,s){e.clone().html(e.html().replace(/@(\d)(\d)/g,t)).appendTo("body").on("mousedown",r).click(i).css({left:n,top:s})}var n=[];s($(e),function(e,r,i){return n[r-1]=t[i-1]},18+G.iSpawn%8*18*4+"px",18+~~(G.iSpawn/8)*18*4+"px");G.iSpawn++}function init(){$(document).on("mouseup",function(){return G.eDrag=null}).on("mousemove",function(e){if(G.eDrag){var t=$(G.eDrag),n=Math.round((e.clientX-G.iOffsets[0])/18)*18,r=Math.round((e.clientY-G.iOffsets[1])/18)*18,i=t.position();if(n!=i.left||r!=i.top)G.isIgnoreClick=true;t.css({left:n+"px",top:r+"px"})}})}function orphan(e){error("Spec character not a part of any block: '"+e+"'")}function error(e){$(".error").css("display","block").append("<div>"+e+"</div>")}function go(){$(init);$(function(){parseSpec($("#spec").val())});$("#spec").remove();$("#info").remove();$("#go").remove()}var G={eDrag:null,isIgnoreClick:true,iSpawn:0};Array.prototype.findIndex=function(e){for(var t=0;t<this.length;t++){if(e(this[t]))return t}return-1};Array.prototype.find=function(e){var t=this.findIndex(e);if(t==-1)return;else return this[t]}</script><style>.proto-tet, .spec{display: none;}.tet-I{color: darkgreen;}.tet-J{color: orangered;}.tet-L{color: navy;}.tet-T{color: darkred;}.tet-O{color: darkcyan;}.tet-S{color: darkviolet;}.tet-Z{color: darkorange;}body > .tet{position: absolute;cursor: move;-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;border-collapse: collapse;}.tet td{width: 18px;height: 18px;font: bold 14px "Courier New",monospace;text-align: center;vertical-align: middle;padding: 0;}.error{z-index: 1024;position: absolute;display: none;color: red;font-weight: bold;background-color: white;}textarea{font-family: "Courier New", Courier, monospace;}</style><div id='info'>Put code-bricks here and hit OK. Re-run the snippet to restart.<br>(You may need to replace spaces in code-bricks with some other character first.)</div><textarea id='spec' rows='16' cols='80'>ABCD a b Oo c oo d E h F efg hg GFE GH f H e I IJK J l L LK kji kl j i t OP p QR rs MN on ST q m W z XY zxw yx Y Z y w WXZ</textarea><br><button id='go' type='button' onclick='go()'>OK</button><div class="proto-tet"><table class="tet tet-I tet-I0" rr="tet-I1" pat="[1,0],[2,0],[3,0]"><tr><td>@11</td><td>@22</td><td>@33</td><td>@44</td></tr></table><table class="tet tet-I tet-I1" rr="tet-I2" pat="[0,1],[0,2],[0,3]"><tr><td>@11</td></tr><tr><td>@22</td></tr><tr><td>@33</td></tr><tr><td>@44</td></tr></table><table class="tet tet-I tet-I2" rr="tet-I3" ><tr><td>@40</td><td>@30</td><td>@20</td><td>@10</td></tr></table><table class="tet tet-I tet-I3" rr="tet-I0"><tr><td>@40</td></tr><tr><td>@30</td></tr><tr><td>@20</td></tr><tr><td>@10</td></tr></table><table class="tet tet-J tet-J0" rr="tet-J1" pat="[0,1],[-1,2],[0,2]"><tr><td></td><td>@11</td></tr><tr><td></td><td>@22</td></tr><tr><td>@33</td><td>@44</td></tr></table><table class="tet tet-J tet-J1" rr="tet-J2" pat="[0,1],[1,1],[2,1]"><tr><td>@31</td><td></td><td></td></tr><tr><td>@42</td><td>@23</td><td>@14</td></tr></table><table class="tet tet-J tet-J2" rr="tet-J3" pat="[1,0],[0,1],[0,2]"><tr><td>@41</td><td>@32</td></tr><tr><td>@23</td><td></td></tr><tr><td>@14</td><td></td></tr></table><table class="tet tet-J tet-J3" rr="tet-J0" pat="[1,0],[2,0],[2,1]"><tr><td>@11</td><td>@22</td><td>@43</td></tr><tr><td></td><td></td><td>@34</td></tr></table><table class="tet tet-O tet-O0" rr="tet-O1" pat="[1,0],[0,1],[1,1]"><tr><td>@11</td><td>@22</td></tr><tr><td>@33</td><td>@44</td></tr></table><table class="tet tet-O tet-O1" rr="tet-O2"><tr><td>@30</td><td>@10</td></tr><tr><td>@40</td><td>@20</td></tr></table><table class="tet tet-O tet-O2" rr="tet-O3"><tr><td>@40</td><td>@30</td></tr><tr><td>@20</td><td>@10</td></tr></table><table class="tet tet-O tet-O3" rr="tet-O0"><tr><td>@20</td><td>@40</td></tr><tr><td>@10</td><td>@30</td></tr></table><table class="tet tet-L tet-L0" rr="tet-L1" pat="[0,1],[0,2],[1,2]"><tr><td>@11</td><td></td></tr><tr><td>@22</td><td></td></tr><tr><td>@33</td><td>@44</td></tr></table><table class="tet tet-L tet-L1" rr="tet-L2" pat="[1,0],[2,0],[0,1]"><tr><td>@31</td><td>@22</td><td>@13</td></tr><tr><td>@44</td><td></td><td></td></tr></table><table class="tet tet-L tet-L2" rr="tet-L3" pat="[1,0],[1,1],[1,2]"><tr><td>@41</td><td>@32</td></tr><tr><td></td><td>@23</td></tr><tr><td></td><td>@14</td></tr></table><table class="tet tet-L tet-L3" rr="tet-L0" pat="[-2,1],[-1,1],[0,1]"><tr><td></td><td></td><td>@41</td></tr><tr><td>@12</td><td>@23</td><td>@34</td></tr></table><table class="tet tet-S tet-S0" rr="tet-S1" pat="[1,0],[-1,1],[0,1]"><tr><td></td><td>@21</td><td>@12</td></tr><tr><td>@43</td><td>@34</td><td></td></tr></table><table class="tet tet-S tet-S1" rr="tet-S2" pat="[0,1],[1,1],[1,2]"><tr><td>@41</td><td></td></tr><tr><td>@32</td><td>@23</td></tr><tr><td></td><td>@14</td></tr></table><table class="tet tet-S tet-S2" rr="tet-S3"><tr><td></td><td>@30</td><td>@40</td></tr><tr><td>@10</td><td>@20</td><td></td></tr></table><table class="tet tet-S tet-S3" rr="tet-S0"><tr><td>@10</td><td></td></tr><tr><td>@20</td><td>@30</td></tr><tr><td></td><td>@40</td></tr></table><table class="tet tet-Z tet-Z0" rr="tet-Z1" pat="[1,0],[1,1],[2,1]"><tr><td>@11</td><td>@22</td><td></td></tr><tr><td></td><td>@33</td><td>@44</td></tr></table><table class="tet tet-Z tet-Z1" rr="tet-Z2" pat="[-1,1],[0,1],[-1,2]"><tr><td></td><td>@11</td></tr><tr><td>@32</td><td>@23</td></tr><tr><td>@44</td><td></td></tr></table><table class="tet tet-Z tet-Z2" rr="tet-Z3"><tr><td>@40</td><td>@30</td><td></td></tr><tr><td></td><td>@20</td><td>@10</td></tr></table><table class="tet tet-Z tet-Z3" rr="tet-Z0"><tr><td></td><td>@40</td></tr><tr><td>@20</td><td>@30</td></tr><tr><td>@10</td><td></td></tr></table><table class="tet tet-T tet-T0" rr="tet-T1" pat="[1,0],[2,0],[1,1]"><tr><td>@11</td><td>@22</td><td>@33</td></tr><tr><td></td><td>@44</td><td></td></tr></table><table class="tet tet-T tet-T1" rr="tet-T2" pat="[-1,1],[0,1],[0,2]"><tr><td></td><td>@11</td></tr><tr><td>@42</td><td>@23</td></tr><tr><td></td><td>@34</td></tr></table><table class="tet tet-T tet-T2" rr="tet-T3" pat="[-1,1],[0,1],[1,1]"><tr><td></td><td>@41</td><td></td></tr><tr><td>@32</td><td>@23</td><td>@14</td></tr></table><table class="tet tet-T tet-T3" rr="tet-T0" pat="[0,1],[1,1],[0,2]"><tr><td>@31</td><td></td></tr><tr><td>@22</td><td>@43</td></tr><tr><td>@14</td><td></td></tr></table></div><div class="error"></div>