1 puntos por GN⁺ 2025-08-04 | 1 comentarios | Compartir por WhatsApp
  • Este año, IOCCC28 se reanudó después de 4 años, y se postularon numerosas obras de código C difícil y complejo de desarrolladores de todo el mundo
  • La reconstrucción del sitio web y la infraestructura, la incorporación del kit de herramientas mkiocccentry y la mejora del sistema de envío incrementaron notablemente la eficiencia operativa
  • El proceso de evaluación se volvió más complejo y exigente que en el pasado, pero el periodo de evaluación se redujo considerablemente frente a ciclos anteriores
  • Aunque se relajaron las reglas de tamaño de código, se seleccionaron numerosas obras pequeñas y de alta calidad, por lo que se espera que los cambios futuros en las normas del concurso sean limitados
  • Se presentaron obras ganadoras interesantes y originales con técnicas de ofuscación, junto con máquinas virtuales y emuladores experimentales, lo que contribuye a mejorar el nivel de programación en C

Resumen y contexto de IOCCC28

  • IOCCC28, celebrado en 2024, fue una competencia de código C creativo y enigmático con participantes de todo el mundo, tras un hiato de 4 años
  • Durante este período, con más de 6,168 commits, el sitio web oficial del IOCCC fue reconstruido a gran escala bajo el nombre de "Great Fork Merge"
  • En lo operativo se aplicaron innovaciones como el kit de herramientas mkiocccentry, el nuevo proceso de registro y los servidores de envíos, mejorando la eficiencia de evaluación y la velocidad de publicación del código
  • Las participaciones se recibieron entre el 5 de marzo de 2025 y el 5 de junio de 2025, y la evaluación terminó en solo 33 días, por lo que tras concluir el concurso el código fuente quedó disponible en su totalidad en unas 2 horas

Tendencias de participantes y selección

  • En IOCCC28 de este año, al aumentar de forma marcada la cantidad y calidad de las entradas, también subió la dificultad de evaluación, y se produjeron 23 ganadores, el número más alto de todos los tiempos
  • "La pausa de 4 años permitió que aparecieran trabajos mejores en algunos casos, pero en conjunto los participantes lograron avances notables tanto en ofuscación como en programación en C"
  • Aunque se aplicó una nueva limitación de tamaño de código (con un aumento de alrededor de 21%), más de la mitad de los ganadores se entregó con menos de 2/3 del límite total, y 10 con menos de 1/2 del tamaño, mostrando así tanto eficiencia como calidad
  • Por ello, se espera que en los próximos 10 años casi no haya cambios en el límite de tamaño de código

Normas de evaluación y planes futuros

  • Las reglas y guías del IOCCC se revisarán para hacerlas más innovadoras e intuitivas, y los jueces del IOCCC tienen previsto comenzar la preparación para IOCCC29, programada para diciembre de 2025
  • También se prevén parches de mejora basados en Pull Request para el repositorio de ganadores del IOCCC y el repositorio del toolkit mkiocccentry en GitHub

Presentación de ganadores y destacados

  • Se seleccionaron obras ganadoras con diversos temas, entre las que destacan:

    • ChatIOCCC: implementa el motor de inferencia de LLM más compacto del mundo basado en el LLM de código abierto LLaMA 2 de Meta, y ofrece una divertida función de chatbot
    • Eh: un editor con soporte de acento UTF-8 que implementa un código ofuscado más práctico que ed(1)
    • One-liner de 135 bytes: un código de ofuscación extremadamente corto que produce distintas salidas según el valor hexadecimal recibido
    • Arte de preprocesador de C: implementa renderizado de imágenes ejecutando el preprocesador miles a cientos de miles de veces, ofreciendo una experiencia de larga duración y muy singular
    • VM Z₃: implementación de una máquina virtual basada en la tercera versión de la Z-Machine, donde leer el código fuente puede disfrutarse como si fuera un juego
    • Entorno virtual con emulador de C64: máquina virtual que permite experimentar de forma segura escenarios dañinos como una fork bomb o el borrado de archivos, e incluye emulación de C64
    • Emulación del chip Intel 4004: recreación artística que imita hasta el nivel de puertas lógicas el circuito del primer microprocesador comercial del mundo, lanzado en 1971
    • Rompecabezas multilingüe: una ofuscación novedosa para quienes dominan al menos tres lenguajes (C, inglés y otro)

Participantes y recomendaciones futuras

  • La ofuscación similar a obras ganadoras anteriores obtiene menor puntaje; la originalidad y la pulcritud de acabado son criterios principales de evaluación
  • Se recomienda a quienes no ganaron volver a participar después de mejorar sus propuestas o probar enfoques diferentes
  • También se da la bienvenida a que se publiquen por separado las obras que no ganaron

Guía para compilar y ejecutar los ganadores

  • Se recomienda usar la versión más reciente de clang o gcc, ya que pueden existir problemas de compatibilidad con algunos compiladores de C
  • El FAQ y la documentación oficial explican cómo resolver problemas y enviar correcciones

Descarga de los ganadores de IOCCC28 2024

  • El conjunto de ganadores se ofrece como archivo comprimido (2024.tar.bz2); consulta la página de cada obra para ver la descripción detallada, el código fuente y las opiniones de los autores, y aprender técnicas de ofuscación originales

(Los enlaces directos para descargar los ganadores y la descripción detallada de cada uno están disponibles en el sitio oficial)

1 comentarios

 
GN⁺ 2025-08-04
Comentarios de Hacker News
cc -Wno-implicit-int -Wno-implicit-function-declaration phase.c && ./a.out
  • Debido al rediseño, todos los enlaces a entradas anteriores del IOCCC se rompieron. Enlaces que durante décadas estuvieron repartidos en varios sitios como Wikipedia quedaron bloqueados sin redirección, y ahora para ver las entradas en GitHub es obligatorio usar un navegador con JavaScript habilitado
  • Para acceder desde un entorno sin JS, se puede clonar el repositorio con git clone
  • Viendo esta entrada, me puse a leer trabajos anteriores del IOCCC, y este one-liner de descompresión de imagen imprime por sí mismo la imagen de su logo cuando recibe como argumento el valor hash del código fuente. Es increíble
  • Tenía curiosidad por cómo funciona este truco del hash, y en las notas viene explicado. Por cierto, el contenido de las notas también es buenísimo
    Dice: "Aunque la concisión se valora más que la oscuridad, este programa aún cumple con los estándares de claridad característicos del IOCCC"
  • Por una coincidencia realmente asombrosa, la cantidad de bits del formato de entrada casi coincide con el log2 de la cantidad de evaluaciones MD5 que una GPU de cinco años puede hacer en una hora
  • Esta persona también es quien creó jq
  • ¡Está hecho en 135 bytes! Es un código casi de científico loco. De verdad cuesta creerlo
  • Las reglas para las entradas del IOCCC están buenísimas. Son normas muy específicas que muestran claramente cómo se abusó de ellas en el pasado
Rule 2

Rule 2 requiere que la entrada cumpla tanto con Rule 2a como con 2b  
Puedes usar la herramienta iocccsize(1) para verificar si el código pasa esta regla  
Solo hay que pasarle como argumento el nombre del archivo, como `prog.c`

Rule 2a  
El tamaño del código fuente del programa no debe exceder 4993 bytes

Rule 2b  
Al medir el tamaño del código con la herramienta iocccsize(1), el valor de salida no debe superar 2503

Para más detalles relacionados con esto, consulta el FAQ o la Rule 17
  • Entonces eso significa que está permitido meter 2053 bytes de datos extra en el nombre del archivo. Es una regla más relajada de lo que esperaba
  • 4993 bytes, me da curiosidad cómo decidieron un número tan extraño
  • Ojalá underhanded-c.org volviera a abrir
  • Cuesta pensar en un mejor argumento para no usar C. Se siente como una conclusión clara y seria
  • Se puede escribir código ofuscado así en cualquier lenguaje. C le queda especialmente bien, pero la mayoría de las entradas del IOCCC usan trucos que también aplican a muchos otros lenguajes
  • Esta es una de mis entradas favoritas del IOCCC, y además fue ganadora
    Ver persano.c de 2005
  • Supongo que si yo fuera programador, mi trabajo les parecería a los demás un puro cifrado sin ningún sentido
  • Esto está buenísimo
    Entrada de macke de 2024
    Este programa es un emulador que ejecuta un sistema Linux moderno completo con el mínimo de funcionalidad posible
  • Soy el autor. Este binario, con 1.6 MB, ejecuta un Linux moderno. Usé todo tipo de trucos para reducir al máximo el tamaño. También fue compilado a WebAssembly, así que se puede ejecutar dentro del navegador
  • Esta entrada me confundió bastante