Pong Autoregenerativo: A Inovação do IOCCC29

Descubra como um jogo de Pong surpreendeu o concurso IOCCC ao reescrever seu código-fonte em tempo real, gerado por um compilador personalizado.

Um Pong Que Se Recompila a Cada Frame

Jonah Uellenberg conquistou o prêmio Ping Pong no 29º Concurso Internacional de Código C Ofuscado (IOCCC) com uma versão de Pong que redefine os limites da programação. Sua criação se destaca por recompilar seu próprio código-fonte a cada novo frame do jogo.

Cada vez que o programa é executado, ele gera o código C para o próximo frame, incorporando o estado atual da tela e do jogo. Compilar e rodar essa saída é o que avança o jogo um passo de cada vez, criando um ciclo contínuo de auto-geração.

A Mágica do Compilador “Insert”

O mais irônico e engenhoso é que Uellenberg não escreveu o código ofuscado manualmente. Em vez disso, ele desenvolveu sua própria linguagem de programação, chamada “Insert”, e criou um compilador para ela. Foi esse compilador que gerou o código C “bagunçado” que ganhou o prêmio, a partir de um código fonte limpo e bem comentado.

Onde Otimização Encontra Ofuscação

  • Não Ofuscado? Uellenberg argumenta que o código vencedor “não é realmente ofuscado. Nunca foi”, enfatizando que é um produto de compilador, e não uma manipulação manual.
  • Otimização Inteligente: O compilador Insert, ao focar em C, aplica passes de otimização de tamanho típicos de compiladores de produção. Isso inclui análise de vivacidade para remover código morto, constant folding e fusão de variáveis.
  • Resultado Curioso: Sequências repetidas de tokens são empacotadas em defines do pré-processador C para economizar bytes. Segundo Uellenberg, otimização e ofuscação podem convergir para o mesmo resultado, explicando a aparência do código final, com identificadores de caractere único e um array de dados misturando valores constantes e mutáveis.

O Conceito de Quine Autoregenerativo

Um “quine” é um programa que imprime seu próprio código-fonte quando executado. A versão de Uellenberg leva isso a um novo patamar: ele imprime uma cópia modificada de si mesmo – o código-fonte para o próximo frame, já com o estado atualizado do jogo “assado” dentro. Execute-o novamente, e ele imprimirá o frame subsequente, e assim por diante.

Jogabilidade Única e Surpresas

  • Controle: O jogador controla a raquete direita passando “w” ou “e” como argumento de linha de comando.
  • Oponente de IA: Compete contra um adversário controlado por computador.
  • Automação: Um script embutido automatiza o ciclo de compilação e execução, permitindo que a partida ocorra em tempo real.
  • Jogo Bônus: Vencer o computador muda o programa para um segundo jogo – um “jumper” de rolagem lateral inspirado no famoso dinossauro corredor do Chrome. Concluir este jogo bônus retorna ao Pong.

O Cenário do IOCCC e Outras Inovações

O IOCCC29 marca o segundo concurso desde que os organizadores encerraram um hiato de quatro anos (2020-2024). Os vencedores de 2025 foram anunciados via livestream no YouTube em 6 de junho, e o código-fonte foi disponibilizado no repositório GitHub do concurso.

Yusuke Endoh, cujos “quines” auto-modificadores inspiraram Uellenberg, levou três dos prêmios deste ano. O concurso, que acontece desde 1984 por Landon Curt Noll e é publicado sob licença Creative Commons, incluiu uma nota dos juízes pedindo aos participantes que evitem construir um “Quine Doom” no próximo ano.

A entrada do Pong se junta a outras proezas recentes que extraem sistemas completos de materiais improváveis, incluindo um emulador de CPU x86 escrito inteiramente em CSS e uma versão jogável de Doom renderizada em SQL puro. Os juízes planejam abrir o IOCCC30 no final de 2026.

Baseado no artigo de Tom’s Hardware