3 pontos por GN⁺ 2023-12-24 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2023-12-24
Comentários no Hacker News
  • Há um exemplo semelhante no mundo TeX: xii.tex

    • Se você colocar um código de aparência complexa em um documento TeX e executar pdftex, pode obter um resultado diferente do esperado. Isso pode ser visto em shreevatsa.net.
  • Este código lembra a complexidade de Kolmogorov:

    • Ver um código difícil de entender produzir o resultado desejado desperta a curiosidade sobre se existiria um programa mais curto que gerasse o mesmo resultado, e como encontrá-lo.
  • Recebi este código quando ele foi publicado originalmente, mas com outro nome:

    • Ele estava salvo como "carol.c" e, ao compilar e executar em um sistema moderno, o compilador exibiu mensagens de aviso.
  • O IOCCC (International Obfuscated C Code Contest) continua ativo em 2023:

    • A explicação sobre o IOCCC é excelente, e pode ser vista em www.ioccc.org.
  • 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:

    • Existe um exemplo de programa que gera repetidamente a música cumulativa "Old Lady Swallowed a Fly". Veja em rosettacode.org.
  • 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:

    • Relembra a experiência de ter visto esse código pela primeira vez na aula do professor em 2022.
  • 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:

    • Ao aprender a linguagem C, a experiência de digitar esse código manualmente acabou sendo memorável.
  • Este código usa uma versão muito antiga da linguagem C:

    • A assinatura da função main usa 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:

    • O fato de o criador de Perl ter sido premiado no IOCCC passa a impressão de que isso ajuda a explicar certas características da linguagem Perl.