Jumblers vs Rebuilders: codificación con ladrillos Tetris

34

En el Tetris tradicional , hay 7 ladrillos de tetromino distintos , cada uno denotado por una letra similar a su forma.

#          
#      #    #
#  ##  #    #  ###  ##    ##
#  ##  ##  ##   #    ##  ##
I  O   L   J    T    Z    S

Considere las disposiciones de estos ladrillos que pueden formar un rectángulo W × H sólido, para algunos enteros positivos W y H. Por ejemplo, usando 2 I's, 1 L, 1 J, 2 T's y 1 S, un rectángulo 7 × 4 puede hacerse:

IIIITTT
LIIIITJ
LTTTSSJ
LLTSSJJ

Se pueden reorganizar los mismos ladrillos (moviéndolos y rotándolos pero sin voltearlos ) en un patrón diferente de 7 × 4

IJJTLLI
IJTTTLI
IJSSTLI
ISSTTTI

Ahora considere usar un bloque rectangular de código en lugar de la primera disposición. Por ejemplo, este 7 × 4 bit de Python 3, que se imprime Tetrisen stdout:

p=print
x='Tet'
y='ris'
p(x+y)#

Según el primer acuerdo de Tetris, sus 7 "ladrillos" son ...

           x          '
      int  y          '  ='r   is
p=pr   t   p(  ='Te  )#   x   +y

En el otro arreglo (uno de los muchos posibles) son ininteligibles como código:

r#)x(x=
p'r'=y'
='istpT
p+ytnie

Pero, dados los ladrillos por separado, podría ser posible reconstruirlos correctamente. Esta es la base del desafío.

Reto

Este es un desafío de . Hay dos roles en competencia, los Jumblers y los Rebuilders .

Los Jumblers envían respuestas con bloques de código que se han desglosado en bloques de Tetris.

Los reconstructores intentan reconstruir estos bloques en la pregunta separada dedicada a ellos: Jumblers vs Rebuilders: Coding with Tetris Bricks - Area for Rebuilder Answers .

Jumblers

Usando solo ASCII imprimible (códigos hexadecimales 20 a 7E) escriba un programa rectangular W × H. Cuando se ejecuta, debe generar la única palabra Tetrispara stdout (o la alternativa más cercana). No publique este código en su respuesta; no le des W ni H tampoco. Divídalo en una disposición de ladrillos de Tetris como el ejemplo anterior y publíquelos en su respuesta. (Su código puede contener espacios, pero como son difíciles de distinguir, es mejor usar algún otro carácter en lugar de espacios y decirle a la gente lo que usó).

Cuanto más difícil sea reconstruir su programa, mejor. Puede haber muchas formas de reorganizar sus ladrillos de código en un rectángulo, posiblemente con diferentes dimensiones. Lo que hace el código cuando se ejecuta en estos arreglos diferentes no importa siempre que al menos un arreglo se imprima Tetrisen stdout.

La única otra restricción es que W * H sea inferior a 1025.

Los Jumblers deben especificar su lenguaje de programación (y versión).

Reconstructores

Su objetivo es tomar los ladrillos de código de un Jumbler y volver a ponerlos en su orden original, por lo que Tetrisse imprime cuando se ejecuta el código. Si el arreglo de trabajo que encuentra no es el que el Jumbler tenía en mente, es demasiado malo para ellos.

Recuerde que solo se permite la traslación y la rotación en reordenamientos, no en espejo.

Tanteo

Cada vez que se reconstruye un envío, se considera "agrietado" y ya no está en ejecución. El primer Reconstructor en reconstruir un envío obtiene el crédito por ello. Si una respuesta no se descifra durante 72 horas, el Jumbler debe revelar la solución y, en adelante, será inmune a ser descifrado. Un Jumbler debe hacer esto para ganar, ya que de lo contrario no estará claro si incluso hubo una solución.

El Jumbler ganador es la respuesta no descifrada con el área más pequeña (W * H = 4 * número de ladrillos). En caso de empate, gana la respuesta más votada. La respuesta aceptada para esta pregunta será el Jumbler ganador.

El reconstructor ganador es el usuario que descifra la mayor cantidad de envíos. En caso de empate, va a quien haya roto el área más acumulativa.

Notas

  • No puede reconstruir sus propios envíos. (Pero de lo contrario, puede asumir ambos roles).
  • Los reconstructores no pueden intentar descifrar la misma respuesta más de una vez.

Marcador

Ordenado de la presentación más antigua a la más reciente.

+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+
|   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 |                                           |
+--------------+-------------+------------------+---------+----------+----------------+-------------------------------------------+-------------------------------------------+

(Gracias a http://www.sensefulsolutions.com/2010/10/format-text-as-table.html por el formato de la tabla).

El usuario COTO hizo una excelente herramienta para jugar con ladrillos de código. Lo he convertido en un fragmento conveniente:

<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&nbsp;&nbsp;a&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;Oo&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;&nbsp;&nbsp;oo&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&#13;&#10;&#13;&#10;&nbsp;E&nbsp;&nbsp;&nbsp;&nbsp;h&#13;&#10;&nbsp;F&nbsp;&nbsp;efg&nbsp;&nbsp;&nbsp;hg&nbsp;&nbsp;&nbsp;GFE&#13;&#10;&nbsp;GH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;&nbsp;&nbsp;H&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&#13;&#10;&#13;&#10;&nbsp;I&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IJK&#13;&#10;&nbsp;J&nbsp;&nbsp;&nbsp;l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L&#13;&#10;LK&nbsp;&nbsp;&nbsp;kji&nbsp;&nbsp;kl&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&#13;&#10;&nbsp;OP&nbsp;&nbsp;&nbsp;p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QR&nbsp;&nbsp;&nbsp;&nbsp;rs&#13;&#10;MN&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ST&nbsp;&nbsp;&nbsp;q&#13;&#10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&#13;&#10;&nbsp;W&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z&#13;&#10;&nbsp;XY&nbsp;&nbsp;&nbsp;&nbsp;zxw&nbsp;&nbsp;&nbsp;&nbsp;yx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y&#13;&#10;&nbsp;Z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w&nbsp;&nbsp;&nbsp;&nbsp;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>

Pasatiempos de Calvin
fuente
10
Suena como un trabajo para Befunge.
Martin Ender
8
OP, ¿podría decirnos cómo se las arregla para inventar cosas como esta?
Soham Chowdhury
55
@SohamChowdhury No puedo decir mucho más de lo que ya he dicho . Mis principios principales son la simplicidad y la originalidad .
Aficiones de Calvin
¿Puedo enviar un problema o este desafío está cerrado para los Jumblers?
ASCIIThenANSI
@ASCIIThenANSI Adelante. Sin embargo, todavía no hay muchos reconstructores.
Hobbies de Calvin

Respuestas:

3

GolfScript 48

I piezas:

!;..  )+?;

O piezas:

.[  ;*  .(
):  ++  -\

T piezas:

+]\  +++  ;).  );.
 .    *    ,    )

J piezas:

.    )    *
(@@  :?,  .,:

Solución

.[!)):,.
):;+:?,*
;*.?;).+
++.;),*+
.(..;).+
-\(@@\]+

SamYonnou
fuente
Sí, lo estaba usando para crear las piezas de tetris. Lo edité lo suficientemente rápido como para que el enlace "editado" no aparezca, por lo que las personas no deberían poder ver el historial de edición para obtener la respuesta.
SamYonnou
Bueno, no quiero estropear el juego, pero esperemos que haya sido el único que abrió la página tan rápido. ;)
Martin Ender
Sé que esto está retrasado desde hace mucho tiempo, pero oficialmente estoy terminando el concurso, ¡y a menos que me equivoque, esta presentación ganó! Sam, aceptaré esta respuesta si publicas la solución para demostrar que de hecho era posible.
Hobbies de Calvin
@ Calvin'sHobbies Done
SamYonnou
23

Java: área 360

Recompensa: 500

¡Reconstruir estas cosas es difícil! Esa es probablemente la razón por la cual no hay demasiados ladrones que participan en este desafío. Sin embargo, quiero ver el mío roto. Entonces, en lugar de dar la solución después de 72 horas, pongo 500 repeticiones en el primer cracker exitoso. Para aclarar, agregaré una recompensa de +500 a la publicación de respuestas y la otorgaré a tu crack si vuelves a ensamblar estas piezas en cualquier programa Java rectangular que funcione y genere "Tetris". No estoy activando preventivamente la recompensa, porque no tengo ganas de desperdiciar reputación si nadie responde.

No hay fecha de finalización para esta oferta. Es válido mientras sea miembro aquí. Para asegurarme de que veo su respuesta, envíeme un comentario con un comentario a continuación.

He verificado tres veces para asegurarme de que las piezas (y el código) son válidas, pero si un usuario de confianza quiere confirmar esto, puedo enviarles un correo electrónico / algo sobre la solución. Obviamente, eso los eximiría de publicarlo y cobrar la recompensa.

Hecho de una mezcla de los siete tipos de piezas. Para facilitar las cosas (?) Me he asegurado de que todas las piezas del mismo tipo se roten en la misma orientación. Como Java tiene partes que no se pueden cambiar mucho, dejé las partes realmente obvias como simples bloques I para comenzar.

Nota: Dado que Java tiene algunos espacios obligatorios, los he reemplazado con guiones bajos ( _) a continuación para fines de diseño. Hay 11 en total, y todos deben convertirse en espacios para ejecutar el código. Ningún otro espacio en blanco está presente en el código, cualquiera de los siguientes es solo para posicionamiento.

Existen:

  • 41 I
  • 15 O
  • 11 J
  • 8 l
  • 6 T
  • 6 S
  • 3 Z

¡Que te diviertas!

------------- I 

clas    s_X{    publ    ic_s

tati    c_vo    id_m    ain(    

Stri    ng[]    2;c*    p(b-    

(b-c    _voi    nt_a    Syst    

em.o    ut.p    rint    1,c=    

d=1,    e=3,    new_    int[    

;b++    for(    1008    ?1:2    

)a);    ccc+    ==++    pf}(    

for(    (b);    p(b+    --b-    

or(d    1?1:    +1;e    for(    

=1);

------------- O

a)
*2

b=
r(

12
<3

36
[c

*1
++

b<
6]

64
64

7]
]-

<1
1;

89
0;

;p
c)

=0
ic

st
ch

at
ar

d/
1;

-------------- T

{in
 ]

+b(
 5

d/2
 ;

d<<
 )

;;;
 1

=1)
 (

------------- L

2=[
+

]b*
8

=1)
]

<<b
<

}_}
d

3=b
)

+[[
=

=c,
=

-------------- J

o
;b=

,
2;)

f
2;c

*
=][

c
f=d

+
e1+

e
=;;

d
_p(

i
<++

=
){_

[
f+e

---------------- S

 t_
;f

 c+
1)

 +<
;p

 64
<6

 b=
;p

 ))
(;

--------------- Z

4,
 -1

;=
 ff

;f
 0;
Geobits
fuente
¿Se debe rotar alguno de los bloques de código para construir una solución válida (o al menos, la prevista)?
El'endia Starman
@ El'endiaStarman Sí, deberá rotar algunos para obtener la solución deseada.
Geobits
12

Brainfuck, área 108

Este código estaba hecho de 27 piezas.

-.[>
.<++
.<++
[>++
[>++
-]++
]>.-
-]>[
-]>+
]>++
+.+-
+[>+
+-+-
++[>
++[>
++]-
++++
++++
+++<
+++<
+<-]
--<-
<-]>
<><+
>+.>
>++[
>+<<

No sé si hay otra forma que no sea fuerza bruta para encontrar la respuesta. Si es así, me gustaría saber cómo.

Etirarico
fuente
9

Python 3: área 212 [Reconstruida]

Mi código se divide en las siguientes 53 Ipiezas, que he escrito alfabéticamente por línea.

(358
0048
0396
0796
0824
0981
1013
1314
1330
1438
1502
2285
2317
2479
2585
2955
3116
3738
3818
4169
4356
4360
4632
4800
5016
5153
5256
5394
5598
5631
5758
5840
6312
6425
6539
7045
7156
7163
7329
7624
7674
8164
8250
8903
9%38
9009
94))
9413
9748
etri
prin
s'* 
t('T

¡Que te diviertas!

xnor
fuente
Encontré una vulnerabilidad en este método, pero la dejaré descifrada. He publicado otra respuesta que espero sea más segura.
xnor
8
print('Tetris'* (3580048039607960824098110131314133014381502228523172479258529553116373838184169435643604632480050165153525653945598563157585840631264256539704571638903974876749009825073297156762481649%38941394))
foobar
1
@foobar ¡Felicidades! ¿Intentaste con un montón de mod 38941394 o algo más sistemático? ¿Cuánto tiempo tomó? Además, ¿por qué no %3894?
xnor
1
Acabo de preconstruir print('Tetris'* (358UNKNOWN94))y, como estaba bastante seguro de que no rotaste ningún mosaico, todo lo que hice fue construir todas las permutaciones posibles de los mosaicos restantes, unirlos y evaluar si 358UNKNOWN94es igual a 1, mientras lo reemplazaba UNKNOWNcon la permutación . Así que no lo usé %3894porque primero se encontró una permutación de coincidencia diferente;) No sé cuánto tiempo tardó exactamente, pero fueron alrededor de 20 minutos usando un solo núcleo. Así que en realidad usé algo menos sistemático, simplemente forcé la solución por fuerza bruta;)
foobar
1
@ MartinBüttner hecho;) codegolf.stackexchange.com/a/40203/19475
foobar
5

JavaScript - Área 80

Parece que muchas de estas respuestas solo usan muchas piezas I y tal vez una o dos o dos, así que agregué esto junto con algunas de las formas más interesantes.

  • 7 piezas
  • 1 pieza L
  • 1 pieza J
  • 4 piezas O
  • 6 piezas en T
  • 1 pieza S

Cada pieza está separada por dos espacios. Los dos signos hash son en realidad espacios en el código.

l  n  \  /  ;  +  r
o  -  x  c  v  (  i
g  (  5  o  a  ;  s    )  o    //  #c  ns  ->   )    "    d    l    e    l    wi
(  "  4  n  r  ;  "  x65  log  ;/  ")  ].  "c  "(#  o+\  ave  ow"  t"o  "Te  [" 

¡Que te diviertas!

Hidrotermal
fuente
5

Javascript, área 420

Solo bloques I

!!!(
!!!+
!!!+
!!![
!!!]
!!!]
!!!]
!!!]
!!!]
!!'!
!![]
!!]]
!(!+
!(![
!+!]
!+!]
!+"+
!++)
!++[
!++[
!++[
!++[
!++]
![+[
!](+
(!!'
(!!+
(!(]
(++!
(['[
)!'!
)[)[
)]]!
+++"
+++)
++++
+++[
+++]
++])
+[+[
+[[[
+]'+
+]']
+]+[
+]+[
+]]!
+]]!
+]]!
+]]!
+]]'
+]][
+]]]
[!!+
[!!+
[!!+
[!!+
[!!+
[!!]
[!+!
[![[
[![[
[((!
[))!
[){!
[+'+
[++)
[++]
[[)+
[[+[
[[[!
[[['
[[[+
[][]
[]]]
[{[[
]!(!
]!]+
]['[
][[!
][[!
][[!
][[!
][[(
][[+
][[+
][[[
][[[
][]]
][}!
]]T]
]][(
]]]!
]]]!
]]]'
]]])
]]]]
]}]]
a['!
e]'(
l++[
v).!
{[[[
{]g]
})')
}]]]

No se utilizaron ofuscadores estándar. Todo el código, incluida la ofuscación y la creación de esta lista ordenada de bloques, está compuesto por menos de 16 líneas de mi propio código.


Es hora de mostrar cómo se hizo:

x="+[],+!![],+!![]+!![],+!![]+!![]+!![],+!![]+!![]+!![]+!![],+!![]+!![]+!![]+!![]+!![],+!![]+!![]+!![]+!![]+!![]+!![],+!![]+!![]+!![]+!![]+!![]+!![]+!![],+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![],+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]".split(/,/g)
res={}
for(q=0; q<x.length; ++q) res[eval(x[q])]=x[q]
function add(str) { for(q=0;q<Math.min(str.length,10);++q) res[eval(x=str+"["+res[q]+"]")]=x }
add("({}+[])")
add("(![]+[])")
add("(!![]+[])")
add("([][[]]+[])")
code = 'eval('+Array.prototype.map.call('console.log("Tetris")',function(x){return res[x]||"'"+x+"'"}).join("+")+')'
res=[]
console.log(code)
code.replace(/(.)(?=.{104}(.).{104}(.).{104}(.))/g,function(m,a,b,c,d){res.push(a+b+c+d)})
eval(res.map(function(x){return x[0]}).join("")+res.map(function(x){return x[1]}).join("")+res.map(function(x){return x[2]}).join("")+res.map(function(x){return x[3]}).join(""))
console.log(res.sort().join("\n"))

Entonces, es solo llamar evalcon un 'console.log("Tetris")'argumento ofuscado , que tiene 420 símbolos de longitud. Está dividido en 4 líneas de 105 símbolos y leído por columnas y ordenado alfabéticamente.

La ofuscación de 10 dígitos está codificada, para otros símbolos se utilizan los primeros 10 símbolos de 4 combinaciones pasadas a la addfunción. Si no hay ofuscación para algún símbolo, se pasa como está.

Qwertiy
fuente
¿Es hora de publicar cómo se hizo?
Qwertiy
@Qwerity Sí, si quieres.
Hobbies de Calvin
Se agrega la explicación.
Qwertiy
4

C, área 80

Hecho de 12 Ipiezas y 8 Opiezas. La sintaxis de C siempre es divertida.

I piezas en ningún orden particular:

 c[] // starts with a space
','n
',;}
(q){
,',  // ends in a space 
u>6/
T2sr
char
main
q/**
t#1'
ts(c

O piezas:

q<
pu

't
i'

Ir
$'

/}
);

'?
re

',
`:

"e
i>

={
,0
es1024
fuente
2
main(q){char c[] ={'/T','$"e','t' ,0162,'rIi>`:i', '?#>s',q<q/**/}; return puts(c);}
jimmy23013
@ user23013 ¡Felicitaciones!
es1024
4

CJam, 60 (15 O's)

71 05 37 23 36 04 27 69 32 :i 12 93 bi i] 43
69 44 71 71 -# 70 10 25 44 cb 93 20 *G 9B 62

Solución

27
10
96
17
54
04
52
96
71
37
12
93
43
62
29
03
07
40
44
23
72
13
]B
i9
*b
Gi
6#
3-
ib
:c

Dennis
fuente
4

Befunge, área 360

90 Opiezas.

 "
#6

 "
#^

 #
# 

 #
4 

 +
$ 

 +
0>

 +
v_

 0
> 

 3
# 

 >
\ 

 ^
/1

 _
v8

 v
$,

 ~
*=

!!
00

!<
v>

"!
< 

"<
#^

">
^<

"v
# 

"v
w\

# 
 #

# 
|_

#*
_*

#0
.@

#3
~#

#?
t@

#^
RI

#v
~>

#~
~#

$ 
!4

&v
v#

*#
"#

**
>^

+1
>^

+5
 ,

+^
S"

- 
#"

-#
2\

-~
 #

0 
|>

00
00

0<
v\

2,
+#

2v
^v

3#
< 

3#
>2

3~
^-

47
31

6 
6#

70
"T

8#
:\

:#
 #

:$
$*

:0
3<

< 
#$

<*
<|

<<
>>

<>
<>

<@
 >

<~
2,

> 
7<

>$
^6

>>
<<

>v
|g

\ 
^ 

\_
 !

^ 
<s

_!
>9

_$
ET

kr
 >

m~
#3

q~
~+

r^
c 

t~
, 

v 
 ?

v/
_$

v4
>>

v7
>#

v<
>#

v<
>#

v>
:^

v~
1/

zr
 $

~#
#~

~#
\#

~$
7>

~3
$_

~v
\$

~~
~#

Puedes probarlo aquí .

3#~#~vm~00-~q~\_:$:#r^&v_!!<v<
>2\#\$#300 #~+ !$* #c v#>9v>>#
"v0< 36 v < ~~ ^<~^ <<<@\ -##v
w\v\# 6# ?#$~#/12,<s>> >^ 2\~>
"> +>$ +:0 _ #2,v/$ >>v4v7- 3~
^<0>^6v_3<v84 +#_$!4<<>>>##"^-
<*8#> #0 v ~v~2v#~~#kr"v "zr"<
<|:\7<.@$,*=1/^v~##~ ># #6 $#^
#*+1# 3# 0470 >vv< ## ~$t~ "<>
_*>^|_< > 31|>|g>##  #7>, #^<>
70_$#^+^~3 +** >v>!!+5#3*#"!#?
"TETRIS"$_$ >^\ :^00 ,~#"#< t@

Probablemente hay otras soluciones. No roté los ladrillos.

jimmy23013
fuente
Este es uno de los programas Befunge más intrincados que he visto y visto correr. ¡Muy inteligente!
El'endia Starman
3

Python 3: área 340 [Reconstruida]

Hecho de 85 Ipiezas, dadas aquí alfabetizadas una por línea.

    #Four spaces
    #Four spaces
    #Four spaces
    #Four spaces
    #Four spaces
    #Four spaces
    #Four spaces
    #Four spaces
    #Four spaces        
))  #Two spaces
0290
0398
0866
0887
0892
0992
1108
1268
1297
1339
1555
1722
1817
1848
1930
2328
2521
2611
2747
3179
3192
3245
3284
3334
3613
3862
4086
4629
4639
4674
4695
4781
4968
5723
5742
5791
5938
6011
6069
6180
6231
6265
6269
6444
6564
6776
6884
7116
7253
7348
7440
7527
7743
7873
8064
8291
8808
8843
9305
9324
9458
9460
9586
9869
====
a,b,
abcd
c)-d
etri
pow(
prin
s'*(
t('T

Como una lista de Python:

['    ', '    ', '    ', '    ', '    ', '    ', '    ', '    ', '    ', '    ', '    ', '))  ', '0290', '0398', '0866', '0887', '0892', '0992', '1108', '1268', '1297', '1339', '1555', '1722', '1817', '1848', '1930', '2328', '2521', '2611', '2747', '3179', '3192', '3245', '3284', '3334', '3613', '3862', '4086', '4629', '4639', '4674', '4695', '4781', '4968', '5723', '5742', '5791', '5938', '6011', '6069', '6180', '6231', '6265', '6269', '6444', '6564', '6776', '6884', '7116', '7253', '7348', '7440', '7527', '7743', '7873', '8064', '8291', '8808', '8843', '9305', '9324', '9458', '9460', '9586', '9869', '====', 'a,b,', 'abcd', 'c)-d', 'etri', 'pow(', 'prin', "s'*(", "t('T"]
xnor
fuente
Cometí un error y pegué demasiado. Ya lo arreglé, pero los reconstructores, por favor no miren el historial de edición.
xnor
2
Para su información, lo solucionó dentro del período de gracia, por lo que no hay que preocuparse por el historial de edición.
Nathaniel
A la lista principal le faltan dos de los bloques de 4 espacios.
feersum
@feersum ¡Felicidades! No pensé en usar voladizos así. Es hora de hacer un nuevo y mejor revoltijo.
xnor
2
Agrietado por cierto.
feersum
3

Python 3: área 160

Después del crack de feersum , traté de ajustar mi código para que sea más difícil evitar el jumbo criptográfico. Está hecho de 40 Ipiezas, enumeradas una por fila:

')    #Two spaces
)-d)
*'Te
,b,c
0484
0824
2448
2562
3094
3762
3896
4052
4233
4562
5266
5277
5400
5885
5927
5965
6080
6720
6808
6884
7568
7856
7963
8609
8639
8665
8732
8892
9206
9893
====
abcd
ow(a
prin
t((p
tris

Como una lista de Python:

["')  ", ')-d)', "*'Te", ',b,c', '0484', '0824', '2448', '2562', '3094', '3762', '3896', '4052', '4233', '4562', '5266', '5277', '5400', '5885', '5927', '5965', '6080', '6720', '6808', '6884', '7568', '7856', '7963', '8609', '8639', '8665', '8732', '8892', '9206', '9893', '====', 'abcd', 'ow(a', 'prin', 't((p', 'tris']

Cambiado:

  • Se reordenó la multiplicación de cuerdas para intentar forzar el powuso
  • Menos espacios (aunque números más cortos)
  • No hay 1's

Sin embargo, estoy preocupado por los muchos factores del área.

xnor
fuente
2

C - Área 72

Bloques:

I    J     _______ L ______       O      __ Z _     _______ T ______
          /                \   /    \   /      \   /                \
"    e    m   "   T   )   6    };  ii   3"   (.    \nn  {6"  ]"0  i%s
i    t    p   ,   &   m   1    -]  ar    "\   f(    t    8    e    T
s   )"    .[  0x  ,f  ai  0r
"  

 ""   (t   ["
)"   61   4+
\____   ____/
      S

Dado que la única otra presentación de C fue descifrada. ;)

Un aseado 72 caracteres. Pura ofuscación. No hay problemas NP-difíciles de resolver o grandes números enteros para factorizar. Toma prestados algunos trucos de uno de los grandes. Los espacios se representan usando .s. No real. aparecen s en la solución.

He verificado tres veces la solución para garantizar la validez de las piezas.

COTO
fuente
2

CJam, área 80

20 Opiezas.

 I
`7

&d
'X

+5
7m

-2
`-

-6
#b

-O
U[

3Z
Pi

4"
2X

43
P"

?<
5b

D:
.=

FH
uL

K`
~C

QT
:c

[^
+9

aj
^F

hD
dP

tn
6 

uq
KG

x6
CF

-24"hD&d ID:uqx6tn-OajFH43[^+5?<3ZK`-6QT
`-2XdP'X`7.=KGCF6 U[^FuLP"+97m5bPi~C#b:c

No roté los ladrillos.

jimmy23013
fuente
2

C - Área 780

Hay 195 piezas en total. No se utilizaron comentarios. Nada particularmente complicado.

Nota: todas las barras invertidas (\ ) deben reemplazarse con espacios.

95 Ipiezas:

____ x12
incl
\edu
\\\\
\\\\
\\\\
dts<
h.oi
*_*>
_,_(
int\
__;\
,_(_
_*_,
=__,
__"*
+|_;
r__+
ahct
)=pu
_\ra
f\ch
edep
#t_,
y___
*_;_
(_;-
){__
,<_\
9"=_
+__*
___;
_+>_
_??<
+__*
*__,
__*_
*=+_
__:-
___-
_+__
,___
,__,
_,*&
*\&*
_,*_
_++,
+,__
++++
+__=
_++,
,,,_
___+
=+__
?++_
___+
=__+
,<_*
__+*
&+;*
+*__
__*_
__+,
++?~
__-9
_?__
__*_
(_+_
[**(
_<&_
};__
_@A:
(nia
@@@@
AAAA
AAAA
~~~~
_++;
_&,)
A__+
~~__
g_""
_;}_
+*__

35 Opiezas:

__
__
 (x18)
)_
__

_*
_\

_;
,-

_*
__

~)
"{

+_
+_

*_
,_

__
_)

~~
a~

_,
__

__
,)

_:
__

+*
__

__
+,

*+
_+

AA
AA

__
,+

18 Lpiezas:

___
_
 (x2)
_;*
_
_=_
+
__*
_
+__
_
**_
&
+*_
_
&*&
,
++,
_
_*_
_
;;_
"
__+
_
AAA
~
"*)
;
___
(
,_-
_
_~^
_

25 Jpiezas:

_+=
  +
+,_
  _
*__
  ;
;;_
  \
_,_
  )
~~~
  _
___
  A
~;(
  _
;__
  i
_;m
  A
=__
  _
a;a
  A
="A
  a
~_\
  o
o_a
  a
~~~
  _
99-
  _
*9_
  _
__)
  _
__*
  <
+_,
  _
_++
  =
_+_
  _
++_
  _
_+:
  _

10 Tpiezas

 _
,__
 +
*?_
 =
**=
 _
__+
 _
:_+
 _
_+_
 _
(_-
 +
++,
 +
___
 *
__:

4 Zpiezas

=*
 ++
*+
 __
t_
 -~
__
 f(

8 Spiezas:

 _,
_,
 __
__
 (x2)
 -_
__
 (x2)
 _9
~_
 99
__
 __
],

Solución

#include <stdio.h> typedef char _________; int (* _____)()=putchar;____(_,___,__ ,______) _________*__,* *___,* ______;{__="9>?_|";______=*___ ;--_;--_<*__++?++*______,_+=_+ _:___,__,___;_<*__++?*______+= *______,++______,__,*______+=* ______,__,++______,*&*______+= *______,++______,* &*______+=* ______,++______,*&*&*______+=* ______,++______,_,*______+=*&* ______,_+=_+_:__,_;_<*__++?++* ______++,++*______++,++*______ ++,++*______++,++*&*______++,_ ,++*______,_+=_+_+_+_:______;_ <*__++?~_____(_-_+_-_)^~_____( *______),++*___,_____,_,_+=*&* ______,_+_:_____(_+_-_-_);;_<* __?--*______:___;}_________ _[ 999-99-99],*__=_;main(______){ _________*___="AAA@@@@@~~~~~~" "~~~~~~aAAAAAaAAAAAAAAAAAAA;;" "aa~~~~~~~~~a;a";_____:____((* ___-______),&__);if(__,*++___) goto _____;++______;++______;}

es1024
fuente
1

Wolfram, área 72

Donde quiera que vea un guión (-), reemplácelo con un espacio

yo

h01-

r*1/

j

6
115

l

  m
+1C

  t
*0e

  e
,,[

o

r4
a+

s

 10
-1

 +1
Pr

z

ro
 8*

ac
 -1

od
 +1

t

--F
 {

,50
 0

/]}  -- fixed bracket directions
 0

1-,
 ,

01C
 0

tni
 4
Gerli
fuente
¿Te refieres al lenguaje Wolfram (es decir, Mathematica)? Todos sus soportes y tirantes apuntan en la misma dirección: ¿los volteó accidentalmente al rotar los bloques?
Martin Ender
1
De acuerdo, sí, el soporte y la abrazadera en el tercer Tbloque deberían ser al revés. Me las arreglé para reconstruirlo .
Martin Ender
Idioma Wolfram, sí. ¡Oh no, cometí un error! ¡Felicitaciones por resolverlo a pesar de eso!
Gerli
Arreglé la T. Imprimí el código y roté el papel para reducir el ejercicio mental ... Olvidé tener en cuenta el hecho de que los símbolos también cambiaron ...
Gerli
0

MATLAB, área 48

Desafortunadamente, no parece funcionar en Octave.

-
^-1

'
'u"

v'+
e

[['
;

'.i
]

lmi
a

 kv
hW

 .x
).

3)
t;

b(
'p

('l; 

.]'e
Feersum
fuente
0

Área Python 3 176

No uso guiones bajos en este programa, así que decidí reemplazar todos los espacios con guiones bajos para mayor legibilidad. Asegúrate de volver a colocarlos en espacios cuando no puedas volver a armarlos.

I bloques:

1456

"jtr

\)\~

tris

],i)

t=""

2697

t(t[

_r+2

_r_i

O bloques:

i_
s_

_;
32

6#
an

".
+-

t)
in

n(
_[

""
(c

ap
ri

L bloques:

  =
#14

  .
\n"

  ;
"(t

  i
T%"

  o
:=i

  r
ioj

  6
mp#

Bloques J:

6
2(h

5
574

#
"=t

7
spl

f
o__

s
(s_

n
];#

0    
t=_

*
#)(

Bloques T:

=_1
 _

295
 r

21,
 r

,2)
 .

Bloques Z:

46
 ""

"5
 3"

#t
 )n

1t
 ),

Bloques S:

 ge
34

 nt
68
patata
fuente
0

Python 3

Área - 484

Espacios reemplazados por % . Hay algunos comentarios utilizados como relleno. Bastante un poco de repetición de código. Puede ser bastante complicado.

121 Os

41
)+

%r
1-

:#
1#

%r
1-

01
,+

a1
n+

))
0+

h1
r-

#0
##

--
ge

11
1-

hr
1-

--
-1

ap
0+

+1
+'

h0
r+

:1
##

11
1-

))
0+

a0
p+

n0
d+

f%
oz

-1
0+

hr
1-

n0
d+

a0
p+

a1
n+

+0
1+

hf
.=

i1
%-

f%
oa

a1
n+

(c
0+

(0
1+

0,
1+

i1
n+

in
1+

r+
%=

-0
1+

fo
%l

n'
d'

--
=1

p1
%-

-;
-a

-;
-h

a1
n+

pe
0+

pe
0+

-1
0+

n0
d+

11
0-

a0
p+

i1
n+

hz
.=

n0
d+

##
)#

5)
1+

g(
1-

%1
r-

(c
.j

(0
c+

11
0-

(z
n(

g(
1-

41
)+

)s
)'

in
1+

r+
%=

ap
in

g(
1-

01
,+

-a
-n

(l
1+

pt
e(

%1
r-

-#
]#

(1
f+

g1
(-

h.
l=

01
,+

h.
pr

:1
##

:#
1#

(1
z+

r+
%=

+1
0+

p0
e+

r%
+=

(a
0+

hz
.=

+0
1+

(0
c+

))
0+

#0
##

q%
1-

g1
e-

-0
1+

#0
##

pe
0+

-1
h)

61
)+

an
1+

--
ng

fo
%f

)0
)+

f%
oz

-=
-[

11
)+

q1
%-

:#
1#

+0
1+

--
=r

j1
%-

ho
ri

#-
ra

(0
c+

i1
n+

,1
8-

r+
%=

%1
r-

##
0#
Decaimiento Beta
fuente