Dans le Tetris traditionnel , il y a 7 briques de Tetromino distinctes , chacune désignée par une lettre semblable à sa forme.
#
# # #
# ## # # ### ## ##
# ## ## ## # ## ##
I O L J T Z S
Considérez les arrangements de ces briques qui peuvent former un rectangle plein W × H, pour certains entiers positifs W et H. Par exemple, en utilisant 2 I, 1 L, 1 J, 2 T et 1 S, un rectangle 7 × 4 peut être fait:
IIIITTT
LIIIITJ
LTTTSSJ
LLTSSJJ
Les mêmes briques peuvent être réarrangées (en les déplaçant et en les tournant sans les retourner ) en un motif 7 × 4 différent:
IJJTLLI
IJTTTLI
IJSSTLI
ISSTTTI
Pensez maintenant à utiliser un bloc de code rectangulaire à la place du premier arrangement. Par exemple, ce 7 × 4 bits de Python 3, qui affiche Tetris
sur la sortie standard:
p=print
x='Tet'
y='ris'
p(x+y)#
Selon le premier arrangement de Tetris, ses 7 "briques" sont ...
x '
int y ' ='r is
p=pr t p( ='Te )# x +y
Dans l'autre arrangement (l'un des nombreux possibles), ils sont incompréhensibles en tant que code:
r#)x(x=
p'r'=y'
='istpT
p+ytnie
Mais, étant donné les briques séparément, il pourrait être possible de les reconstituer correctement. C'est la base du défi.
Défi
C'est un défi des flics et des voleurs . Il y a deux rôles en compétition, les Jumblers et les Rebuilders .
Les Jumblers soumettent des réponses avec des blocs de code décomposés en briques Tetris.
Les reconstructeurs tentent de reconstruire ces blocs dans la question distincte qui leur est dédiée: Jumblers vs Rebuilders: coder avec des briques Tetris - Zone de réponses de reconstructeur .
Jumblers
En utilisant uniquement des fichiers ASCII imprimables (codes hexadécimaux 20 à 7E), écrivez un programme rectangulaire W × H. Lorsqu'il est exécuté, il doit sortir le mot uniqueTetris
sur stdout (ou la solution la plus proche). Ne postez pas ce code dans votre réponse. ne donnez pas W ou H non plus. Divisez-le en un arrangement de briques Tetris comme dans l'exemple ci-dessus et affichez-les dans votre réponse. (Votre code peut contenir des espaces, mais comme ils sont difficiles à distinguer, il est préférable d'utiliser un autre caractère à la place d'espaces et d'indiquer aux gens ce que vous avez utilisé.)
Plus il est difficile de reconstruire votre programme, mieux c'est. Il peut exister de nombreuses façons de réorganiser vos blocs de code en un rectangle, éventuellement avec des dimensions différentes. Ce que le code fait lorsqu'il est exécuté dans ces différents arrangements importe peu tant qu'au moins un arrangement est imprimé Tetris
sur la sortie standard.
La seule autre restriction est que W * H soit inférieur à 1025.
Les Jumblers doivent spécifier leur langage de programmation (et leur version).
Reconstructeurs
Votre objectif est de prendre les codes-briques d'un Jumbler et de les replacer dans leur ordre d'origine, afin qu'ils Tetris
soient imprimés lorsque le code est exécuté. Si le mode de travail que vous avez trouvé n'est pas celui que Jumbler avait en tête, c'est tant pis pour eux.
N'oubliez pas que seules les transformations et les rotations sont autorisées dans les réarrangements, et non en miroir.
Notation
Chaque fois qu'une soumission est reconstruite, elle est considérée comme "fissurée" et n'est plus dans la course. Le premier reconstructeur à reconstruire une soumission en reçoit le crédit. Si une réponse n'a pas été fissurée pendant 72 heures, Jumbler devrait révéler la solution et sera désormais à l'abri de la fissuration. Un Jumbler doit le faire pour gagner, sinon il ne sera pas clair s'il y avait même une solution.
Le Jumbler gagnant est la réponse non fissurée avec la plus petite surface (W * H = 4 * nombres de briques). En cas d'égalité, la réponse la plus votée l'emporte. La réponse acceptée à cette question sera le Jumbler gagnant.
Le reconstructeur gagnant est l'utilisateur qui obtient le plus grand nombre de soumissions. En cas d'égalité, cela s'adresse à quiconque a craqué la zone la plus cumulative.
Remarques
- Vous ne pouvez pas reconstruire vos propres soumissions. (Mais sinon, vous pouvez assumer les deux rôles.)
- Les reconstructeurs ne peuvent pas tenter de déchiffrer la même réponse plus d'une fois.
Tableau de bord
Trié de la plus ancienne soumission à la plus récente.
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
| 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 | |
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
(Merci à http://www.sensefulsolutions.com/2010/10/format-text-as-table.html pour la mise en forme du tableau.)
L'utilisateur COTO est un excellent outil pour jouer avec des briques codées. Je l'ai transformé en un extrait pratique:
<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>
la source
Réponses:
GolfScript 48
I
pièces:O
pièces:T
pièces:J
pièces:Solution
la source
Java: zone 360
Fait d'un mélange des sept types de pièces. Pour faciliter les choses (?), Je me suis assuré que toutes les pièces du même type tournent dans le même sens. Puisque Java a des parties qui ne peuvent pas beaucoup changer, j'ai laissé les parties vraiment évidentes sous la forme de simples blocs I pour le démarrer.
Remarque: Comme Java comporte quelques espaces obligatoires, je les ai remplacés par des traits de soulignement (
_
) ci-dessous à des fins de présentation. Il y en a 11 au total, et ils devraient tous être convertis en espaces pour exécuter le code. Aucun autre espace n'est présent dans le code, les éléments ci-dessous sont uniquement destinés au positionnement.Il y a:
S'amuser!
la source
Brainfuck, région de 108
Ce code était composé de 27 pièces.
Je ne sais pas s'il existe un autre moyen que bruteforce de trouver la réponse. S'il y en a, j'aimerais vraiment savoir comment.
la source
Python 3: 212 area [reconstruit]
Mon code est divisé en les 53 éléments suivants
I
, que j'ai écrits un par ligne par ordre alphabétique.S'amuser!
la source
print('Tetris'* (3580048039607960824098110131314133014381502228523172479258529553116373838184169435643604632480050165153525653945598563157585840631264256539704571638903974876749009825073297156762481649%38941394))
%3894
?print('Tetris'* (358UNKNOWN94))
et comme j'étais à peu près sûr de ne pas faire pivoter de mosaïque, je ne faisais que construire toutes les permutations possibles des mosaïques restantes, je les assemblais et les évaluais si358UNKNOWN94
égal1
, alors que je remplaçaisUNKNOWN
par la permutation . Donc, je n'ai pas utilisé%3894
parce qu'une permutation de correspondance différente a été trouvée en premier;) Je ne sais pas combien de temps cela a pris exactement, mais il fallait environ 20 minutes avec un seul noyau. J'ai donc utilisé quelque chose de moins systématique, j'ai juste renforcé la solution;)JavaScript - Zone 80
On dirait que beaucoup de ces réponses utilisent juste beaucoup de morceaux I et peut-être un morceau O, alors j'ai jeté cela ensemble avec certaines des formes les plus intéressantes.
Chaque pièce est séparée par deux espaces. Les deux signes de hachage sont en réalité des espaces dans le code.
S'amuser!
la source
Javascript, zone 420
Seulement I-block.
Aucun obfuscateur standard n'a été utilisé. Tous les codes, y compris l’obscurcissement et l’ajout de cette liste triée de blocs, sont constitués de moins de 16 lignes de mon propre code.
Il est temps de montrer comment cela a été fait:
Donc, il suffit d'appeler
eval
avec l''console.log("Tetris")'
argument obfusqué , qui est de 420 symboles. Il est divisé en 4 lignes de 105 symboles et est lu par colonnes et trié par ordre alphabétique.L'obscurcissement pour 10 chiffres est codé en dur, pour les autres symboles utilisés, les 10 premiers symboles de 4 combinaisons passées à la
add
fonction. S'il n'y a pas d'obscurcissement pour un symbole, il est passé tel quel.la source
C, zone 80
Fait de 12
I
pièces et 8O
pièces. La syntaxe C est toujours amusante.I
pièces sans ordre particulier:O
pièces:la source
main(q){char c[]
={'/T','$"e','t'
,0162,'rIi>`:i',
'?#>s',q<q/**/};
return puts(c);}
CJam, 60 (15 O)
Solution
la source
Befunge, zone de 360
90
O
pièces.Vous pouvez l' essayer ici .
la source
Python 3: zone 340 [reconstruit]
Fait de 85
I
pièces, on en donne ici une par ligne, en ordre alphabétique.En tant que liste Python:
la source
Python 3: zone de 160
Après le crack de Feersum , j'ai essayé de resserrer mon code pour qu'il soit plus difficile d'éviter le charabia cryptographique. Il est composé de 40
I
pièces, répertoriées une par rangée:En tant que liste Python:
Modifié:
pow
à être utilisé1
« sJe suis inquiet pour les nombreux facteurs de la région.
la source
C - Zone 72
Blocs:
Depuis la seule autre soumission C était fissurée. ;)
Un soigné 72 caractères. Pure obfuscation. Pas de problèmes NP-difficiles à résoudre ni d'énormes nombres entiers à factoriser. Emprunte quelques astuces à l'un des plus grands. Les espaces sont représentés en utilisant
.
s. Aucun résultat réel.
n'apparaît dans la solution.J'ai vérifié trois fois la solution pour garantir la validité des pièces.
la source
CJam, 80 région
20
O
pièces.la source
C - Secteur 780
Il y a 195 pièces au total. Aucun commentaire n'a été utilisé. Rien de particulièrement compliqué.
Remarque: toutes les barres obliques inverses (
\
) doivent être remplacées par des espaces.95
I
pièces:35
O
pièces:18
L
pièces:25
J
pièces:10
T
pièces:4
Z
pièces:8
S
pièces:Solution
la source
Wolfram, zone 72
Partout où vous voyez un tiret (-), remplacez-le par un espace
je
j
l
o
s
z
t
la source
T
bloc devraient être inversés. J'ai réussi à le reconstruire .MATLAB, zone 48
Malheureusement, cela ne semble pas fonctionner dans Octave.
la source
Python 3 176 Zone
Je n'utilise pas de traits de soulignement dans ce programme, j'ai donc décidé de remplacer tous les espaces par des traits de soulignement pour une lisibilité accrue. Assurez-vous de les replacer dans les espaces si vous ne le remettez pas ensemble.
Je bloque:
O Blocs:
L Blocs:
J Blocs:
T Blocs:
Z Blocks:
S Blocs:
la source
Python 3
Superficie - 484
Espaces remplacés par
%
. Certains commentaires sont utilisés comme bourrage. Un peu de répétition de code. Peut être assez compliqué.121 Os
la source