Код гольфа
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2021 г. ) |
Код-гольф — это разновидность развлекательных по компьютерному программированию соревнований , в которых участники стремятся получить как можно более короткий исходный код , решающий определенную проблему. [1] [2] Соревнования и турниры по коду гольфа также могут быть названы в соответствии с используемым языком программирования (например, Perl Golf ).
Этимология
[ редактировать ]Термин «кодовый гольф» происходит от сходства его цели с целью обычного гольфа , где участники стремятся набрать минимально возможный балл, а не наивысший, как это является стандартом в большинстве систем подсчета очков в спортивных и игровых видах спорта. В то время как обычные игроки в гольф стараются свести к минимуму количество ударов клюшкой, необходимых для прохождения поля, игроки в программный гольф стремятся уменьшить количество символов, необходимых для написания программы.
История
[ редактировать ]Длина кратчайшей возможной программы, которая выдает заданный результат (на любом фиксированном языке программирования), известна как Колмогоровская сложность вывода, а ее математическое исследование восходит к работе Андрея Колмогорова в 1963 году. Однако код гольфа можно более общий, чем этот, поскольку он часто определяет общее преобразование ввода-вывода, которое должно быть выполнено, а не запрашивать один вывод без ввода.
Хотя термин «код-гольф», очевидно, впервые был использован в Perl в 1999 году , [3] и позже популяризировался благодаря использованию Perl для написания программы, выполняющей шифрование RSA , [4] Известно, что подобное неофициальное соревнование было популярно среди более ранних хакеров APL . Сложность агрессивной оптимизации размера программы сама по себе уже давно признана; например, в руководстве по кодированию для компьютера GIER компании Regnecentralen 1962 года отмечается, что «программирование с наименьшим количеством инструкций требует много времени», и не рекомендуется использовать его для практического программирования. [5] Сегодня этот термин расширился и охватывает множество языков, что даже привело к созданию специальных языков для игры в гольф.
Специальные языки для игры в гольф
[ редактировать ]Несколько новых языков были созданы специально для игры в гольф. Примеры включают GolfScript, Flogscript, Stuck и Vyxal — полные по Тьюрингу языки, предоставляющие конструкции для краткого выражения идей в коде. Поскольку языки игры в гольф конкурируют за чрезвычайную краткость, их дизайн жертвует читабельностью, что важно для практической производственной среды, и поэтому они часто являются эзотерическими . Однако иногда язык создан для практических целей, но оказывается пригодным для игры в гольф.
Пример кода GolfScript для печати 1000 цифр числа Пи : [6]
;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`1000<~\;
Веб-сайты по кодовому гольфу включают новые языки игры в гольф, созданные пользователями для победы в соревнованиях по кодовому гольфу. Другие популярные языки включают 05AB1E, Husk, Pyth, CJam и Jelly.
Виды кодового гольфа
[ редактировать ]Некоторые вопросы по кодированию гольфа, например те, которые задаются на сайтах общего программирования, могут не требовать реализации на конкретном языке программирования . Однако это ограничивает стиль задач, которые могут ставить разработчики задач (например, ограничивая использование определенных функций языка). Кроме того, создание таких «открытых» вопросов привело к разработке специфических диалектов языка программирования для гольфа, таких как REBMU (диалект REBOL ). Как онлайн-соревнования, так и живые соревнования также могут включать ограничения по времени.
См. также
[ редактировать ]- Код поэзии
- Сжатие данных
- Минификация (программирование)
- Perl-развлечения
- Колмогоровская сложность
- Ката (программирование)
Ссылки
[ редактировать ]- ^ Обмен стеками кода для гольфа. По поводу кода-гольфа . Проверено 21 декабря 2021 г.
- ^ «Введение в Code-golf | ASSIST Software Румыния» . Проверено 23 марта 2023 г.
- ^ Грег Бэкон (28 мая 1999 г.). «Re: Увеличение значения в срезе» . Группа новостей : comp.lang.perl.misc . Usenet: [электронная почта защищена] . Проверено 12 июля 2011 г.
- ^ Назад, Адам. «RSA в 5 строках Perl» . Проверено 10 января 2011 г.
- ^ Андерсен, Кристиан; Грэм, Кристиан (1962). Учебник по кодированию для GIER (PDF) . Том. 1 (3-е изд.). Копенгаген: Regnecentralen. стр. 104 . Проверено 16 мая 2020 г.
- ^ «Примеры гольф-скриптов» . Проверено 23 марта 2023 г.
Внешние ссылки
[ редактировать ]- CodeGolf.StackExchange.com: Вопросы и ответы по головоломкам и программному гольфу.
- Гольф на вики по эзотерическим языкам программирования
- Список специализированных языков для игры в гольф