stringtranslate.com

Код гольфа

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 ). Как онлайн-, так и живые соревнования могут также включать ограничения по времени.

Смотрите также

Ссылки

  1. ^ Code Golf Stack Exchange. О code-golf. Получено 21.12.2021.
  2. ^ "Введение в Code-golf | ASSIST Software Romania" . Получено 2023-03-23 ​​.
  3. ^ Грег Бэкон (1999-05-28). "Re: Увеличение значения в срезе". Группа новостей : comp.lang.perl.misc. Usenet:  [email protected] . Получено 2011-07-12 .
  4. ^ Назад, Адам. "RSA в 5 строках perl" . Получено 2011-01-10 .
  5. ^ Андерсен, Кристиан; Грэм, Кристиан (1962). Lærebog i Kodning для GIER (PDF) . Том. 1 (3-е изд.). Копенгаген: Regnecentralen. п. 104 . Проверено 16 мая 2020 г.
  6. ^ "Примеры GolfScript" . Получено 2023-03-23 ​​.

Внешние ссылки