Campeonato de java ofuscado

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.

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

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…

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.

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.

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.

[quote=ViniGodoy]Adicione uma regra no seu campeonato:
É proibido escrever programas usando só \u[/quote]

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

[quote=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.

[quote=ViniGodoy]Adicione uma regra no seu campeonato:
É proibido escrever programas usando só \u[/quote]

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[/quote]

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”?

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

[quote=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…[/quote]

tbm acho

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?

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…