Код-гольф (, «код-гольфинг», «гольф-скриптинг») — вид развлекательного соревнования в программировании, в котором участники стараются написать кратчайший исходный код, реализующий некоторый алгоритм. Отдельные виды код-гольфа могут быть названы по используемому в нём языку программирования (например, Perl-гольф).
История Длина кратчайшей программы, порождающий некоторый заданный вывод (в заранее заданном языке программирования) задаёт колмогоровскую сложность этого вывода, которой были посвящены работы Андрея Николаевича Колмогорова в 1963 году. Код-гольф, впрочем, может трактоваться более широко, так как в нём зачастую требуется не вывести заданное слово, а описать некоторое преобразование ввода в вывод.
Хотя термин "код-гольф", вероятно, был впервые использован в 1999 году относительно программ на Perl и был популяризирован программами на Perl, реализующими RSA, похожие неформальные соревнования были распространены среди ранних программистов на APL. Сегодня термин может быть использован по отношению к широкому семейству языков программирования, более того, существуют языки программирования, разработанные специально для код-гольфа. Этимология Термин "код-гольф" получен по аналогии с тем, как в обыкновенном гольфе необходимо набрать наименьшее возможное количество очков, а не наибольшее, как в большинстве видов спорта. В то время, как игроки обычного гольфа стремятся минимизировать количество ударов клюшкой, необходимых для прохождения поля, код-гольферы стремятся минимизировать количество ударов по клавиатуре, необходимых для того, чтобы написать программу.
Специализированные языки для гольфинга Некоторые языки программирования были разработаны специально для код-гольфинга. Примерами таких языков являются GolfScript и Flogscript, которые, будучи Тюринг-полными, при этом позволяют лаконично выражать идеи в коде. Так как перед языками для гольфинга стоит задача минимизации длин программ, написанных на них, при их разработке обычно приходится жертвовать читаемостью кода, более важной в индустриальном программировании, поэтому эти языки часто являются эзотерическими. Например, программа на GolfScript, выводящая первые 1000 цифр числа пи выглядит так:;'' 6666,-2%{2+.2/@*\/10.3??2*+}* `1000<~\; Другими популярными языками для гольфинга являются 05AB1E и Jelly.
Примечания
См. также
Сжатие данных Perl pastimes (англ) Code poetry (англ)
Внешние ссылки
code-golf.io StackOverflow.com: Код-гольф – Увеличиваем цифры CodeGolf.StackExchange.com: Соревнования по гольфингу в формате вопросов и ответов на stackoverflow Список специализированных языков для гольфинга Код-гольфинг в регулярных выражениях Соревнование по написанию минималистичного вики-движка Reverse Code Golf (xkcd)
Категория:Соревнования по программированию