Код-гольф (англ. Code golf, «код-гольфинг», «гольф-скриптинг») — вид развлекательного соревнования в программировании, в котором участники стараются написать кратчайший исходный код, реализующий некоторый алгоритм. Отдельные виды код-гольфа могут быть названы по используемому в нём языку программирования (например, Perl-гольф).

История править

Длина кратчайшей программы, порождающий некоторый заданный вывод (в заранее заданном языке программирования) задаёт колмогоровскую сложность этого вывода, которой были посвящены работы Андрея Николаевича Колмогорова в 1963 году. Код-гольф, впрочем, может трактоваться более широко, так как в нём зачастую требуется не вывести заданное слово, а описать некоторое преобразование ввода в вывод.

Хотя термин "код-гольф", вероятно, был впервые использован в 1999 году относительно программ на Perl[1] и был популяризирован программами на Perl, реализующими RSA[2], похожие неформальные соревнования были распространены среди ранних программистов на APL. Сегодня термин может быть использован по отношению к широкому семейству языков программирования, более того, существуют языки программирования, разработанные специально для код-гольфа.

Этимология править

Термин "код-гольф" получен по аналогии с тем, как в обыкновенном гольфе необходимо набрать наименьшее возможное количество очков, а не наибольшее, как в большинстве видов спорта. В то время, как игроки обычного гольфа стремятся минимизировать количество ударов клюшкой, необходимых для прохождения поля, код-гольферы стремятся минимизировать количество ударов по клавиатуре, необходимых для того, чтобы написать программу.

Специализированные языки для гольфинга править

Некоторые языки программирования были разработаны специально для код-гольфинга. Примерами таких языков являются GolfScript и Flogscript, которые, будучи Тюринг-полными, при этом позволяют лаконично выражать идеи в коде. Так как перед языками для гольфинга стоит задача минимизации длин программ, написанных на них, при их разработке обычно приходится жертвовать читаемостью кода, более важной в индустриальном программировании, поэтому эти языки часто являются эзотерическими. Например, программа на GolfScript, выводящая первые 1000 цифр числа пи выглядит так:

;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`1000<~\;

Другими популярными языками для гольфинга являются 05AB1E и Jelly.

Примечания править

  1. Greg Bacon (1999-05-28). "Re: Incrementing a value in a slice". Newsgroupcomp.lang.perl.misc. Usenet: 7imnti$mjh$1@info2.uah.edu. Дата обращения: 12 июля 2011. Источник. Дата обращения: 16 декабря 2019. Архивировано 7 июля 2011 года.
  2. Back, Adam RSA in 5 lines of perl. Дата обращения: 10 января 2011. Архивировано 19 января 2011 года.

См. также править

Внешние ссылки править