Победитель IOCCC29 написал Pong, в котором каждый кадр — это отдельная компиляция исходного кода с «вшитым» внутрь состоянием игры
Сам обфусцированный код участник руками не писал: его сгенерировал компилятор созданного им языка Insert
Оптимизация размера в компиляторе Insert даёт результат, неотличимый от ручной обфускации
После победы над компьютером в Pong программа переключается на бесконечный раннер — и обратно
На 29-м Международном конкурсе обфусцированного кода на C (International Obfuscated C Code Contest, IOCCC) приз Ping Pong Prize получил разработчик под ником Уэлленберг (Uellenberg) — за версию Pong, которая перекомпилирует собственный исходный код на каждом кадре. Каждый запуск программы печатает исходный код на C для следующего кадра, причём текущее состояние игры и картинка «зашиты» прямо внутрь этого кода. Скомпилировать и запустить полученный вывод — значит продвинуть игру на один шаг. Любопытно, что сам запутанный код автор не писал: он написал чистый, прокомментированный исходник на собственном языке программирования Insert, а уже его компилятор сгенерировал тот самый обфусцированный C, который и взял награду.
Источник изображения - @timClicks via X.com
Сегодня в рубрике «проклятый код»: программа, которая играет в понг, модифицируя собственный исходный код. (Каждый кадр — это новая компиляция.) — @timClicks, 26 июня 2026
Квайн, который переписывает сам себя
Квайн (quine) — это программа, которая при запуске выводит собственный исходный код. Версия Уэлленберга выводит изменённую копию себя: исходник для следующего кадра с уже обновлённым состоянием игры внутри. Запускаете — получаете следующий кадр, и так по кругу. Чтобы матч шёл в реальном времени, к программе прилагается небольшой скрипт, который автоматизирует цикл «скомпилировать → запустить → снова скомпилировать».
Язык Insert и почему «это не обфускация»
Компилятор Insert (написан на Rust) транслирует код в C и выполняет оптимизации, типичные для промышленных компиляторов: анализ времени жизни переменных и удаление мёртвого кода, свёртку констант, а также слияние переменных, когда один слот переиспользуется под множество значений. Затем повторяющиеся последовательности токенов сворачиваются в макросы препроцессора ради сокращения размера. В заметках к работе автор подчёркивает, что выигравший код «на самом деле не обфусцирован. Никогда им не был» — это побочный продукт работы компилятора, а не ручная запутка. По его словам, оптимизация и обфускация нередко сходятся в одной точке: итоговый листинг выглядит как стена односимвольных идентификаторов и массив данных, в котором перемешаны константы и изменяемые значения.
Сначала Pong, потом раннер
Игрок управляет правой ракеткой, передавая «w» или «e» аргументом командной строки, и играет против компьютерного соперника. Победа над компьютером переключает программу во вторую игру — бесконечный раннер в духе того самого «динозаврика» из браузера Chrome, который появляется при отсутствии интернета. Пройдите и его — программа вернёт вас обратно к Pong.
О самом конкурсе
IOCCC проводится с 1984 года под руководством Лэндона Курта Нолла и публикуется под лицензией Creative Commons; его называют одним из самых долгоживущих конкурсов в интернете — в этом году ему исполнилось 42 года. IOCCC29 стал вторым конкурсом после четырёхлетнего перерыва (2020–2024). Итоги подвели 6 июня на трёхчасовой трансляции в YouTube, где объявили 22 работы-победителя, после чего исходники выложили в репозиторий конкурса на GitHub.
Три награды в этом году забрал Юсукэ Эндо — именно его самомодифицирующиеся квайны Уэлленберг называет причиной, по которой сам взялся за этот жанр. Среди других заметных работ — эмулятор Game Boy, исходник которого по форме напоминает саму консоль, квазирогалик с призом «вероятнее всего телепортирует» и компьютер на архитектуре Subleq. Pong удостоился отдельной ремарки жюри: участников попросили в следующий раз воздержаться от создания «Квайн-Doom».
Работа встаёт в один ряд с другими недавними экспериментами, выжимающими полноценные системы из неожиданных материалов, — среди них эмулятор процессора x86, целиком написанный на CSS, и играбельная сборка Doom на чистом SQL. Открыть IOCCC30 организаторы планируют ближе к концу 2026 года.













