Кодовый гольф - это разновидность соревнований по развлекательному программированию, в которых участники стремятся получить как можно более короткий исходный код , реализующий определенный алгоритм . Игра в кодовый гольф известна как «скриптинг игры в гольф». Задачи и турниры по гольфу также могут быть названы с использованием используемого языка программирования (например, Perl golf ).
История
Длина самой короткой программы, которая производит данный результат (на любом фиксированном языке программирования), известна как колмогоровская сложность вывода, и ее математическое исследование датируется работой Андрея Колмогорова в 1963 году. Код гольф, однако, может быть более общий, чем это, поскольку он часто определяет общее преобразование ввода-вывода, которое должно быть выполнено, а не запрашивать один вывод без ввода.
В то время как термин «код гольф», по- видимому впервые использован в 1999 году с Perl , [1] , а затем популяризовал посредством использования Perl , чтобы написать программу , которая выполняется RSA шифрования, [2] аналогичная неформальная конкуренция , как известно, были популярны ранее хакеры APL . Сложный характер агрессивной оптимизации для размера программы уже давно признан, например, в руководстве по кодированию для компьютера GIER компании Regnecentralen 1962 года отмечается, что «кодирование с наименьшим возможным количеством инструкций - занятие, требующее много времени», и не рекомендуется использовать это для практическое программирование. [3] Сегодня этот термин расширился и охватывает большое количество языков, что даже привело к созданию специальных языков для игры в гольф.
Этимология
Термин «кодовый гольф» происходит от схожести его цели с целью обычного гольфа , когда участники стремятся набрать как можно более низкий балл, а не наивысший, как это принято в большинстве спортивных систем и систем подсчета очков. В то время как обычные игроки в гольф стараются свести к минимуму количество ударов клюшкой, необходимых для завершения поля, программисты в гольф стремятся уменьшить количество нажатий клавиш, необходимых для написания программы.
Выделенные языки игры в гольф
Специально для игры в гольф было создано несколько новых языков. Примеры включают GolfScript и Flogscript, которые являются полными по Тьюрингу языками, которые предоставляют конструкции для лаконичного выражения идей в коде. Поскольку языки игры в гольф конкурируют за крайнюю краткость, их дизайн жертвует удобочитаемостью, что важно для практических производственных сред, и поэтому они часто являются эзотерическими . Иногда, однако, язык предназначен для практических целей, но оказывается, что он подходит для кодового гольфа.
Пример кода GolfScript для печати 1000 цифр числа Пи :
; ''6666, -2% {2 + .2 / @ * \ / 10.3 ?? 2 * +} *`1000 <~ \;
Это напечатает строку, начинающуюся с «3141592653», за которой следует еще 990 цифр числа «пи».
На сайтах Code Golf пользователи постоянно создают новые уникальные языки игры в гольф, чтобы выиграть соревнования по гольфу. Другие популярные языки включают 05AB1E и Jelly.
Виды кодового гольфа
Некоторые вопросы по программированию, например те, которые задаются на сайтах общего программирования, могут не требовать реализации на конкретном языке программирования . Однако это ограничивает стиль задач, которые могут создавать разработчики задач (например, ограничивая использование определенных языковых функций). Вдобавок создание таких «открытых» вопросов привело к разработке кодовых диалектов языка программирования для гольфа, таких как REBMU (диалект REBOL ). Как онлайн, так и живые соревнования также могут включать ограничения по времени.
Смотрите также
Рекомендации
- ^ Грег Бэкон (1999-05-28). «Re: Увеличение значения в срезе» . Группа новостей : comp.lang.perl.misc . Usenet: [email protected] . Проверено 12 июля 2011 .
- ^ Назад, Адам. «RSA в 5 строках perl» . Проверено 10 января 2011 .
- ^ Андерсен, Кристиан; Грамм, Кристиан (1962). Lærebog i Kodning для GIER (PDF) . 1 (3-е изд.). Копенгаген: Regnecentralen. п. 104 . Проверено 16 мая 2020 .
Внешние ссылки
- CodeGolf.StackExchange.com: Вопросы и ответы по программированию головоломок и программированию гольфа
- Список специальных языков для игры в гольф
- Гольф с регулярными выражениями: забавный вариант кода для гольфа
- КратчайшийWikiContest
- Гольф с обратным кодом (xkcd)
- Конкурсные сайты с системным тестированием