На 29-м Международном конкурсе обфусцированного кода на языке C (IOCCC) одной из самых необычных работ стала версия классической Pong, созданная Джоной Уэлленбергом. Проект получил награду Ping Pong благодаря нестандартному подходу: после каждого кадра программа выводит новый исходный код на языке C, содержащий уже обновленное состояние игры. После компиляции этого кода игра продолжает выполнение с того же места.
Самое любопытное, что автор не писал запутанный код вручную. Вместо этого он разработал проект на собственном языке программирования Insert с понятным и подробно прокомментированным исходным кодом. Уже компилятор автоматически преобразовал его в компактный и крайне трудночитаемый C-код, который и был отправлен на конкурс.
В основе проекта лежит идея так называемого «квайна» — программы, способной выводить собственный исходный код. Однако разработка Уэлленберга пошла дальше: она генерирует не точную копию себя, а новую версию программы с обновленным состоянием игры. Таким образом каждый запуск фактически становится следующим кадром игрового процесса.
Игрок управляет правой ракеткой с помощью аргументов командной строки, а встроенный сценарий автоматически компилирует и запускает каждую новую версию программы, создавая непрерывный игровой процесс. После победы над компьютерным соперником Pong неожиданно превращается в мини-игру, вдохновленную знаменитым раннером Chrome с динозавром, а затем цикл начинается заново.
Конкурс IOCCC вернулся после четырехлетнего перерыва, а победителей объявили в начале июня. В этом году жюри особенно отметило оригинальность работы Уэлленберга, а в шутку попросило участников не пытаться создать «Quine Doom» на следующем конкурсе.
Проект продолжает тенденцию необычных экспериментов в программировании. За последнее время энтузиасты уже демонстрировали эмулятор процессора x86, полностью реализованный средствами CSS, а также играбельную версию Doom, написанную исключительно на SQL. Теперь к этому списку добавилась и самогенерирующаяся версия Pong.















