Campeonato de java ofuscado

10 respostas
victorwss

Oi pessoal. Eu proponho a criação de um campeonato de java ofuscado aqui no GUJ. :smiley:

A idéia é um campeonato onde o objetivo é criar algum tipo de programa em java cujo o código seja o mais ilegível, incompreensível e desestruturado possível, mas mesmo assim que ainda execute perfeitamente.

Já bolei umas regras como rascunho. A medida que o pessoal for comentando aí, eu as edito.

Ainda não bolei nenhum critério de avaliação.

Postem suas sugestões aí. Atualizarei este post até o ponto onde tenhamos um conjunto de regras e de critérios de avaliação legal.

10 Respostas

neofito

Qual seu objetivo com isso? Escrever código ilegível qualquer idiota conseque, mas e código legível?

qmx

Se você quer usar ant, então arranca esse monte de .bat daí… isso não faz o menor sentido

basta ter um build.xml e só :stuck_out_tongue:

ant dist (compila)

ant run (executa)

[modo biased on]
Afinal, não tem pq ofuscar mais ainda, e até onde eu sei arquivos .bat são nocivos à saude :twisted:
[modo biased off]

Seria interessante propor um tema e ver quem consegue fazer o menor código… isso sim é mais interessante do que ofuscar, até pq nessas competições o código já é ilegivel mesmo…

ViniGodoy

Não é bem assim… o grau de ilegibilidade desses campeonatos é geralmente muito superior. Fora os programas que ainda formam desenhos. E o objetivo disso é a diversão, além de ser academicamente interessante.

Adicione uma regra no seu campeonato:
É proibido escrever programas usando só \u

Geralmente é uma boa em campeonatos Java.

ViniGodoy

Aliás, no meio C esse campeonato é até internacional. Quem não conhece:
The International Obfuscated C Code Contest

Você pode conferir os ganhadores de 2004 aqui e aqui.

Luca

Olá

Não sei quem teria paciência para examinar 13 arquivos. Melhor seria um campeonato de uma classe só e limitada a 50 linhas sem usar 2 comandos na mesma linha. Garanto que já se conseguiria fazer coisas bem obtusas e quase impossíveis de ler, mesmo sem usar classes como Bidi.

ViniGodoy:
Adicione uma regra no seu campeonato:
É proibido escrever programas usando só \u

Com esta regra o campeonato pode permitir classes de 50 linhas porque sem ela bastaria limitar em 10 linhas que uma classe já poderia ficar ilegível.

[]s
Luca

victorwss

Luca:
Olá

Não sei quem teria paciência para examinar 13 arquivos. Melhor seria um campeonato de uma classe só e limitada a 50 linhas sem usar 2 comandos na mesma linha. Garanto que já se conseguiria fazer coisas bem obtusas e quase impossíveis de ler, mesmo sem usar classes como Bidi.

ViniGodoy:
Adicione uma regra no seu campeonato:
É proibido escrever programas usando só \u

Com esta regra o campeonato pode permitir classes de 50 linhas porque sem ela bastaria limitar em 10 linhas que uma classe já poderia ficar ilegível.

[]s
Luca

Na verdade são só 10 arquivos, pois os arquivos LEIAME.TXT, COMPILAR.BAT e EXECUTAR.BAT estão inclusos na contagem. Mas, acho que é melhor fazer esse negócio com script ant mesmo. Além de que há o limite de 10 Kb.

Tinha bolado esse negócio dos BATs para poder resolver o problema de se entupir o script ant com dados que o programa pega para fazer alguma coisa, de tal forma que não fique óbvio o que é necessário para fazer compilar ou executar.
Mas, algum tipo de regra mais rígida a respeito do ant resolve isso.

Quanto a esse negócio de “\u”, eu concordo em proibir. Mas, seria proibido todos os “\u” ou apenas programas que sejam dominados por “\u”? Qual seria o limite tolerável ao uso de “\u”?

Luca

Olá

Zero

Insisto, com 10 arquivos qualquer iniciante faz algo ilegível.

Reformulo minha sugestão: limite a uma só classe com no máximo 30 linhas (não contando os imports) com cada comando em uma linha e não vale nomes com mais de 12 caracteres, com digitos repetidos e com mais de 2 digitos em cada nome. Ah, e não vale executar scripts.

[]s
Luca

el_loko

qmx:

Seria interessante propor um tema e ver quem consegue fazer o menor código… isso sim é mais interessante do que ofuscar, até pq nessas competições o código já é ilegivel mesmo…

tbm acho

victorwss

Ok, concordo. Atualizei as regras.

Quanto ao resto que você disse, de ser uma única classe com apenas 30 linhas, daí eu não concordo. Isso fecha a possibilidade de abusar-se de herança, polimorfismo e interfaces em algumas formas interessantes.

Isso também incentiva as pessoas a fazerem comandos enormes em uma única linha. Eu já tentei fazer para o IOCCC uma entry que tinha em uma função um único comando que quando o preprocessador expandia ficava com mais de 9 kb, tendo 63 operadores ternários cascateados. Pena que não consegui terminar a entry porque dava falha de segmentação em algum ponteiro e o código estava tão louco que nem eu mesmo conseguia mais entender o que ele fazia. :slight_smile:
Isso também inviabiliza aqueles casos onde você tem milhares de linhas com no máximo 4 ou 5 caracteres cada.

Talvez um limite menor no tamanho máximo seja a saída melhor. Tipo, até 5 arquivos com um total máximo de 5 kb.

Edit: Explique melhor o que vem a ser “não vale executar scripts”. Isso impede alguém de escrever uma String gigantesca contendo algum tipo de código e criar um interpretador para ela?

victorwss

A respeito de critérios de avaliação. Time de jurados, voto popular, uma mistura de ambos ou o que?

Estava pensando também em alguns critérios que podem fazer ganhar ou perder pontos ou mesmo eliminar de vez o programa:

Alguns critérios que afetam negativamente: “desofuscabilidade”, “debuggabilidade”, complexidade desnecessária, bugs, erros, exceções não tratadas em tempo de execução, erros de compilação, warnings…

Alguns critérios que afetam positivamente: criatividade, “inofuscabilidade”, inovação, robustez…

Criado 20 de março de 2008
Ultima resposta 20 de mar. de 2008
Respostas 10
Participantes 6