Olá, mundo ofuscado


123

Crie o programa ofuscado mais curto possível que exibe o texto "Hello World".

Para ser considerado um programa ofuscado, ele deve atender a pelo menos dois dos seguintes requisitos:

  • Não conter os caracteres: h, l, we dem qualquer caso
  • Não conter os caracteres: e, o, r, 0, e 1, em qualquer caso
  • Não contém os caracteres: 2ou7

Entrada:
nenhuma

Resultado:
Hello World


6
Eu acho que importem python não é permitido.
— Alexandru

26
Essas regras também se aplicam às palavras-chave do idioma?
— Hallvabo

8
essas restrições não diferenciam maiúsculas de minúsculas?
— Enone

20
Alguém poderia explicar por que 2 e 7 não são permitidos? Estou curioso, pois não vejo por que foram escolhidos em particular.
— Thomas Eding

4
@trinithis, e outros, de caracteres ASCII 72é "H"o que é por isso que eu escolhi esses dois
— Kevin Brown

Respostas:


51

GolfScript, 17 caracteres

'· Š ““ ?? ߨ ???? “›' {~}%

Ao testar esse envio, salve o arquivo como binário direto, não como UTF-8. Está tendo problemas para recriar o arquivo? Aqui está o hexdump:

00000000  27 b7 9a 93 93 90 df a8  90 8d 93 9b 27 7b 7e 7d  |'...........'{~}|
00000010  25                                                |%|

1
Embora eu queira pensar que é uma solução óbvia, se você não sabe ao certo como essa entrada funciona, você pode ler este spoiler: chat.stackexchange.com/transcript/message/442257#442257 :-)
— Chris Jester -Julho 01/02

12
Não é ISO-8859-1, na verdade é Windows-1252.
— precisa saber é o seguinte

@ GlitchMr: Na verdade, tenho certeza de que o envio também contém caracteres que estão fora do Windows-1252. ;-)
— Chris Jester-Young

@xfix Realmente também não é o Windows-1252. Embora o Windows-1252 tenha caracteres mais válidos que o ISO-8859-1, minha entrada contém caracteres, como 0x8D e 0x90, que também não são válidos no Windows-1252.
— Chris Jester-Young

É justo, esqueci que alguns caracteres são proibidos no Windows-1252.
— 22915 Konrad Borowski

171

Perl

Como a resposta óbvia usa algum tipo de mudança, sinto-me obrigado a postar algo usando o Acme :: EyeDrops , mas com o poder extra que achei que o meu deveria ser um pouco mais divertido.

                            ''=~('('."\?".
                        '{'.('`'|'%').('['^'-'
                    ).('`'|'!').  ("\`"|       ','
                 ).'"'.('['^'.').   (((           '['
              ))^'(').('`'|('%')).(                  '{'
            ^'[').('{'^'/').('`'|')')                  .+(
          '`'|'-').('`'|'%').':'.':'.(                   '`'
         ^'(').('`'|')').('{'^')').(                      '`'
       |((  '%'))).('['^'(').'\\'.'"'                       .+(
      '['   ^'.').('['^'(').("\`"|                           ','
     ).(    '`'|'%').('`'|"\%").(                             '['
    ^((      '+'))).'\\'.'"'.';'.                              (((
   (((        '\\')))))).('$').                                 '|'
   .((         '+')).'+'.(';').                                 (((
  (((           '\\'))))      )                                  ).+
  '$'            .'\\'.                                          '"'
 .((               '=')    ). "'".                                "'"
 .((                (';'))).       '\\'                           .((
'@'                   )).('`'|                                     '#'
).+                        '='                                     .+(
'`'                          |+    "\-").(                         '`'
|((                            '!'))).("\["^                       '+'
).+                              '\\'.'{'."\[".                    (((
(((                              '\\'))))))."\$".                  '_'
.((                             ',')).'\\'.'$'.('`'|               '*'
).+                             ','.('^'^('`'|('+'))).(            '^'
^+(                              '`'|'.')).'+'.('^'^('`'           |((
'+'                               )))).'*'.'\\'.('$').(            '`'
 |((                               '*'))).'+'.'+'.']'.            (((
 (((                                '\\'))))))."\}".(             '['
  ^((                                '('))).('['^'+')            .+(
  '`'                                |',').('`'|')')             .+(
   '['                                ^'/').('/').              '/'
   .((                                ',')).'\\'.               '"'
    .+(                               '`'^'(').                (((
     '`'                              ))|'%')                 .+(
      '`'                             |',').                 (((
       '`'                           ))|','                 ).(
         '`'                         |'/')                .+(
          '{'                        ^'['                ).(
            '{'                      ^((               ','
              )))                     .(  (          '`'
                 )|+                   ((         '/'
                    )))                        .+(
                        '['                ^((
                            ')'))).(('`')|

                            ',').('`'|'$')
                        .((        '\\')).'"'.
                    ';'       .  ('['^',').(('`')|
                 '('         ). ('`'|')').('`'|',').(
              '`'              |'%').'('.('^'^('`'|'/'))
            .((             ')')).'\\'.'{'.('`'|'-').('['^
          '"'             ).((   (  '\\'))).'$'.('`'|('*')).
         ';'             .+(      ( ( '`'))|'-').('['^('"')).
       '\\'              .+            '@'.('['^'(').'='.("\`"|
      '-').             ('`'|'!'           ).('['^'+').'\\'.'{'.
     "'".(             '{'^"\[").   ((     "'")).'\\'.'}'.('(').(
    '^'^(             '`'|'.')).'.'.'.'.('^'^('`'|'+')).('^'^('`'|
   '.'))            .')'.';'.('`'|'&').('`'|'/').('['^')').'('.'\\'
   .'@'            .('`'|'#').')'.'\\'.'{'.'\\'."\$".(   '['^"\(").
  '['              .'\\'.'$'.'_'.'-'.'>'.'['.('^'^('`'     |',') ).+
  ']'             .']'.'='.'\\'.'$'.'_'.'-'.'>'."\[".(      '^'^ (((
 '`'              ))|'.')).']'.('`'|')').('`'|('&')).        (((  (((
 (((             '\\'))))))))).'$'.'_'.'-'.'>'.'['.           +(  '^'
^+(              '`'|',')).']'.'<'.'='.('^'^('`'|         (    (   '+'
)))               ).('^'^('`'|'.')).';'.'\\'.'$'.'_'.     (    (   '-'
)).                '>'.'['.('^'^('`'|'/')).']'."\>".       (       (((
(((                  '\\')   )))))).'$'.'_'.'-'.'>'                .((
'['                           )).('^'^('`'|(','))).                ']'
.((                           '?')).'\\'.'$'.('`'|                 '*'
).((                          '+')).'+'.':'.'\\'.                  '$'
.('_').                        '-'.'>'.'['.('^'^                   (((
'`'))|','                       )).']'.'-'."\-".                   (((
'\\'))).+                       '}'.('['^'+').(                   '['^
 "\)").(                        '`'|')').("\`"|              (   '.')
 ).('['^                        '/').'\\'."\"".                   (((
  '\\'))                        ).'\\'.('['^')'    )             .((
  '\\')).                      '@'.('['^"\(").   ((              (((
   '\\'))                       ))).'"'.';'.(   '['        ^    '.'
   ).('['                        ^'(').('`'|    ((        (     ','
    )))).                         ('`'|'%')     .              (((
     '`')                         )|'%').(                    '['
      ^((                          '+')))                    .((
       '('                         )).                      (((
         '^'                                          )   )^(
          '`'                                         |  '/'
            )).                                       ('`'
              |((                                    '%'
                 )))                              .+(
                    '^'                        ^+(
                        '`'                |((
                            '+')))).(')').

                            ';'.('`'|',').
                        ('`'|'!').('['^    '('
                    ).('['^'/').(('{')^        '['
                 ).('`'|')').("\`"|    (          '&'
              )).'\\'.'$'.('`'|"\*").                '='
            .'='.'\\'.'@'.('`'|"\#").                  (((
          '\\'))).'}'.('['^'+').('['^  (                 ')'
         )).('`'|')').('`'|'.').('['^   (                 '/'
       )).'\\'.'"'.'\\'.'\\'.('`'      |+                   '.'
      ).'\\'.'"'.('!'^'+').'"'.'}'.   ')'                    );(
     $:)='.'^'~';$~='@'|'(';$^=')'^                           '['
    ;$/='`'|'.';$,='('^'}';$\="\`"|                            '!'
   ;$:=')'^'}';$~='*'|'`';$^=('+')^                             '_'
   ;($/)    ='&'|'@';$,='['&'~';$\                              =((
  "\,"))^    '|';$:  ='.'^'~'; $~                                =((
  '@'))|     "\(";    $^=')'^                                    '['
 ;($/)=      '`'|       '.';$,                                    =((
 '(')        )^+         '}';$\                                   =((
'`')          )|          "\!";      (           (                 $:)
)=')'         ^+        (   (         (                   (        '}'
))));          (           (          (                            $~)
))=(                    (   (    (        (                        '*'
))))                     )   |  ((      (                          '`'
)))                      ;     $^=         (                       '+'
)^+                       ((    ((  ((     '_'                     )))
)))                                          ;($/)                 =((
'&'                          ) )               |'@';               $,=
'['                                                                &((
 '~'                                      ))   ;                  $\=
 ','                                  ^"\|";  $:                  =((
  '.'                               ))^"\~"; $~=                 '@'
  |((                              '('));$^=')'^       (         '['
   );(                          $/)='`'|"\.";$,=    (           '('
   )^+                         '}';$\='`'|'!';$:                =((
    ')'                        ))^'}';$~='*'|'`'               ;$^
     =((                       '+'))^'_';$/='&'               |((
      '@'                      ));$,   =('[')&               '~'
       ;$\                              =','^               '|'
         ;$:                              =(      ((      '.'
          )))                                   ^+       '~'
            ;$~                               =(       '@'
              )|+                                    '('
                 ;$^                              =((
                    ')'                        ))^
                        '['                ;$/
                            ='`'|('.');#;#

Embargo

Desde a versão 5.18 do Perl, o mecanismo que permite a execução desse código tornou-se tão poderoso que foi desativado por padrão para evitar o uso indevido. Portanto, nas versões 5.18+, você pode adicionar use re 'eval';à parte superior do script ou, se o script tiver o nome, world.plpoderá executá-lo como ele perl -Mre=eval world.pl. É lamentável que esses caracteres desagradáveis ​​sejam adicionados, mas c'est la vie. (Nota: quero enfatizar que ativar esse recurso não está usando alguma biblioteca ou complemento, o código exibido é um código Perl válido, o mecanismo simplesmente não está mais ativado por padrão).


1
Eu tentei e é ótimo! +1
— Tomas

2
@TomasT. obrigado, foi divertido de fazer, e na verdade demorou um pouco de golfe para conseguir isso em apenas 3 fotos!
— Joel Berger

1
Para sua informação, usa o recurso Perl regexp (?{ code })para avaliar o código Perl personalizado enquanto faz a correspondência regexp. O código Perl personalizado imprime a mensagem. É legal porque não viola nenhuma das regras.
— pts

5
Você senhor, é o olá rei do mundo!
— recursion.ninja

1
Uau! Apenas Uau! Agora eu preciso aprender Perl apenas para ver como você fez isso.
— Gryphon

69

C # (175 caracteres)

Foi um grande desafio fazer isso em C # porque as restrições impedem o uso de muitas das palavras-chave comuns. É possível em C # usar sequências de escape Unicode \ uxxxx nos identificadores, mas infelizmente não nas palavras-chave.

Suspeito que esta solução só funcione quando compilada no .NET 4.0. Veja a explicação para o porquê.

using System;struct a{static int Main(){object[]c={"\u0048e\x6c\x6co "+(C\u0068ar)(86+1)+"or\x6c\x64"};typeof(Conso\u006ce).GetMet\u0068o\u0064s()[101].Invoke(c,c);return 0;}}

Explicação

// I won’t be able to get anywhere without using “System”.
// Even if I write it as “Syst\u0065m”, it still violates rule 2.
// Therefore, that is the rule we’ll violate.
using System;

// Thus, we can’t use: H L W D 2 7
// We can’t write “class”, so the Main type must be a struct.
struct a
{
    // We can’t write “void”, so Main needs to return an int.
    static int Main()
    {
        // We can’t write “new”, but we can instantiate an array
        // using the initialisation syntax.
        object[] c = {
            "\u0048e\x6c\x6co " + (C\u0068ar) (86 + 1) + "or\x6c\x64"
        };

        // We can use the character escape sequence to write “Console”, but not
        // “Write” because W is \u0057, which contains a 7. Therefore, we have to
        // use Reflection to get it. This relies on the fact that Console.Write(string)
        // is the 102nd method of the type Console in my copy of the framework.
        // Also, the first argument to Invoke can be anything for a static method
        // (needn’t be null). The second one is the actual argument to Console.Write.
        typeof(Conso\u006ce).GetMet\u0068o\u0064s()[101].Invoke(c, c);

        // Since Main returns int, we have to return something.
        return 0;
    }
}

Você pode usar em Urivez de objectpara b. Você pode usar \xHHem strings, em vez de \u00HHonde é inequívoco ( \xé de tamanho variável). Pensando bem, você não precisa de bnada e pode apenas reutilizá-lo ccomo o primeiro argumento Invoke. O MSDN afirma que, para métodos estáticos, o primeiro argumento é ignorado. Isso reduz para 175 para mim.
— Joey #

@ Joey: Uau, obrigado! Embora se o primeiro argumento para Invokepode ser qualquer coisa, ele não precisa mesmo ser c, poderia ser 0... :)
— Timwi

Sim, reparou que quando eu tentei para inline c(que infelizmente não funciona desde que newrequer uma ee .Split('x')é muito longo (saiu em 177).
— Joey

Eu não tinha ideia de que isso era possível. 1
— Igby Largeman

1
Coisa muito inteligente que você fez GetMethods. +1
— Soham Chowdhury

51

BrainFuck, 106 golpes

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

Atende a todas as regras e com certeza é ofuscado.


2
Acho que ainda posso jogar um pouco, mas isso terá que esperar até eu dormir um pouco.
— R. Martinho Fernandes

34
BrainFuck não é ofuscado por sua definição?
— Mbx

18
Qualquer programador BF competente seria capaz de reconhecer isso ...
— Mehrdad

Isso quebra as regras 1 e 2: D
— Thomas Eding

8
Brah, protegido pela comunidade , qualquer que seja, ++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.é apenas a 100 tacadas, o meu é melhor que o seu
— OverCoder

44

Javascript, 2595

Isso apenas quebra a regra 2.

゚ω゚ノ=/`m´)ノ~┻━┻//*´∇`*/['_'];o=(゚ー゚)=_=3;c=(゚Θ゚)=(゚ー゚)-(゚ー゚);(゚Д゚)=(゚Θ゚)=(o^_^o)/(o^_^o);(゚Д゚)={゚Θ゚:'_',゚ω゚ノ:((゚ω゚ノ==3)+'_')[゚Θ゚],゚ー゚ノ:(゚ω゚ノ+'_')[o^_^o-(゚Θ゚)],゚Д゚ノ:((゚ー゚==3)+'_')[゚ー゚]};(゚Д゚)[゚Θ゚]=((゚ω゚ノ==3)+'_')[c^_^o];(゚Д゚)['c']=((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)-(゚Θ゚)];(゚Д゚)['o']=((゚Д゚)+'_')[゚Θ゚];(゚o゚)=(゚Д゚)['c']+(゚Д゚)['o']+(゚ω゚ノ+'_')[゚Θ゚]+((゚ω゚ノ==3)+'_')[゚ー゚]+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+((゚ー゚==3)+'_')[゚Θ゚]+((゚ー゚==3)+'_')[(゚ー゚)-(゚Θ゚)]+(゚Д゚)['c']+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+(゚Д゚)['o']+((゚ー゚==3)+'_')[゚Θ゚];(゚Д゚)['_']=(o^_^o)[゚o゚][゚o゚];(゚ε゚)=((゚ー゚==3)+'_')[゚Θ゚]+(゚Д゚).゚Д゚ノ+((゚Д゚)+'_')[(゚ー゚)+(゚ー゚)]+((゚ー゚==3)+'_')[o^_^o-゚Θ゚]+((゚ー゚==3)+'_')[゚Θ゚]+(゚ω゚ノ+'_')[゚Θ゚];(゚ー゚)+=(゚Θ゚);(゚Д゚)[゚ε゚]='\\';(゚Д゚).゚Θ゚ノ=(゚Д゚+゚ー゚)[o^_^o-(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ+'_')[c^_^o];(゚Д゚)[゚o゚]='\"';(゚Д゚)['_']((゚Д゚)['_'](゚ε゚+(゚Д゚)[゚o゚]+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚Θ゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚)+(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+(゚ー゚)+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(c^_^o)+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚Θ゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+((゚ー゚)+(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚ー゚)+(c^_^o)+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)-(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+((゚ー゚)+(o^_^o))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((o^_^o)+(o^_^o))+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+(゚Θ゚)+((゚ー゚)+(゚Θ゚))+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚Θ゚)+(゚ー゚)+(゚ー゚)+(゚Д゚)[゚ε゚]+(゚ー゚)+((o^_^o)-(゚Θ゚))+(゚Д゚)[゚ε゚]+((゚ー゚)+(゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚o゚])(゚Θ゚))('_');

13
Eu tentei no UglifyJS, mas ele salvou -2574 bytes.
— precisa saber é o seguinte

12
Não tenho ideia do que estou vendo aqui.
— Bob

6
@Bob = Javascript ofuscado. Dica: começa atribuindo uma expressão regular literal (ou seja, '/ ` m´) ノ ~ ┻━┻ /') a uma variável com o nome `゚ ω ゚ ノ. That's followed by a comment and the expression ['_']` no contexto vazio. Em seguida, a variável o(junto com _e (゚ー゚)) recebe o valor 3. Ela continua nesse sentido, realizando muito trabalho inofensivo que não é efetivamente operacional e usando maneiras indiretas de realizar o trabalho pretendido (chamando alert("Hello world")) de maneira não óbvia. moda.
— Mark Reed


40

Befunge-93 - bloco 10x9

va:)/v<>#<
9A:)."c:P^
>"iqwt\%"^
bv"Mjq"<.<
c>v<-"x^x]
(C:,3>>^:(
$,9^;)|:O]
>5-^-.--.-
^<_#?>@_@<

Desculpa. : D

Eu não estava procurando por tamanho pequeno aqui, estava tentando realmente OBFUSCAR o código, incluindo o maior número possível de carinhas e ruídos possíveis! : D

Deve seguir as regras 2 e 3.


18
"@_@" Eu ri.
— Wug

35

Golfscript - 17 caracteres

Mais fácil de copiar / colar do que o de Chris

'Ifmmp!Xpsme'{(}%

Basicamente, uma cifra de César mudando 1 caractere


4
+1 Agradável por ser mais simples de copiar. A mina tem a vantagem de não infringir nenhuma das regras e também (provavelmente, dependendo se os caracteres de alto bit contam como símbolos) também cumprir o símbolo de golfe. :-)
— Chris Jester-Young

Como isso quebra uma regra?
— precisa

11
@sims, ele tem um enele
— gnibbler

2
DOIS dos três. : D
— Rob

30

Pitão

Regra I e III (34 caracteres)

print'Uryyb Jbeyq'.decode('rot13')

Regra I e III, alternativa (39 caracteres)

print"\110e\154\154o %cor\154\144"%~-88

Regra II e III (37 caracteres)

input("H\x65ll\x64 W\x64%cld"%(3*38))

Regra I e II (50 caracteres)

input('\x48\x65\x6c\x6c\x6f \x57\x6f\x72\x6c\x64')

Todas as três regras (58 caracteres)

input("\x48\x65\x6c\x6c\x6f %c\x6f%c\x6c\x64"%(84+3,3*38))

1
excluiu minha resposta, acho que a sua é mais abrangente.
— st0le

+ 1, grande peça, mas nenhuma surpresa eu vi você jogar golfe :-)
— Quixotic

Você precisa import codecsantes que possacodecs.decode
— cat

Você pode remover os parênteses na primeira solução
— Cyoce 17/10/16

23

JavaScript, 366 caracteres

Depois de ver a solução Perl de Joel Berger, eu me senti compelido a fazer algumas belezas de arte ASCII ... JavaScript, não usa alfanuméricos e, ao contrário da saída do JSFuck, é de tamanho razoável.

                   $$
                  =-~-
                 ~[];$_
                =$$+ $$;
               _$=$$+$$+-
              ~[];_=-~[];$
             =!![]+[];__={}
            +[];$$_=/\\ /+[]
           _$$=(![]+[])[_]+(!
          []+[])[$$]+$[$_+~[]]
         +$[_]+$[+[]];$=__[_$]+
        __[_]+($[$]+[])[_]+(![]+
       [])[$_+~[]]+$[+[]]+$[_]+$[
      $$]+__[_$]+$[+[]]+__[_]+$[_]
     _=$$_[_]+-~[];$[$][$](_$$+'("'
    +_+-~[]+-[]+_+$_+_$+_+_$+$_+_+_$
   +$_+_+_$+[$$+_$]+$$_[-~[]]+$_+-[]+
  _+$$+[$$+_$]+_+_$+[$$+_$]+_+[$$+$_]+
                $$+ _+_$
                +$_+_+$_
                +$_+'")'
                  )($)

você poderia exibir o número de caracteres no seu código no cabeçalho? Estou curioso para ver quantos você consegui-lo para ...
— Wally West

@ Eliseod'Annunzio lá vai, eu esqueci que isso era código de golfe. O comprimento é fornecido com o espaço em branco removido e o último ($)transformado em ()(porque eu adicionei $para simetria).
— FireFly

Obrigado por suas dicas ... Eu tinha que redimensionar o meu código para conta para o "W" e, em seguida, encolheu-lo usando o seu conselho ...
— Wally West

21

rot13 - 11 caracteres

Uryyb Jbeyq

2019/2/12: esta resposta está sendo mantida por razões históricas e não é mais uma resposta válida sob as regras atuais do site.


3
Rot13 é um idioma? : /
— Santosh Kumar

3
sim e posso criar seu intérprete: P
— oddcoder 14/03

6
Tecnicamente, rot13 é apenas uma cifra . É tanto um idioma quanto uma cifra de Vigenère.
— XiKuuKy

19

Bash, 30 25 caracteres

tr G-t F-s<<<Ifmmp\ Xpsme

Com agradecimentos a Peter Taylor pelo uso herestring.


2
Você pode salvar 5 caracteres usando uma string aqui:tr G-t F-s<<<Ifmmp\ Xpsme
— Peter Taylor

18

Scala, 39

Soluções como o mapa print ("Qnuux)` x {um "(_- 9 toChar)) (35 caracteres) infringem as regras 1 e 2 (" toChar "contém" h "e" r "), o que torna este um um pouco difícil.

Finalmente surgiu com isso:

print("䠀攀氀氀漀 圀漀爀氀搀"map(_.reverseBytes))

Sugestões para melhorias são bem-vindas


18

TeX, 95 bytes

Quebra a terceira regra.

\^^5pp^^%^^2^^#^^!^^3^^%{^^(}^^%^^,^^,^^/
\^^5pp^^%^^2^^#^^!^^3^^%{^^7}^^/^^2^^,^^$!
\^^%^^.^^$

Corra com tex filename.texpara obter uma saída dvi ou pdftex filename.texpara obter um pdf.


1
Uau, nunca soube que o TeX pode ser tão ofuscado!
— gar

14

> <> , 2 × 20 = 40 caracteres

'mu{x`)xuunQ'>9-o?v;
            ;^?o-9< 

Viola a regra II, pois não consigo gerar um caractere sem usar o.


11

Windows PowerShell, 91 95 97 98

($OFS='')+('Qnuux)`x{um'|% t*y|%{"[convert]::"+([convert]|gm -s t*r).name+"($($_-9))"|iex})

Viola apenas a regra II.

É muito mau que já charviole duas regras por si só.

E caramba, este foi difícil de começar a trabalhar.

  • A primeira linha é configurada $OFSpara ''que, ao converter uma matriz em uma sequência, nenhum espaço apareça entre os itens.
  • Fazer a seleção charfoi realmente a parte mais difícil de todas e passo cerca de um dia procurando uma maneira. Eu trabalhei bem o resto, mas depois que faço os cálculos, tenho ints, não chars. Colocá-los de volta em uma corda era meio difícil.
  • Eu encontrei uma maneira de invocar Invoke-Expressionsem precisar etambém:

    &(gcm i?x)
    

    mas isso ainda carecia de argumentos. E já joguei fora meu objetivo de saturar todas as três regras. Além disso, isso não me ajudou particularmente no elenco char.

  • Encurtou um pouco com uma versão mais recente do PowerShell. Infelizmente, nenhuma maneira diferente útil de criar o resultado surgiu.


Ainda há muitos "o" e "e" s aqui e um "r". Mas não tenho certeza se eu teria muito mais sorte em limpar isso. Ainda pode ter que tentar em algum momento.
— Iszi

Basta ler novamente as regras - apenas dois dos três conjuntos de regras foram necessários e isso se qualifica. Bom show! Seria super incrível se pudéssemos criar um que leva 3/3, mas duvido que seja muito possível.
— Iszi

Levei muito tempo para chegar a esse ponto e ainda duvido que seja possível seguir todas as regras.
— Joey

10

PHP (16 bytes)

Percebi que meu exemplo anterior do PHP não estava ofuscado o suficiente, então vamos ver exemplos mais ofuscados (aviso, ofuscação!). Além disso, copiar descaradamente o exemplo do GolfScript, exceto torná-lo menor (isso é possível?). Esta entrada requer o PHP 5.4 ou short_open_tagativado. Nenhuma regra foi quebrada ao fazer isso. De fato, essa entrada não contém letras ou dígitos ASCII.

Este exemplo não quebra nenhuma das regras. Diverta-se. Para gerar arquivo, execute o seguinte comando.

printf "<?=~\xb7\x9a\x93\x93\x90\xdf\xa8\x90\x8d\x93\x9b;" > obfus.php

Ou, caso você não confie na execução do printfcomando, eu preparei o dump Base64 do arquivo.

PD89freak5OQ36iQjZObOw==

Se você acha que os dois métodos para gerá-lo violam as regras, eu também gerei um arquivo no Dropbox .

E para executá-lo.

php obfus.php

O arquivo resultante deve ter 16 bytes. Divirta-se executando-o. Observe que, se você tiver E_NOTICEativado os avisos, ele será exibido. Apenas ignore, consertá-lo desperdiçariadois caracteresum caractere (eu posso usar o @operador, afinal) e faria o Base64 resultante parecer menos impressionante.


9

Espaço em branco (167 caracteres)

Para obter o programa WS, substitua S, T, L por um caractere de espaço, tabulação ou avanço de linha, respectivamente, na seguinte cadeia:

SSSTSSTSSSLTLSSSSSTTSSTSTLTLSSSSSTTSTTSSLTLSSSSSTTSTTSSLTLSSSSSTTSTTTTLTLSSSSSTSSSSSLTLSSSSSTSTSTTTLTLSSSSSTTSTTTTLTLSSSSSTTTSSTSLTLSSSSSTTSTTSSLTLSSSSSTTSSTSSLTLSSLLL

ou faça o download do programa somente em branco "bruto" no arquivo de texto hello.ws .

Quando executado por este intérprete do WS , este programa imprime "Hello World".

Explicação (ignore o espaço em branco aqui!):

SSS TSSTSSSL TLSS  <-- output H (ascii code 72 in decimal, 1001000 in binary) 
SSS TTSSTSTL TLSS  <-- output e (ascii code 101 in decimal, 1100101 in binary) 
SSS TTSTTSSL TLSS  <-- etc
SSS TTSTTSSL TLSS
SSS TTSTTTTL TLSS
SSS TSSSSSL TLSS
SSS TSTSTTTL TLSS
SSS TTSTTTTL TLSS 
SSS TTTSSTSL TLSS 
SSS TTSTTSSL TLSS
SSS TTSSTSSL TLSS 
LLL                <-- end the program

As strings "do meio" (por exemplo TSSTSSSL) são os códigos ASCII (em binário, com Sdenotando 0, Tdenotando 1) para as letras sucessivas em "Hello World". O prefixo SSSenvia o número que segue (terminado por um L) para a pilha. TLSSgera o caractere cujo código ascii está no topo da pilha. Por fim, de acordo com este tutorial , um programa deve terminar com LLLuma saída limpa do intérprete.

NB: Estou inserindo isso como uma resposta separada, porque a outra entrada do programa WS é um programa de 1287 caracteres que imprime "Olá, mundo dos espaços!" em vez do "Hello World" necessário.


8

Ruby - 63 caracteres

puts [%w{G d k k n},%w{V n q k c}].map{|l|l.map(&:succ)*''}*' '

quebra # 1, embora
— John Dvorak

E ainda mais curto: puts "Gdkkn~Vnqkc".split("").map(&:succ)*''- 43
— Biketire 07/07

7

C, 160 caracteres

Funciona apenas em máquinas little-endian com int de 4 bytes:

main(){int a='a',b=a/a,c=b+b,f=c+c,g=f+f,i=g+g,j=i*i,k=j*j,m=a+g+b+c,n=m+b+c;int p[]={a+g-b+(a+f)*j+m*k*(j+b),n+i*c*j+k*(n+g+n*j),a+i+b+m*j+(a+f-b)*k};puts(p);}

Satisfaz todas as três regras.


1
Você pode usar constantes numéricas sem 0,1,2,7: p[];main(){p={(5*5*5*5*5*64+96696)*(443+5688),(5*3*4*3+4-3)*(66*45*6-6*6-4+3)*8‌​3*(3+4),6544494+36868};puts(p);}- 111 caracteres.

1
Veia semelhante (na verdade, abordou o problema de algumas maneiras diferentes antes de decidir sobre isso). x[]={45483*39994-3958,48465*38543-5584,6584695-3333};main(){puts(x);}- 69 caracteres. Tenho certeza de que poderia economizar um pouco mais, dando mais tempo para matemáticos os literais. Foi uma forma divertida de passar algumas horas, de qualquer maneira :)
— Cole Cameron

7

PHP, 28 bytes

Não exatamente ofuscado, mas muito curto e óbvio :). Mostrando que, mesmo ao limitar caracteres, você pode facilitar a execução de programas. As restrições 1 e 3 foram seguidas. A restrição 2 foi abusada.

<?=str_rot13('Uryyb Jbeyq');

Observe que isso requer que short_open_tagseja definido, a menos que você esteja usando o PHP 5.4 ou superior. Talvez alguns exemplos sejam mais curtos, mas acho que esse exemplo é bem curto.


7

bash 28 caracteres:

printf 'p|ɹ°M ο||ǝ%b'"\x48"

p | MοM ο || ǝH

alternativamente com / bin / echo (18 caracteres) *) veja a discussão abaixo.

/bin/echo -e 'p|ɹοM ο||ǝ\0110'

Auto teste:

echo "printf 'p|ɹοM ο||ǝ%b' "\x48"" | egrep -i "[^hlwd27eor01]"

Mais duro que o pensamento! Ferramentas, para virar as palavras de cabeça para baixo, as ferramentas pensam que um 'H' ou 'o' virado de cabeça para baixo é melhor exibido como H ou o. Isso estaria em conflito com o grupo 1 (Hlwd: 27: eor01), respectivamente 3.

H pode ser exibido com

echo -e "\0127"

01 e 2 também são envenenados. Gee! Mas o eco bash-buildin tem não apenas a opção de exibir valores octais de ascii, mas também hexadecimal:

echo -e "\x48"

Mas se usarmos o bash como uma linguagem de programação, o comando echo fará parte do programa, que não apenas conta com a contagem de caracteres, mas também contém os caracteres envenenados (hlwd: 27: eor01) eho dos grupos 1 e 3.

Portanto, este é o momento em que o eco morreu. Felizmente, existe printf, que sabe "% b" a ser exibido.

Or é o único caractere problemático no printf e pertence ao grupo 3. Como 'o' está no último grupo, podemos deixá-lo no Hello e no World, mas podemos usar o omicron ο que se parece com um o ou ° &deg;.

Ligações:


Voto positivo, mas sua reputação é muito ruim.
— precisa saber é o seguinte

@ GlitchMr: Agora você pode - votei em algo a menos e deve ser confiscado 500N. :)
— usuário desconhecido

dl.dropbox.com/u/63913412/stilltooleet.png . Além disso, as perguntas com voto negativo não diminuem a reputação. Respostas negativas, no entanto.
— Konrad Borowski

@ GlitchMr: Ah, é isso! :)
— usuário desconhecido

6

C (94)

Em pequenas máquinas Endian:

main(){int i[]={1819043144,((0x1bc5c81b|1<<0x14)*4)+3,0xa646c00|(0x39<<1),0};printf("%s",i);}

Viola a regra II, mas satisfaz o resto.


6

JavaScript - 132 caracteres

(_=(_=[][(f=!!(_='')+_)[3]+(b=({}+_)[(I=-~(z=_-_))])+($=(c=(d=!_+_)[I])+d[z])])())[f[I]+'l'+(a=d[3])+$]("H"+a+'ll'+b+' W'+b+c+'ld')

Quebra a regra I

Uso :

  • Cole "javascript: [script]" na barra de endereços do navegador
  • Crie uma página html em branco, cole o script em uma tag

Quebra as regras 1 e 2. Você está usando o número 1 para as matrizes.
— Kevin Brown

Você pode substituir 1por !![]+![]e 0por ""-""que não quebrar a regra # 2.
— 21411 HoLyVieR

Obrigado @ Bass5098 e @HoLyVieR, eu meio que perdi o 1 e o 0 ao minimizar o script. I substituídos com 0 z = _-_ e uma com I = - ~ z, I pode também usar ++ z, mas - ~ parece mais agradável :)
— m0sa

3
Hã? !![]+![]? Por que não apenas 4-3?
— Timwi

4
@Timwi: Mais ofuscação
— Thomas Eding

6

Dis , 102 83 caracteres

Desenrolou o loop do código, pois as letras podem ser geradas com menos de cinco operações consecutivas. Salvou alguns caracteres reutilizando o valor do acumulador: dois lsão consecutivos, SPACEpodem ser gerados oe dpodem ser gerados a partir l.

*>|||{>|||{>||{{>|{|||{>||{>|{>|||{>||{||{!!>**_!!}|_}!^__}|__>*__}|_}|_>!!|_}!^__!

Versão antiga

^}!>^^_^!__!>_^!^^**_^!^^**_
^_!{**_^__!{>_^__{>>!^_!{**_
^_!>^*_^!^^**_^_^^**_*______
___________>||||{^

Com comentários abaixo. Ele está usando uma sequência de cinco operações idênticas para gerar todos os caracteres em Hello World: uma rotação e quatro subtrações.

^     (move code pointer to data pointer value '^')
}!>^^ (store 'H' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!__!> (store 'e' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
_!{** (store 'o' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
__!{> (store ' ' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
__{>> (store 'W' in accumulator)
!     (program termination)
^     (data pointer value used by code pointer jump)
_!{** (store 'o' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
_!>^* (store 'r' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
!^^** (store 'l' in accumulator)
_     (no-op)
^     (data pointer value used by code pointer jump)
_^^** (store 'd' in accumulator)
_     (no-op)
*     (data pointer value used by code pointer jump to reach '!' between 'W' and 'o')
________________ (no-ops)
_     (no-op, address '^')
>|||| (rotate data value and perform four subtractions)
{     (print value in accumulator)
^     (move code pointer to data pointer value '^' except for the last jump '*')

6

C: 162 caracteres (excluindo novas linhas desnecessárias)

Optei pela legibilidade e transparência ao escrever isso.

a[3],b;main(){b=99
+9;b+=b<<8;b=b<<8|
97|4;b=b<<8|64|8;a
[3^3]=b;b=78+33<<8
;b+=87;b=b<<8|35^3
;b=b<<8|64|47;a[5^
4]=b;b=97+3<<8;b+=
99+9;b=b<<8|66|48;
a[6^4]=b;puts(a);}

Satisfaz todos os três requisitos.


1
Gosto disso, mas infelizmente não atende a todas as regras, pois contém o dígito 7, violando a regra nº 3. Mas seria fácil se livrar 7. Além disso, adicionando alguns se int, adicionando alguns parênteses extras e adicionando int puts(int*);ao início, ele é compilado gcc -ansi -W -Wallapenas com um único aviso: o controle atinge o final da função não nula .
— pts

5

Bash, 24 20 caracteres

Você precisa ter o pacote "bsdgames" instalado.

rot13<<<Uryyb\ Jbeyq

Obrigado gnibbler :)


5

PostScript, 41 caracteres

<64><~+BNK%C]~><48656c6c6f>3{print}repeat

Uso: $ gs -q -dNOPROMPT -dNODISPLAY filename.ps


1
você também pode executá-lo como:gsnd -q -- filename.ps
— luser Droog

5

JavaScript, 66 caracteres

Outra solução JavaScript, desta vez violando a regra 2.

top[(U=unescape)('a%6cert')](U('%48e%6c%6co %5'+(6+1)+'or%6c%64'))

O texto acima segue o conceito por trás da resposta da hallvabo. Antes de entender essa abordagem, eu tinha a versão indiscutivelmente mais ofuscada:

top[8680439[n='toString'](30)]((16+1)[n](z=8*4)[u='toUpperCase']()
+15960[n](33)+'o '+z[n](33)[u]()+1155505[n](36))

que também quebra a regra 2 e chega a 114 caracteres. (Remova o retorno de carro nesta segunda solução, pois ela existe apenas para facilitar a leitura.)


4
Eu li que como R unescape.
— Mateen Ulhaq 1/11/11

@MateenUlhaq Eu sempre leio como R unescape, e só toquei por um ano mais de uma década atrás ... O que há de errado comigo?
— Mwr247

5

Haskell, 38

As restrições 1 e 3 foram seguidas.

main=putStr$map succ"G\x64kkn\USVnqkc"

4

Fourier, 39 bytes

8*9a99^^a+6^aa~q+3a33va86^aq+3a+3aqa-8a

Fourier está sempre ofuscado. Isso segue todas as regras.

Demolir:

8*9a    Set the accumulator to 8, multiply it by 9, and print the 
        corresponding ASCII code.

99^^a   Set the accumulator to 99, increment it twice, and print the
        corresponding ASCII code.

+6^aa   Add 6 to the accumulator, increment it, and print the
        corresponding ASCII code twice.

~q      Set the variable q to the current value of the accumulator.

+3a     Add 3 to the accumulator and... I think you get the idea.

33va    Set the accumulator to 33, decrement it, and print ASCII.

86^a    Yes, okay, I think it's obvious by this point.

q+3a    Set the accumulator to the value of q (earlier set to 108),
        add 3, and print ASCII.

+3a     ...

qa      Invoke q again and print ASCII.

-8a     Subtract 8 from the accumulator and print ASCII.

Talvez isso possa ser refinado um pouco.


Woah, eu acabei de perceber que alguém usou Fourier: D Nice one, +1
— Decay Beta
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.