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
,w
ed
em qualquer caso - Não conter os caracteres:
e
,o
,r
,0
, e1
, em qualquer caso - Não contém os caracteres:
2
ou7
Entrada:
nenhuma
Resultado:
Hello World
code-golf
obfuscation
hello-world
restricted-source
Kevin Brown
fonte
fonte
import
em python não é permitido.72
é"H"
o que é por isso que eu escolhi esses doisRespostas:
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:
fonte
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.pl
poderá executá-lo como eleperl -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).fonte
(?{ 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.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ê.
Explicação
fonte
Uri
vez deobject
parab
. Você pode usar\xHH
em strings, em vez de\u00HH
onde é inequívoco (\x
é de tamanho variável). Pensando bem, você não precisa deb
nada e pode apenas reutilizá-loc
como o primeiro argumentoInvoke
. O MSDN afirma que, para métodos estáticos, o primeiro argumento é ignorado. Isso reduz para 175 para mim.Invoke
pode ser qualquer coisa, ele não precisa mesmo serc
, poderia ser0
... :)c
(que infelizmente não funciona desde quenew
requer umae
e.Split('x')
é muito longo (saiu em 177).GetMethods
. +1BrainFuck, 106 golpes
Atende a todas as regras e com certeza é ofuscado.
fonte
++++++++++[>++++++>+++<<-]>++++++++++++.---.+++++++..+++.>++.<++++++++.--------.+++.------.--------.
é apenas a 100 tacadas, o meu é melhor que o seuJavascript, 2595
Isso apenas quebra a regra 2.
fonte
. That's followed by a comment and the expression
['_']` no contexto vazio. Em seguida, a variávelo
(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 (chamandoalert("Hello world")
) de maneira não óbvia. moda.Befunge-93 - bloco 10x9
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.
fonte
Golfscript - 17 caracteres
Mais fácil de copiar / colar do que o de Chris
Basicamente, uma cifra de César mudando 1 caractere
fonte
e
nelePitão
Regra I e III (34 caracteres)
Regra I e III, alternativa (39 caracteres)
Regra II e III (37 caracteres)
Regra I e II (50 caracteres)
Todas as três regras (58 caracteres)
fonte
import codecs
antes que possacodecs.decode
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.
fonte
($)
transformado em()
(porque eu adicionei$
para simetria).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.
fonte
Bash,
3025 caracteresCom agradecimentos a Peter Taylor pelo uso herestring.
fonte
tr G-t F-s<<<Ifmmp\ Xpsme
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:
Sugestões para melhorias são bem-vindas
fonte
TeX, 95 bytes
Quebra a terceira regra.
Corra com
tex filename.tex
para obter uma saída dvi oupdftex filename.tex
para obter um pdf.fonte
> <> , 2 × 20 = 40 caracteres
Viola a regra II, pois não consigo gerar um caractere sem usar
o
.fonte
Windows PowerShell, 91
959798Viola apenas a regra II.
É muito mau que já
char
viole duas regras por si só.E caramba, este foi difícil de começar a trabalhar.
$OFS
para''
que, ao converter uma matriz em uma sequência, nenhum espaço apareça entre os itens.char
foi 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, tenhoint
s, nãochar
s. Colocá-los de volta em uma corda era meio difícil.Eu encontrei uma maneira de invocar
Invoke-Expression
sem precisare
também: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.
fonte
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_tag
ativado. 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.
Ou, caso você não confie na execução do
printf
comando, eu preparei o dump Base64 do arquivo.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.
O arquivo resultante deve ter 16 bytes. Divirta-se executando-o. Observe que, se você tiver
E_NOTICE
ativado 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.fonte
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:
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!):
As strings "do meio" (por exemplo
TSSTSSSL
) são os códigos ASCII (em binário, comS
denotando 0,T
denotando 1) para as letras sucessivas em "Hello World". O prefixoSSS
envia o número que segue (terminado por umL
) para a pilha.TLSS
gera o caractere cujo código ascii está no topo da pilha. Por fim, de acordo com este tutorial , um programa deve terminar comLLL
uma 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.
fonte
Ruby - 63 caracteres
fonte
puts "Gdkkn~Vnqkc".split("").map(&:succ)*''
- 43C, 160 caracteres
Funciona apenas em máquinas little-endian com int de 4 bytes:
Satisfaz todas as três regras.
fonte
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)*83*(3+4),6544494+36868};puts(p);}
- 111 caracteres.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 :)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.
Observe que isso requer que
short_open_tag
seja 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.fonte
bash 28 caracteres:
alternativamente com / bin / echo (18 caracteres) *) veja a discussão abaixo.
Auto teste:
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
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:
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 °
°
.Ligações:
fonte
C (94)
Em pequenas máquinas Endian:
Viola a regra II, mas satisfaz o resto.
fonte
JavaScript - 132 caracteres
Quebra a regra I
Uso :
fonte
1
por!![]+![]
e0
por""-""
que não quebrar a regra # 2.!![]+![]
? Por que não apenas4-3
?Dis ,
10283 caracteresDesenrolou 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
l
são consecutivos,SPACE
podem ser geradoso
ed
podem ser gerados a partirl
.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.fonte
C: 162 caracteres (excluindo novas linhas desnecessárias)
Optei pela legibilidade e transparência ao escrever isso.
Satisfaz todos os três requisitos.
fonte
7
, violando a regra nº 3. Mas seria fácil se livrar7
. Além disso, adicionando alguns seint
, adicionando alguns parênteses extras e adicionandoint puts(int*);
ao início, ele é compiladogcc -ansi -W -Wall
apenas com um único aviso: o controle atinge o final da função não nula .Bash,
2420 caracteresVocê precisa ter o pacote "bsdgames" instalado.
Obrigado gnibbler :)
fonte
PostScript, 41 caracteres
Uso:
$ gs -q -dNOPROMPT -dNODISPLAY filename.ps
fonte
gsnd -q -- filename.ps
JavaScript, 66 caracteres
Outra solução JavaScript, desta vez violando a regra 2.
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:
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.)
fonte
unescape
.unescape
, e só toquei por um ano mais de uma década atrás ... O que há de errado comigo?Haskell, 38
As restrições 1 e 3 foram seguidas.
fonte
Fourier, 39 bytes
Fourier está sempre ofuscado. Isso segue todas as regras.
Demolir:
Talvez isso possa ser refinado um pouco.
fonte