Análise do código xmas.c
- O código C chamado xmas.c, criado em 1988, venceu o Concurso Internacional de Código C Ofuscado.
- Esse código é menor do que sua própria saída e propõe uma nova direção para os padrões de compressão de texto.
- Ao compilar e executar o código, ele funciona sem parâmetros e, de forma curiosa, parece como se alguém tivesse batido aleatoriamente nas teclas de uma máquina de escrever.
A saída do código
- Ao executar o código, a letra da música "The Twelve Days of Christmas" é exibida.
- O conteúdo exibido consiste na letra que lista os presentes do primeiro ao décimo segundo dia de Natal.
Análise
- Para entender o código, é preciso reescrevê-lo em uma forma mais legível.
- No processo de reescrita, fica evidente o método de decifrar uma cifra de substituição usando determinadas strings.
- A variável
t desempenha um papel importante no controle da direção da recursão.
- O código decifra a cifra de substituição por meio de recursão e imprime a letra da canção de Natal.
Simplificação
- Depois de entender o programa, é possível simplificá-lo usando alguns laços de repetição e funções da biblioteca de strings de C.
- No fim, ao simplificar o código, ele pode ser reduzido a apenas imprimir a letra da música.
Opinião do GN⁺
- O auge da criatividade: o código xmas.c é um excelente exemplo de escrita de código ofuscado com o uso de cifra de substituição e recursão. Isso mostra como a criatividade pode se expressar na programação.
- Valor educacional: o processo de analisar e compreender o código pode ser um bom exercício para engenheiros de software iniciantes aprimorarem suas habilidades de programação.
- Diversão e interesse: este código oferece uma oportunidade de descobrir a diversão da programação e vivenciar o prazer de resolver problemas complexos.
1 comentários
Comentários no Hacker News
Há um exemplo semelhante no mundo TeX:
xii.texpdftex, pode obter um resultado diferente do esperado. Isso pode ser visto em shreevatsa.net.Este código lembra a complexidade de Kolmogorov:
Recebi este código quando ele foi publicado originalmente, mas com outro nome:
O IOCCC (International Obfuscated C Code Contest) continua ativo em 2023:
Se você desativar os avisos, ele funciona até no repositório de código mais recente (
trunk):Há algo parecido também no Rosetta Code:
Tenho uma boa lembrança de quando um professor mostrou esse trecho de código no início da aula no último semestre da faculdade:
Lembro que esse código estava em um material impresso de estudo de C na época da faculdade, e eu mesmo o digitei uma vez:
Este código usa uma versão muito antiga da linguagem C:
mainusa o estilo antigo de K&R, então há a opinião de que hoje ele não compilaria.Uma das coisas interessantes é a relação entre Larry Wall ter vencido o IOCCC duas vezes e ele ter projetado Perl: