पारंपरिक टेट्रिस में , 7 अलग-अलग टेट्रोमिनो ईंट हैं, प्रत्येक को इसके आकार के समान एक पत्र द्वारा दर्शाया गया है।
#
# # #
# ## # # ### ## ##
# ## ## ## # ## ##
I O L J T Z S
इन ईंटों की व्यवस्था पर विचार करें जो कुछ सकारात्मक पूर्णांक W और H के लिए एक ठोस W × H आयत बना सकते हैं, उदाहरण के लिए, 2 I's, 1 L, 1 J, 2 T's, और 1 S का उपयोग करते हुए, एक 7 × 4 आयत कर सकते हैं। बना हुआ:
IIIITTT
LIIIITJ
LTTTSSJ
LLTSSJJ
एक ही ईंटों को अलग-अलग 7 × 4 पैटर्न में घुमाया जा सकता है (घुमाकर और घुमाकर लेकिन पलट कर नहीं ):
IJJTLLI
IJTTTLI
IJSSTLI
ISSTTTI
अब पहली व्यवस्था के स्थान पर कोड के एक आयताकार ब्लॉक का उपयोग करने पर विचार करें। उदाहरण के लिए पायथन 3 के 7 × 4 बिट, जो स्टडआउट Tetris
को प्रिंट करता है:
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 ।
जुंबलर्स कोड के ब्लॉक के साथ उत्तर प्रस्तुत करते हैं जिन्हें टेट्रिस ईंटों में तोड़ दिया गया है।
Rebuilders इन ब्लॉक्स को उनके लिए समर्पित अलग प्रश्न में पुनर्निर्माण करने का प्रयास करते हैं: Jumblers vs Rebuilders: Coding with Tetris Bricks - Area for Rebuilder उत्तर ।
Jumblers
केवल मुद्रण योग्य ASCII (हेक्स कोड 20 से 7E) का उपयोग करके एक डब्ल्यू × एच आयताकार कार्यक्रम लिखें। जब चलाया जाता है, तो इसे स्टडआउट (या निकटतम विकल्प) के लिए एकमात्र शब्द Tetris
का उत्पादन करना चाहिए । इस कोड को अपने उत्तर में पोस्ट न करें; W या H न दें। ऊपर के उदाहरण की तरह टेट्रिस ईंटों की कुछ व्यवस्था में इसे तोड़ दें और इन्हें अपने उत्तर में पोस्ट करें। (आपके कोड में स्थान हो सकते हैं लेकिन चूंकि उन्हें भेद करना कठिन है, इसलिए रिक्त स्थान के स्थान पर किसी अन्य वर्ण का उपयोग करना सबसे अच्छा है और बताएं कि उसने क्या उपयोग किया है।)
यह कठिन है कि आपके कार्यक्रम को बेहतर बनाया जाए। आपके कोड-ईंटों को एक आयत में पुनर्व्यवस्थित करने के कई तरीके हो सकते हैं, संभवतः विभिन्न आयामों के साथ। जब कोड इन अलग-अलग व्यवस्थाओं में चलता है, तब तक कोई फर्क नहीं पड़ता, जब तक कि कम से कम एक व्यवस्था Tetris
stdout को प्रिंट न कर दे।
केवल अन्य प्रतिबंध यह है कि W * H 1025 से कम हो।
जुंबलर्स को अपनी प्रोग्रामिंग भाषा (और संस्करण) निर्दिष्ट करनी चाहिए।
Rebuilders
आपका लक्ष्य एक जंबलर कोड-ईंटों को लेना और उन्हें अपने मूल क्रम में वापस लाना है, इसलिए Tetris
कोड चलने पर मुद्रित किया जाता है। यदि आपको जो काम करने की व्यवस्था मिलती है, वह नहीं है तो जुम्बलर के मन में उनके लिए बहुत बुरा है।
याद रखें कि पुनर्व्यवस्था में केवल अनुवाद और रोटेशन की अनुमति होती है, मिररिंग की नहीं।
स्कोरिंग
हर बार एक सबमिशन फिर से बनाया जाता है, इसे "क्रैक" माना जाता है और यह अब चलने में नहीं है। एक सबमिशन का पुनर्निर्माण करने वाले पहले रीबिल्डर को इसका श्रेय जाता है। यदि कोई उत्तर 72 घंटे के लिए अनियंत्रित हो जाता है, तो जुम्बलर को समाधान को प्रकट करना चाहिए और इसके बाद क्रैक होने से प्रतिरक्षा होगी। एक बाजीगर को जीतने के लिए ऐसा करना चाहिए, अन्यथा यह स्पष्ट नहीं होगा कि क्या कोई समाधान भी था।
जीतने वाला जंबलर सबसे छोटे क्षेत्र (डब्ल्यू * एच = 4 * ईंटों की संख्या) के साथ बिना उत्तर वाला उत्तर है। संबंधों के मामले में सबसे अधिक मतदान उत्तर जीतता है। इस सवाल का स्वीकृत उत्तर विजेता जुंबलर होगा।
जीतने वाला रिपीडर वह उपयोगकर्ता है जो सबसे अधिक प्रस्तुतियाँ क्रैक करता है। संबंधों के मामले में, यह सबसे अधिक संचयी क्षेत्र में दरार करने के लिए जाता है।
टिप्पणियाँ
- आप अपने स्वयं के सबमिशन का पुनर्निर्माण नहीं कर सकते हैं। (लेकिन अन्यथा आप दोनों भूमिकाएँ निभा सकते हैं।)
- पुनर्निर्माणकर्ता एक से अधिक बार एक ही उत्तर को क्रैक करने का प्रयास नहीं कर सकते हैं।
स्कोरबोर्ड
सबसे पुराने से नए में प्रस्तुत किया गया।
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
| 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>