Escreva código ofuscado com arte ASCII, leia como e resultando em: "DFTBA"

8

O desafio é escrever o código mais elaborado, incorporado na arte ASCII que lê e imprime "DFTBA". Por exemplo, o seguinte lê 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 

E o seguinte, no bash imprime DFTBA

echo "DFTBA"

O desafio é escrever um que faça as duas coisas.

Condições vencedoras

Respostas válidas (todas as condições, a meu critério)

  • Pode ser claramente lido como DFTBA
  • Imprimir DFTBA quando executado
  • Deve ser funcional sem conexão à Internet
  • tem letras de igual altura
  • não deve ter mais de 80 colunas
  • não deve ter mais de 10 linhas

Pontos (soma mais alta ganha)

  • Linhas * colunas / 32
  • Legibilidade: 25 para legível, 50 para muito claro
  • 1 ponto para cada caractere diferente de espaço em branco usado

Restrições

Eles podem ser usados ​​para alguma coisa, portanto, todas as respostas são assumidas como liberadas para o domínio público. Se você não puder ou optar por não divulgar sua resposta ao domínio público: poste um comentário / resposta à pergunta original dizendo "A resposta criada e / ou compartilhada por mim, pode não ser considerada de domínio público" .

Respostas de domínio não público também são bem-vindas! Apenas certifique-se de especificar :-)

O que é o DFTBA?

Às vezes, significa "Não se esqueça de ser incrível", mas nem sempre ... Longa história ... Essa música relacionada pode ajudar a explicar (ou confundir).

Brigand
fonte
O critério vencedor é realmente a maior área? Isso rapidamente se transformará em uma corrida armamentista de pessoas, adicionando cada vez mais personagens inúteis para aumentá-lo. Realmente não há limite superior nisso.
captncraig
@CMP, revisados, graças :-)
Brigand
Os caracteres maiúsculos e minúsculos contam separadamente (como caracteres diferentes)?
Shmiddty
Além disso, o que me impede de despejar caracteres aleatórios no código que não faz nada? Isso é permitido?
Shmiddty
@ Shmiddty, sim, todos os caracteres com códigos ASCII diferentes (excluindo espaço em branco). Contanto que funcione, tudo bem :-) #
392 Brigand

Respostas:

6

(Fiz uma redação completa aqui , pois é bastante extenso o modo como cheguei a esses dois resultados)

Brainfuck, faixa ASCII completa 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        þÿ,

Existe uma linha no meio desta linha superior que não é muito estreita, mas essa é apenas a exibição aqui no CodeGolf. Se você baixar o arquivo original no link acima e visualizá-lo no Brainfuck Developer ou no Notepad em vez do Wordpad, por exemplo, ele ficará correto assim .

Brainfuck, intervalo ASCII da parte 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
fonte
Resposta incrível! Definitley a pontuação mais alta, mas um de nós está contando incorretamente. Eu removi caracteres correspondentes a \sregex (espaço em branco), string a array |> unique |> length.
Brigand
Você executou esse regex acima do texto acima ou do texto no site que vinculei? Verifique lá como a versão do CodeGolf não é a mesma (altera o código em que eu colo).
precisa saber é o seguinte
21

Pontuação Piet Incerta (153ish)

Piet Program

Entendo que isso não se encaixa estritamente nas especificações (exigindo arte ASCII), no entanto, o código fonte fornece um DFTBA muito legível. O rastreamento está abaixo.

Piet ignora todas as cores que não significam nada. Como resultado, usei cinza como a "cor do comentário" genérica para delinear e afins. O cinza não é interpretado (como você verá no traço). Eu queria deixar claro quais pixels estavam no programa e quais não estavam.

Eu usei 15 cores, que são 13 sem espaço em branco. Tem 89x32 pixels, embora possa ser mais compactado. Eu usei 4 códigos op (subtrair, dividir, empurrar e outputc). Talvez se usando a pontuação como eu pensaria, 153?

Provavelmente não garante uma pontuação, mas foi um exercício interessante. Como nunca usei Piet antes, nunca fiz tanta programação de tentativa e erro! Eu precisava de npiet extensivamente, e seu rastro. Ainda não consigo descobrir como o movimento do cursor funciona com alguma estabilidade!

Como funciona:

  • D, F, T são constantes para as respectivas letras ASCII que são enviadas para a pilha e o comando OUTC chamado
  • B é o ASCII para B x 2 (necessário para ter uma boa aparência), que é enviado para a pilha, depois dividido por dois, depois duplicado na pilha e o comando OUTC chamado
  • Observe a duplicação anterior. Isso foi porque eu não conseguia fazer A parecer bem em tão poucos personagens. Pressiono 1 na pilha, subtraio (criando o código ASCII para A) e, em seguida, todo o caractere A é o opcode para OUTC - não importa o tamanho, porque é uma operação que não é constante

Vestígio

Lochok
fonte
Resposta legal. Então, todas as letras, exceto A, são ignoradas?
Brigand
Na verdade - cada letra é a constante dessa letra (exceto A). A área de cada letra é a constante. Daí porque eles são um pouco estranho olhando :)
lochok
Oh, isso é muito legal. Bem feito :-)
Brigand
17

Malbolge ( 71 80 x 10) / 32 + 25 + 94 = 141,1875 144

Atualização: adicionado mais espaçamento entre as letras para aumentar a pontuação.

Testado com o intérprete oficial de Malbolge. Obviamente, não é difícil imprimir texto estático usando Malbolge. A codificação usada por Malbolge quase garante que você terá todo o conjunto de caracteres ASCII imprimíveis.

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

Explicação do código (as pessoas disseram que não o entenderam):

(Para mais informações sobre Malbolge, consulte http://esolangs.org/wiki/Malbolge ).

Primeiro, vamos normalizar o código para as operações fornecidas na página acima:

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

Observe também que após cada ciclo de instruções, a instrução executada é recodificada e o ponteiro de código e o ponteiro de dados são aumentados em 1.

  • No início, C(código ptr) = D(dados ptr) = 0. Isso significa [D] = 'b' (98)e a iinstrução está selecionada. Então, saltamos para o endereço 99. ( Cé definido primeiro como 98 e depois aumentado), o ponteiro de dados agora é 1.

  • Aos 98, há uma série de NOPs ( o). Estes têm o efeito que todos eles são re-codificado e que Ce Dsão incrementados. A próxima instrução real ( *) é encontrada no endereço 140, agora C=140e agora D=42.

  • *gira à direita (ou divide por três) no que o ponteiro de dados está apontando e armazena de volta na memória e no acumulador A. [42] = 'x' (120), so A <- [42] <- '(' (40).

  • Outra linha de NOPs causa C=154 (p)e D=62 ( [D]='j' (106) ).

  • pé o operador louco . Não vou reproduzir a tabela aqui, mas o que acontece é A = [D] = crazy(A, [D]). Aainda é 42, [D]é 106, o que significa crazy(A, [D]) = 29504.

  • Em seguida é <, que é produzido. Ele gera o acumulador, que é 29504, como um caractere ASCII. 29504 % 256 = 68, ou seja D, agora temos o D.
  • O restante das letras são produzidas de maneira semelhante.
marinus
fonte
Eu olhei para Malbolge um pouco ... e não entendi! :-) Você se importaria de explicar como esse código funciona?
Brigand
@FakeRainBrigand: fiz isso
marinus
Eu não entendo como 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"')

Demonstração: http://jsfiddle.net/4hyyS/3/

Para adicionar alguma explicação:

Primeiro mapeio Number.prototype.toStringpara cada letra minúscula:

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

Isso me permite usar as letras minúsculas com eficiência.

Em seguida, construo a string 'DFTBA' convertendo números em caracteres, por exemplo:

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

(Eu poderia ter usado fromCharCodeou toString(36)para todos os personagens, mas isso seria muito fácil)

Para preencher caracteres extras e ofuscar ainda mais o código, usei alguns truques para criar os números:

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

Etc.

Para caracteres que não são usados ​​no código real, eu os soltei em blocos de comentários /* ... */ou seqüências de caracteres " ... ".

Comecei com uma grade de 80 x 10, depois as reduzi às minhas letras, depois ajustei meu código para se ajustar a isso (também fica melhor nessa fonte, a última |é apenas o cursor):

Parece melhor em uma fonte diferente

Shmiddty
fonte
1
Agradável. Se houvesse alguma maneira de suavizar o B, seria melhor (é 8). Então a pontuação parece certa para mim.
Brigand 02/02
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

Eu diria o que faz, mas isso arruinaria o obfu, não seria;)

primo
fonte
Impressionante! Estou apenas contando 59 caracteres únicos (depois de remover o espaço em branco).
Brigand
@FakeRainBrigand oops, você está certo. Acabei de count_charpassar por isso e esqueci de excluir espaços em branco.
Primo
6

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

Meus primeiros quebra-cabeças de programação resposta aos ! C # não é realmente muito bom para esses jogos ...

/ ** / 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 (string [] args    
 ) {/ * 8 888 "8888 888` 88 * / {Console.   
 // 8 d88 '888 8888 888 .88P .8' '888.  
WriteLine (/ * 88 8888 * / "DFTBA"); / ** /}}}}
shamp00
fonte
Estou impressionado! Não é fácil de fazer estes quando você tem que criar uma classe :-)
Brigand
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

Não é fácil fazê-lo em Python por causa do recuo e espaço em branco. Então, fiz uma de muitas coisas para legitimar o recuo:

  • definiu uma classe
  • concatenação usada de strings
  • lista com uma vírgula à direita
  • caractere de continuação de linha (que acabei não usando)

A legibilidade ainda pode ser um pouco melhorada ...

jadkik94
fonte
4

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

É muito fácil aumentar as letras e usar mais alguns caracteres.

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
fonte
3

Java

class  Ypnypn  {public  static    void
main(  String  []array  ){{}{}   {{{{}{
{   }  {          {     }    }   {    }
{   (  System     .     out).    print(
(   "  "          +     "    "   +    
"   "  +          "     DFTBA"   )    .
trim(  )          )     ;}}}}}   }    }
Ypnypn
fonte
Definitivamente, a melhor legibilidade de todas as respostas. Hoje estou sem votos, mas volto.
bballdave025