Код гольф - Code golf
Кодовый гольф - это разновидность соревнований по развлекательному программированию, в которых участники стремятся получить как можно более короткий исходный код , реализующий определенный алгоритм . Игра в кодовый гольф известна как «скриптинг игры в гольф». Задачи и турниры по игре в гольф также могут быть названы в соответствии с используемым языком программирования (например, Perl golf ).
История
Длина самой короткой программы, которая производит данный результат (на любом фиксированном языке программирования), известна как колмогоровская сложность вывода, и ее математическое исследование датируется работой Андрея Колмогорова в 1963 году. Код гольф, однако, может быть более общий, чем это, поскольку он часто определяет общее преобразование ввода-вывода, которое должно быть выполнено, а не запрашивать один вывод без ввода.
Хотя термин «кодовый гольф», по-видимому, впервые был использован в 1999 году с Perl , а затем популяризирован благодаря использованию Perl для написания программы, выполняющей шифрование RSA , аналогичные неформальные соревнования, как известно, были популярны среди ранних хакеров APL . Сложный характер агрессивной оптимизации для размера программы давно признан, например, в руководстве по кодированию для компьютера GIER компании Regnecentralen 1962 года отмечается, что «кодирование с наименьшим возможным количеством инструкций - занятие, требующее много времени», и не рекомендуется использовать это для практическое программирование. Сегодня этот термин расширился до самых разных языков, что даже привело к созданию специальных языков для игры в гольф.
Этимология
Термин «кодовый гольф» происходит от схожести его цели с целью обычного гольфа , когда участники стремятся набрать как можно более низкий балл, а не наивысший, как это принято в большинстве спортивных систем и систем подсчета очков. В то время как обычные игроки в гольф стараются свести к минимуму количество ударов клюшкой, необходимых для завершения поля, программисты в гольф стремятся уменьшить количество нажатий клавиш, необходимых для написания программы.
Выделенные языки игры в гольф
Специально для игры в гольф было создано несколько новых языков. Примеры включают GolfScript, Flogscript и Vyxal, которые являются полными по Тьюрингу языками, которые предоставляют конструкции для лаконичного выражения идей в коде. Поскольку языки игры в гольф конкурируют за крайнюю краткость, их дизайн жертвует удобочитаемостью, что важно для практических производственных сред, и поэтому они часто являются эзотерическими . Иногда, однако, язык предназначен для практических целей, но оказывается, что он подходит для кодового гольфа.
Пример кода GolfScript для печати 1000 цифр числа Пи :
;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`1000<~\;
Это напечатает строку, начинающуюся с «3141592653», за которой следует еще 990 цифр числа «пи».
На сайтах Code Golf пользователи постоянно создают новые уникальные языки игры в гольф, чтобы выиграть соревнования по гольфу. Другие популярные языки включают 05AB1E и Jelly.
Виды кодового гольфа
Некоторые вопросы по программированию, например те, которые задаются на сайтах общего программирования, могут не требовать реализации на конкретном языке программирования . Однако это ограничивает стиль задач, которые могут создавать разработчики задач (например, ограничивая использование определенных языковых функций). Вдобавок создание таких «открытых» вопросов привело к разработке кодовых диалектов языка программирования для гольфа, таких как REBMU (диалект REBOL ). Как онлайн, так и живые соревнования также могут включать временные ограничения.
Смотрите также
- Кодовая поэзия
- Сжатие данных
- Минификация (программирование)
- Игры на Perl
- Колмогоровская сложность
- Ката (программирование)
использованная литература
внешние ссылки
- CodeGolf.StackExchange.com: Вопросы и ответы по программированию головоломок и программированию гольфа
- Список специальных языков для игры в гольф
- Гольф с регулярными выражениями: забавный вариант кода для гольфа
- КратчайшийWikiContest
- Гольф с обратным кодом (xkcd)
- Конкурсные сайты с системным тестированием