Code golf — это разновидность любительского соревнования по компьютерному программированию , в котором участники стремятся создать максимально короткий исходный код , решающий определенную задачу. [1] [2] Соревнования и турниры по Code golf также могут называться по названию используемого языка программирования (например, Perl golf ).
Термин «кодовый гольф» происходит от сходства его цели с целью обычного гольфа , где участники стремятся набрать как можно меньше очков, а не как можно больше, как это принято в большинстве спортивных и игровых систем подсчета очков. В то время как игроки в обычный гольф пытаются свести к минимуму количество ударов клюшкой, необходимых для завершения курса, игроки в кодовый гольф стремятся сократить количество символов, необходимых для написания программы.
Длина кратчайшей возможной программы, которая выдает заданный вывод (на любом фиксированном языке программирования), известна как колмогоровская сложность вывода, и ее математическое исследование восходит к работе Андрея Колмогорова 1963 года. Однако код-гольф может быть более общим, поскольку он часто определяет общее преобразование ввода-вывода, которое должно быть выполнено, а не запрашивает один вывод без ввода.
Хотя термин «код-гольф» был впервые использован в 1999 году с Perl [3] и позже популяризирован благодаря использованию Perl для написания программы, которая выполняла шифрование RSA , [4] известно , что похожее неформальное соревнование было популярно среди ранних хакеров APL . Сложная природа агрессивной оптимизации размера программы сама по себе давно признана; например, в руководстве по кодированию 1962 года для компьютера GIER компании Regnecentralen отмечается, что «это трудоемкий вид спорта — кодировать с наименьшим возможным количеством инструкций», и не рекомендуется делать это для практического программирования. [5] Сегодня этот термин расширился и охватывает широкий спектр языков, что даже послужило толчком к созданию специализированных языков для гольфа.
Несколько новых языков были созданы специально с учетом игры в гольф. Примерами служат GolfScript, Flogscript, Stuck и Vyxal, которые являются языками, полными по Тьюрингу , которые предоставляют конструкции для краткого выражения идей в коде. Поскольку языки для игры в гольф стремятся к предельной краткости, их дизайн приносит в жертву читабельность, которая важна для практических производственных сред, и поэтому они часто являются эзотерическими . Иногда, однако, язык разрабатывается для практических целей, но оказывается подходящим для игры в гольф.
Пример кода GolfScript для печати 1000 знаков числа Пи : [6]
;''6666,-2%{2+.2/@*\/10.3??2*+}*`1000<~\;
Сайты Code golf включают новые языки для гольфа, созданные пользователями для победы в соревнованиях по code golf. Другие популярные языки включают 05AB1E, Husk, Pyth, CJam и Jelly.
Некоторые вопросы по code golf, например, те, что задаются на общих сайтах по программированию, могут не требовать реализации на определенном языке программирования . Однако это ограничивает стиль задач, которые могут ставить разработчики задач (например, ограничивая использование определенных языковых возможностей). Кроме того, создание таких «открытых» вопросов привело к разработке диалектов языка программирования code golf, таких как REBMU (диалект REBOL ). Как онлайн-, так и живые соревнования могут также включать ограничения по времени.