Введение
Международный конкурс запутанного кода на C (сокращенно IOCCC) — это соревнование по программированию, в котором оценивается наиболее креативно запутанный код на языке C. Проводится дважды в год и описывается как «празднование синтаксической неочевидности [C]». Код-победитель 27-го конкурса, прошедшего в 2020 году, был опубликован в июле 2020 года. Предыдущие конкурсы проходили в 1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015 и 2018–2020 годах. Работы участников оцениваются анонимно коллегией судей. Процедура оценки задокументирована в правилах конкурса и состоит из нескольких этапов отбора. По традиции, информация об общем количестве представленных работ на каждый конкурс не разглашается. Победившие работы получают награды в различных категориях, таких как «Наиболее злоупотребленное использование препроцессора C» или «Наиболее непредсказуемое поведение», и затем объявляются на официальном сайте IOCCC. В положении о конкурсе указано, что объявление на сайте IOCCC и является наградой за победу.
The International Obfuscated C Code Contest (abbreviated IOCCC) is a computer programming contest for the most creatively obfuscated C code. Held semi annually, it is described as "celebrating [C's] syntactical opaqueness". The winning code for the 27th contest, held in 2020, was released in July 2020. Previous contests were held in the years 1984–1996, 1998, 2000, 2001, 2004–2006, 2011–2015 and 2018–2020. Entries are evaluated anonymously by a panel of judges. The judging process is documented in the competition guidelines and consists of elimination rounds. By tradition, no information is given about the total number of entries for each competition. Winning entries are awarded with a category, such as "Worst Abuse of the C preprocessor" or "Most Erratic Behavior", and then announced on the official IOCCC website. The contest states that being announced on the IOCCC website is the reward for winning.
История
IOCCC был основан Лэндоном Куртом Ноллом и Ларри Басселем в 1984 году, когда они работали в группе по портированию National Semiconductor Genix. Идея конкурса возникла после того, как они поделились друг с другом наблюдениями о плохом коде, который им приходилось исправлять, в частности, об оболочке Bourne, использовавшей макросы для эмуляции синтаксиса ALGOL 68, и об ошибочной версии утилиты finger для BSD. Сам конкурс стал темой вопроса викторины на Computer Bowl в 1993 году. После пятилетнего перерыва, начавшегося в 2006 году, конкурс возобновился в 2011 году. По сравнению с другими соревнованиями по программированию, IOCCC, по словам Майкла Суэйна, редактора журнала Dr. Dobb's Journal, описывается как "не слишком серьезный".
Правила
Каждый год правила конкурса публикуются на сайте IOCCC. Все материалы опубликованы под лицензией Creative Commons BY SA 3.0 Unported. Правила меняются из года в год и сопровождаются набором рекомендаций, призванных передать суть правил. Нарушение правил конкурса – давняя традиция. — Landon Curt Noll, 2011 (с одной работой, создавшей 11-битное арифметико-логическое устройство в препроцессоре C), или отказ от общепринятых конструкций в языке программирования C в пользу гораздо более запутанных способов достижения того же результата. Среди представленных работ были исходные коды, отформатированные так, чтобы напоминать изображения, текст и т.п., в духе ASCII-арта, переопределения препроцессора, усложняющие чтение кода, и самомодифицирующийся код. Несколько раз участники представляли работы, требовавшие пересмотра правил на следующий год, что считается большой честью. Примером служит самая короткая в мире самовоспроизводящаяся программа. Эта программа была разработана для вывода своего собственного исходного кода и имела нулевую длину исходного кода. При запуске программа выводила ноль байт, что эквивалентно её исходному коду. Стремясь довести обфускацию до предела, участники создавали программы, которые балансируют на грани стандартов C или приводят к конструкциям, активирующим редко используемые комбинации путей в компиляторах. В результате некоторые из прошлых работ могут не компилироваться в современных компиляторах, а некоторые могут приводить к аварийному завершению.
Примеры
В пределах лимита размера кода, всего в несколько килобайт, участникам удавалось создавать сложные программы — победитель конкурса 2004 года разработал операционную систему.