El Concurso Internacional de Código C Ofuscado (abreviado IOCCC) es un concurso de programación de celebración anual - con escasas interrupciones - que busca encontrar el código C creativamente mas ofuscado. Ha sido descripto como "una celebración a la opacidad sintáctica de C". El IOCCC fue alumbrado por Landon Curt Noll y Larry Bassel en 1984, mientras trabajaban en el grupo de portabilidad de Genix para la National Semiconductor. La idea del concurso surgió después que estos compararan sus anotaciones sobre porciones de código fuente especialmente problemáticas para depurar, en particular la shell de Bourne (que empleaba macros en un intento de emular la sintaxis de ALGOL-68), así como supinos errores de la implementación de finger para BSD. En comparación con otros concursos de programación, el IOCCC ha sido descrito como "no tan serio" el mensuario Dr. Dobb's Journal. Los participantes incriptos acreditan distintas instancias de código fuente en lenguaje C por etapas, los que se somenten a evaluación anónima por un panel de JueCes ("jueces de C"). Las Reglas de la Competencia se enuncian durante las mismas rondas eliminatorias. Por tradición, no se ofrece información sobre el número total de inscripciones para cada competencia. Las entradas ganadoras se premian por una Categoría, ya sea la de "Peor abuso del preprocesador C" o la de "Comportamiento más errático". El Premio consiste únicamente en ser anunciado en el sitio web de www.IOCCC.com El código ganador del vigésimo séptimo concurso, realizado en 2020 se publicó en julio de 2020. Los concursos anteriores se llevaron a cabo en los años 1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015 y 2018–2020. Normas Cada año, se publican en el sitio web del IOCCC las reglas del concurso. Todo el material se publica bajo licencia Creative Commons BY-SA 3.0 Unported. Dichas reglas varían de un año a otro y anuncian junto a un conjunto de pautas que intentan transmitir el espíritu de las Reglas. El mismo Landon Curt Noll declara que "Hackear las reglas del concurso es una tradición". Estas reglas a menudo se declaran deliberadamente con resquicios que anima a los concursantes a comprender y abusar. El código que saca provecho de estos agujeros legales incluso pueden obligar a modificar las Reglas para el concurso del año siguiente (lo que se considera máximo honor). Técnicas de Ofuscación empleadas Las entradas propuestas a menudo emplean trucos extraños o inusuales en el lenguaje de programaciòn, tales como forzar el uso del preprocesador C para lograr cosas para las que no fue diseñado (en algunos casos "espectacularmente", según el Dr. Dobbs, con una entrada que crea una ALU de 11 bits en el preprocesador C), o bien evitar construcciones de uso común en C en favor de otras formas mucho más oscuras para obtener lo mismo. Las contribuciones han incluido código fuente formateado para cobrar similitud a imágenes y texto soeces, a la manera del arte ASCII, redefiniciones del preprocesador para hacer que el código sea menos legible o menos comprensible, y notablemente, el código automodificable. Un ejemplo fue el programa de autorreplicante más corto del mundo: un programa diseñado para generar su propio código fuente y cuya extensión de código erae de cero bytes. Cuando se ejecutaba el programa, imprimía cero bytes, equivalente a su código fuente. En un esfuerzo por llevar la ofuscación a sus extremos, algunos concursantes escribieron programas que incluso eluden los límites de los C estándares, lo que da como resultados combinaciones de programación raramente empleadas en los compiladores. Por ello suele suceder que los casos más extremos del pasado no directamente no se compilen directamente en un compilador moderno, y algunas pueden colgarse. Ejemplos Dentro del límite de tamaño de código de solo unos pocos kilobytes, los concursantes lograron hacer cosas complicadas: el ganador de 2004 resultó un sistema operativo completo. El Nanoajedrez de Toledo El Toledo Nanochess es un motor de ajedrez creado por el desarrollador de software mexicano Oscar Toledo Gutiérrez, cinco veces ganador del IOCCC. De acuerdo con las reglas de IOCCC, tiene 1255 caracteres. El autor afirma que es el programa de ajedrez más pequeño del mundo escrito en C (aunque está sumamente ofuscado, claro está). El 2 de febrero de 2014, el autor publicó el libro "Toledo Nanochess: El código fuente comentado". Este se trataba entonces de uno de los dos únicos motores de ajedrez escritos en menos de 2 kilobytes de C, capaces de ejecutar movimientos de ajedrez legales completos, junto al Micro-Max del físico holandés H. G. Muller. En 2014, la barrera de 1 kilobyte fue superada por Super Micro Chess, derivado de Micro-Max, que logra la azaña del juego ciencia minimalista con un total de 760 caracteres (incluyendo espacios y saltos de línea). Hoy ya existe una versión más pequeña del motor de Toledo, el Toledo Picochess, que consta de 944 caracteres que no están en blanco ni ofuscados.