Escriba el código ofuscado ASCII-Art, léalo como, y como resultado: "DFTBA"

8

El desafío es escribir el código más elaborado, incrustado en el arte ASCII que lee e imprime "DFTBA". Por ejemplo, lo siguiente dice DFTBA:

oooooooooo.   oooooooooooo ooooooooooooo oooooooooo.        .o.       
`888'   `Y8b  `888'     `8 8'   888   `8 `888'   `Y8b      .888.      
 888      888  888              888       888     888     .8"888.     
 888      888  888oooo8         888       888oooo888'    .8' `888.    
 888      888  888    "         888       888    `88b   .88ooo8888.   
 888     d88'  888              888       888    .88P  .8'     `888.  
o888bood8P'   o888o            o888o     o888bood8P'  o88o     o8888o 

Y lo siguiente, en bash imprime DFTBA

echo "DFTBA"

El desafío es escribir uno que haga las dos cosas.

Condiciones ganadoras

Respuestas válidas, (todas las condiciones a mi discreción)

  • Se puede leer claramente como DFTBA
  • Imprimir DFTBA cuando se ejecuta
  • Debe ser funcional sin conexión a Internet.
  • tener letras de igual altura
  • no debe tener más de 80 columnas
  • no debe tener más de 10 filas

Puntos (suma más alta gana)

  • Filas * Columnas / 32
  • Legibilidad: 25 para legible, 50 para muy claro
  • 1 punto por cada carácter diferente que no sea un espacio en blanco utilizado

Restricciones

Estos pueden usarse para algo, por lo que se supone que todas las respuestas se liberan al dominio público. Si no puede, o elige no publicar su respuesta en el dominio público: publique un comentario / respuesta a la pregunta original que diga "La respuesta creada y / o compartida por mí, no puede considerarse de dominio público" .

¡Las respuestas de dominio no público también son bienvenidas! Solo asegúrese de especificar :-)

¿Qué es el DFTBA?

A veces significa "Don't Forget To Be Awesome", pero no siempre ... Larga historia ... Esta canción relacionada podría ayudar a explicar (o confundir).

Bandido
fuente
El criterio ganador es realmente el área más grande? Eso se convertirá rápidamente en una carrera armamentista de personas que agregarán más y más personajes sin valor para hacerlo más grande. Realmente no hay límite superior en esto.
captncraig
@CMP, revisado, gracias :-)
Brigante
¿Los caracteres en mayúscula y minúscula cuentan por separado (como caracteres diferentes)?
Shmiddty
Además, ¿qué me impide dejar caracteres aleatorios en el código que no hacen nada? eso está permitido?
Shmiddty
@Shmiddty, sí, todos los caracteres con diferentes códigos ASCII (excluyendo espacios en blanco). Mientras se ejecuta, está bien :-)
Brigante

Respuestas:

6

(He hecho una redacción completa aquí, ya que es bastante extenso cómo llegué a estos dos resultados)

Brainfuck, rango ASCII completo de 0 a 255: 80x10 = 800/32 = 25 + 25 + 219 = 269

+l+A+O#@e@        /+@+|+2+@@X     @*3+}+@+@YZ    q4[@>@+@@           @:+@
@+B+"+~@@N        @p+K+%>@@v@     dJ+w+@+@+@@    I@+@+@+@@         (@+  @<@
@<@      @-@      @@]                 U>@        @-@    -@@f      @.r    +@E
+@@       .@@0    @>@+@+@+@@@         @+@        @.@    <@@@      @-'    -@@
-€R       -9‚     ƒ.„-….†$c‡ˆ         ‰Š‹        Œg&Ž6H        ‘h’“7”i•–—
˜u™       Qš1›    MœL                 )nG        ?žŸ x¡¢£        `¤¥¦j@§{D¨
!©ª       «P¬­    ®bm                 ¬¯°        ±²³    ´µ\¶     ·¸F      ¹8º
»S¼      ½¾¿      ÀVÁ                 ÂTà        ÄÅk    _ÆÇÈ     ÉÊË      ÌÍÎ
ÏaÐ;ÑCÒÓsÔ        ÕÖ×                 ØoÙ        ÚÛ=Ü5ÝÞßà      áâã        äåæ
çtèéê^ëìíî        Wïð                 ñòó        ôõö÷yøùúû      üýz        þÿ,

Hay una línea en el medio de esta parte superior que no es del todo estrecha, pero esa es solo la pantalla aquí en CodeGolf. Si descarga el archivo original desde el enlace de arriba y verlo en el desarrollador Brainfuck Bloc de notas o Wordpad en lugar de, por ejemplo, que se verá correcta como éste .

Brainfuck, parte ASCII rango 0 a 127: 80x10 = 800/32 = 25 + 25 + 95 = 145

+l+A+O#@e@         /+@+|+2+@@X     @*3+}+@+@YZ    q4[@>@+@@           @:+@
@+B+"+~@@N         @p+K+%>@@v@     dJ+w+@+@+@@    I@+@+@+@@         (@+  @<@
@<@      @-@       @@]                 U>@        @-@    -@@f      @.r    +@E
+@@       .@@0     @>@+@+@+@@@         @+@        @.@    <@@@      @-'    -@@
-@R       -9@@     @.@-@.@$c@@         @@@        @@g&@@6@H        @h@@7@i@@@
@u@       Q@1@     M@L                 )nG        @?@@@x@@@        `@@@j@@{D@
!@@       @P@@     @bm                 ¬@@        @@@    @@\@     @@F      @8@
@S@      @@@       @V@                 @T@        @@k    _@@@     @@@      @@@
@a@;@C@@s@         @@@                 @o@        @@=@5@@@@      @@@        @@@
@t@@@^@@@@         W@@                 @@@        @@@@y@@@@      @@z        @@,
jwbensley
fuente
Respuesta impresionante! Definitivamente la puntuación más alta, pero uno de nosotros está contando incorrectamente. Eliminé caracteres que coinciden con \sexpresiones regulares (espacios en blanco), cadena a matriz |> único |> longitud.
Brigante
¿Ejecutó esa expresión regular sobre el texto anterior o el texto en el sitio web que vinculé, verifique allí ya que la versión de CodeGolf del código no es la misma (altera el código que pego).
jwbensley
21

Piet, puntaje incierto (153ish)

Programa Piet

Entiendo que esto no se ajusta estrictamente a las especificaciones (que requieren el arte ASCII), sin embargo, el código fuente proporciona un DFTBA muy legible. El rastro está abajo.

Piet ignora todos los colores que no significan nada. Como resultado, utilicé el gris como el "color de comentario" genérico para delinear y similares. El gris no se interpreta (como verás en la traza). Quería dejar en claro qué píxeles estaban en el programa y cuáles no.

He usado 15 colores, que son 13 sin espacios en blanco. Tiene 89x32 píxeles, aunque podría comprimirse más. Usé 4 códigos de operación (restar, dividir, empujar y salidac). ¿Quizás si usara la puntuación como pensaría, 153?

Probablemente no garantiza un puntaje, pero fue un ejercicio interesante. ¡Nunca antes había usado Piet, nunca había hecho tanta programación de prueba y error! Necesitaba npiet ampliamente, y su rastro. ¡Todavía no puedo entender cómo funciona el movimiento del cursor con alguna estabilidad!

Cómo funciona:

  • D, F, T son constantes para sus respectivas letras ASCII que luego se envían a la pila, y el comando OUTC llamado
  • B es el ASCII para B x 2 (se necesita que se vea bien), que se empuja a la pila, luego se divide por dos, luego se duplica en la pila y el comando OUTC se llama
  • Tenga en cuenta la duplicación anterior. Eso fue porque no pude hacer que A se viera bien en tan pocos personajes. Empujo 1 a la pila, resta (haciendo el código ASCII para A) y luego todo el carácter A es el código de operación para OUTC, no importa el tamaño, porque es una operación no una constante

Rastro

lochok
fuente
Buena respuesta. Entonces, ¿se ignoran todas las letras excepto A?
Brigante
En realidad, cada letra es la constante de esa letra (excepto A). El área de cada letra es la constante. Por lo tanto, por qué son un poco raros :)
lochok
Oh, eso es realmente genial. Bien hecho :-)
Brigante
17

Malbolge ( 71 80 x 10) / 32 + 25 + 94 = 141.1875 144

Actualización: se agregó más espacio entre las letras para aumentar el puntaje.

Probado con el intérprete oficial de Malbolge. Por supuesto, no es realmente difícil imprimir texto estático con Malbolge. La codificación utilizada por Malbolge casi garantiza que tendrá todo el conjunto de caracteres ASCII imprimibles allí.

bCBA@?>=<;       :9876543210    /.-,+*)('&%$#    "!~}|{zyxwv            uts
rqp     onm      lkjihgfedcb    a`_^]\[ZYXWVU    TSR      QPO         NML KJI
HGF      EDC     BA@                 ?>=         <;:       987       654   321
0/.      -,+     *)(                 '&%         $#"      !~}       |{z     yxw
vuW       srq    ponmlkjihg`         &^]         #a`_A]\[TxX       WVU       TSR
QPO       N0L    KJIHGFEDCBA         @?>         =<;:3W16543       ,P0/.-,+*)('&
%$#      "!~     }|{                 zyx         wvu      tsr      qpo       nml
kji      hgf     edc                 ba`         _^]       \[Z     YXW       VUT
SRQ     PO1      lYK                 JIH         GFE      DCB      A@?       >=<
;:98765432       10/                 .-,         +*)('&%$#"!       ~}|       {zy

Explicación del código (la gente dijo que no lo entendía):

(Para obtener más información sobre Malbolge, consulte http://esolangs.org/wiki/Malbolge ).

Primero, normalicemos el código a las operaciones dadas en la página anterior:

iooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*ooooooooooooop<pp<ooo*ooop<ooooooooooo*ooooooooooooooooooop<poooop<oo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo*<vooooo
oooooooooooooooooooooooooooooooooooooooooooo

También tenga en cuenta que después de cada ciclo de instrucción, la instrucción ejecutada se vuelve a codificar y el puntero de código y el puntero de datos se incrementan en 1.

  • Al principio, C(código ptr) = D(datos ptr) = 0. Esto significa [D] = 'b' (98)y la iinstrucción está seleccionada. Entonces saltamos a la dirección 99. ( Cprimero se establece en 98 y luego aumenta), el puntero de datos ahora es 1.

  • En 98 hay una cadena de NOP ( o). Estos tienen el efecto de que todos ellos son re-codificado y que Cy Dse incrementan. La siguiente instrucción real ( *) se encuentra en la dirección 140, así que ahora C=140y D=42.

  • *gira a la derecha (o división por tres) en lo que apunta el puntero de datos, y se almacena de nuevo en la memoria y en el acumulador A. [42] = 'x' (120), so A <- [42] <- '(' (40).

  • Otra fila de NOP causa C=154 (p)y D=62 ( [D]='j' (106) ).

  • pEs el operador loco . No voy a reproducir su tabla aquí, pero lo que sucede es A = [D] = crazy(A, [D]). Asigue siendo 42, [D]es 106, lo que significa crazy(A, [D]) = 29504.

  • El siguiente es <, que es la salida. Emite el acumulador, que es 29504, como un carácter ASCII. 29504 % 256 = 68, que es D, así que ahora tenemos la D.
  • El resto de las letras se emiten de manera similar.
marinus
fuente
Miré un poco a Malbolge ... ¡y no lo entiendo! :-) ¿Te importaría explicar cómo funciona este código?
Brigante
@FakeRainBrigand: lo hizo
marinus
No entiendo cómo 141> 144.
Shmiddty
8

Javascript (80 x 10) / 32 + 25? + 94 = 144

Código:

eval('for(i      =10;i<0x24;42,  Number["prot"+  "otype"][(i++    ).toString(36\
)]=Number["p"    +"rototype"]/*  */["toString"]  );alert(((+((-   ~{}).a()+(!!{\
}+!!{}+!!{}).b   ())).c(+((+!!{  }).d()+(5).e()  ))+(     +((+!!  {}).f()+(2+!!\
{}+!      !{}+!  !{}).               g())).      h(+(      (+!!   {}).      i()\
+(7)       .j()  ))+(+((2)           .k()+(      /*TVEXFGHZKJP    Q*/(      0x1\
+0x1       +0x1  )*0x3).l(           ))).m(      +((8/4+1).n()+   (+[]).o\()))+\
(+((      +!!{}  ).p()+(-~           {}).q(      ))).      r(+((  +!!{}).s()+(!\
!{}+2/*WARP*/)   .t()                ))+(+(      (+!!     {}).u(  )+(+      [])\
.v())).w(+((+    !!{}                ).y()+      (2/*Y*/).z()))   )/**      **/\
.toUpperCase     ());                "#$%\'      /,:>?@^_`9|&M    ODLB      I"')

Demostración: http://jsfiddle.net/4hyyS/3/

Para agregar alguna explicación:

Primero mapeo Number.prototype.toStringa cada letra minúscula:

for(i=10;i<36;Number.prototype[(i++).toString(36)] = Number.prototype.toString);

Esto me permite usar las letras minúsculas de manera eficiente.

A continuación, construyo la cadena 'DFTBA' mediante la conversión de números a caracteres, por ejemplo:

(13).a(15) // 'd'

(Podría haber usado fromCharCodeo toString(36)para todos los personajes, pero eso habría sido demasiado fácil)

Para completar caracteres adicionales y ofuscar aún más el código, utilizo algunos trucos para crear los números:

+[]        // 0
+!!{}      // 1
!!{}+!!{}  // 2

Etc.

Para los caracteres que no se usan en el código real, los solté en /* ... */cadenas o bloques de comentarios " ... ".

Comencé con una cuadrícula de 80x10, luego reduje eso a mis letras, luego ajusté mi código para que se ajuste a eso (también, se ve mejor en esta fuente, la última |es solo el cursor):

Se ve mejor en una fuente diferente

Shmiddty
fuente
1
Agradable. Si hubiera alguna forma de suavizar la B, sería mejor (es el límite 8). Entonces el puntaje me parece correcto.
Brigante
6

Perl (75 x 7) / 32 + 25 + 59 ≈ 107.4

@D=('-4*x^2      8*x^5-72*x^3  56*x^4-260*x^1  +272*x^6',         '
4*x^2    -4*x'   );$b++   ,s/  (-)  ?(\w  +)(  .x)?    (\^       \d+
 )?/      "\$$b   \[0$4             ||$2       $3<1    ]$1=     $2^I"
 .!"       $$O"   /exgemfor         +@D;       $P=pop@2;$K     =(  pop
 @1)       /+$P   and               $_.=       chr(    --$j   ?"$K*x^$j"
:"+"     .$K),    s/^               \+|\       +\B|    \b1\   *|\    ^1$/
/gx,map$1[$      j++]-=            $_*$K,      @2while$j=    @1-@2  ;print

Te diría lo que hace, pero eso arruinaría el obfu, ¿no?)

primo
fuente
¡Increíble! Solo estoy contando 59 caracteres únicos (después de eliminar espacios en blanco).
Brigante el
@FakeRainBrigand oops, tienes razón. Acabo de count_charpasar por encima y olvidé excluir espacios en blanco.
primo
6

C #, (71 * 7) / 32 + 25 + 45 = 85.53

¡Mi primera respuesta de Puzzles de programación ! C # realmente no es muy bueno para estos juegos ...

/ ** / using / * * / System; / * * / namespace F {class // oo. .o.       
 // 8 '' Y8b `888 '8888` 888' 'Y8b .888.      
 // 8 888 888 8888 888 888 .8 "888.     
 / * 8 8 * / I {static void Main (cadena [] args    
 ) {/ * 8 888 "8888 888` 88 * / {Consola.   
 // 8 d88 '888 8888 888 .88P .8' '888.  
WriteLine (/ * 88 8888 * / "DFTBA"); / ** /}}}}
shamp00
fuente
¡Estoy impresionado! No es fácil hacer esto cuando tienes que crear una clase :-)
Brigante
6

Python, (69 * 7) / 32 + 25 + 49 = 89

oo=getattr;   o=__import__ ('sys');O='s' 'tdout';#o.        .o.
class    Y8b  :#88'     `8 8'   888   `8 `888'   `Y8b      .888.
 #88      888  888              888       888     888     .8"888.
 def      a88  (Oo,oO):         oo(       oo(o,O),'w'    'r'  'it'
 "e"      )((  (oO    )         ));       11/    0b10   ;return[88,
 88]     #d8`  888              888       888    .88P  .8'     `888.
d=Y8b().a88;  d("D"            "FT")     +[1]+d("BA"  '\n'     )#1880

No es fácil hacerlo en Python debido a la sangría y el espacio en blanco. Así que hice una de muchas cosas para hacer que la sangría sea legítima:

  • definió una clase
  • concatenación de cadenas utilizada
  • lista con una coma final
  • carácter de continuación de línea (que no terminé usando)

La legibilidad aún se puede mejorar un poco ...

jadkik94
fuente
4

C, (55 * 8) / 32 + 25 + 55 = 93.35

Es bastante fácil agrandar las letras y usar algunos caracteres más.

main()    {p(O(O(O(  O(O(O(O(O(  O(O(O(O(O       (O
(p(O(O(   p()))))))  ))))))))))  ));puts(""     ,p(o
(p    (o  (o             (o      (o      (o    (o  (o
(o    (o  (o             (o      (o      (o   (o    (o
(o    (o  (o())))))      ))      ))))))))    ))))));}x=
59    ;O  ()             {x      ++      ;}  o(      ){
+x    --  ;}             p(      ){      ;;  ;;      ;;
putchar   (x             +9      );x;-x;}    q(      );
Ugoren
fuente
3

Java

class  Ypnypn  {public  static    void
main(  String  []array  ){{}{}   {{{{}{
{   }  {          {     }    }   {    }
{   (  System     .     out).    print(
(   "  "          +     "    "   +    
"   "  +          "     DFTBA"   )    .
trim(  )          )     ;}}}}}   }    }
Ypnypn
fuente
Definitivamente la mejor legibilidad de todas las respuestas. Hoy no tengo votos, pero volveré.
bballdave025