맨위로가기

코드 골프

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

코드 골프는 프로그램의 소스 코드 길이를 최소화하는 프로그래밍 기법 또는 그러한 기법을 사용하는 대회를 의미한다. 1963년 콜모고로프 복잡도 연구에서 개념이 시작되었으며, 1999년 펄 프로그래밍 언어에서 "코드 골프"라는 용어가 사용되었다. 코드 골프는 일반 골프처럼 적은 수의 타수로 목표를 달성하는 것에 비유하여, 더 적은 문자 수로 코드를 작성하는 것을 목표로 한다. 코드 골프를 위해 특별히 설계된 GolfScript, Flogscript와 같은 전용 프로그래밍 언어가 존재하며, 주석 제거, 공백 생략, 변수 선언 생략 등의 기법이 사용된다. Anarchy Golf, JAGC, Stack Exchange의 PPCG 등 온라인과 오프라인 대회도 개최된다.

2. 역사

프로그램 길이를 최대한 줄이려는 시도는 오래전부터 있었다. 예를 들어, 레그네센트랄렌의 GIER 컴퓨터에 대한 1962년 코딩 매뉴얼은 "가능한 가장 적은 수의 명령어로 코딩하는 것은 시간이 많이 걸리는 스포츠"라고 언급하며 실용적인 프로그래밍에는 권장하지 않는다고 밝히고 있다.[5]

주어진 출력을 생성하는 가장 짧은 프로그램 길이에 대한 이론적 배경은 1963년 안드레이 콜모고로프콜모고로프 복잡도 연구에서 찾을 수 있다. 그러나 코드 골프는 단순히 정해진 출력만을 목표로 하는 콜모고로프 복잡도 개념보다 더 넓은 의미를 가지는데, 특정 입출력 변환을 수행하도록 요구하는 경우가 많기 때문이다.

"코드 골프"라는 용어 자체는 1999년 펄 커뮤니티에서 처음 사용된 것으로 보이며,[3][28][8] 이후 RSA 암호화 프로그램을 펄로 매우 짧게 작성하는 것이 알려지면서 대중화되었다.[4][29][9] 하지만 이와 유사하게 프로그램 길이를 줄이려는 비공식적인 경쟁은 그 이전부터 초기 APL 해커들 사이에서 인기가 있었던 것으로 알려져 있다. 오늘날 코드 골프라는 용어는 다양한 프로그래밍 언어에 적용되고 있으며, 심지어 코드 골프만을 위한 전용 프로그래밍 언어가 만들어지기도 했다.

3. 용어

"코드 골프"라는 용어는 골프에서 유래했다. 골프 선수들이 가장 적은 타수로 경기를 끝내려 하는 것처럼, 코드 골프 참가자들은 가능한 가장 짧은 코드를 작성하는 것을 목표로 한다. 이는 일반적인 스포츠나 게임에서 높은 점수를 추구하는 것과 대비되는 특징이다. 즉, 골프 선수들이 클럽 스트로크 수를 최소화하듯, 코드 골퍼들은 프로그램 작성에 필요한 키 스트로크나 문자 수를 줄이기 위해 노력한다.

4. 기법


  • 주석을 제거한다.
  • 공백을 생략한다.
  • 변수 선언을 생략한다.
  • 함수를 가능한 사용하지 않도록 한다.

5. 전용 골프 언어

코드 골프의 인기는 이를 위해 특별히 설계된 여러 프로그래밍 언어의 개발로 이어졌다. 이러한 언어들은 코드 길이를 가능한 한 줄이는 것, 즉 간결성을 최우선 목표로 삼는다.[4] 프로그램 크기를 극단적으로 최적화하려는 시도는 오래전부터 있었지만,[5] 펄과 같은 언어에서 '코드 골프'라는 용어가 사용되면서[3] 더욱 활발해졌고, 전용 언어의 탄생을 촉발했다.

대표적인 전용 골프 언어로는 GolfScript, Flogscript, Stuck, Vyxal 등이 있다. 이들은 아이디어를 매우 짧은 코드로 표현할 수 있는 구조를 제공하며, 대부분 튜링 완전한 언어이다. 하지만 극단적인 간결성을 추구하는 과정에서 사람이 코드를 읽고 이해하기 어려운 가독성 문제가 발생한다. 이 때문에 실제 프로그래밍 환경에서는 거의 사용되지 않으며, 종종 난해한 프로그래밍 언어의 일종으로 여겨지기도 한다.

코드 골프 관련 웹사이트에서는 사용자들이 직접 만든 새로운 골프 언어들이 계속 등장하고 있다. 05AB1E, Husk, Pyth, CJam, Jelly 등도 널리 사용되는 골프 언어들이다.[13] 드물게는 바이너리 람다 계산처럼 다른 목적으로 설계된 언어가 코드 골프에 제한적으로 활용되기도 한다.

다음은 원주율의 첫 1000자리를 출력하는 GolfScript 코드의 예시이다.[6]



;''

6666,-2%{2+.2/@*\/10.3??2*+}*

`1000<~\;


6. 코드 골프 대회

일반적인 프로그래밍 사이트 등에서 볼 수 있는 코드 골프 문제에서는, 구현할 프로그래밍 언어를 특정하지 않는 경우도 있다. 하지만, 예를 들어 특정 언어 기능의 사용을 제한하는 등, 출제자가 문제의 형식을 한정할 수도 있다. 이러한 "언어를 특정하지 않는" 문제가 만들어짐으로써, 코드 골프에 특화된 프로그래밍 언어의 파생 설계로 이어지기도 했다. 대표적인 예시로는 REBOL의 파생 언어인 REBMU[14]가 있다. 온라인상의 콘테스트에서도, 실제 오프라인에서 열리는 콘테스트에서도 시간 제한이 주어지는 경우가 있다.

다양한 프로그래밍 언어를 대상으로 하는 여러 코드 골프 대회가 온라인 및 오프라인으로 개최되고 있다. 주요 대회는 다음과 같다.

대회 이름방식주요 언어상태
Anarchy Golf[15]온라인다수의 주요 프로그래밍 언어, 일부 난해한 프로그래밍 언어 포함[16]실시 중
JAGC[17]온라인Perl, Python, Erlang, Ruby, Haskell, Bash, PHP[18]실시 중
SPOJ Shortening codes[19]온라인다수의 주요 프로그래밍 언어[20]실시 중
Stack Exchange PPCG (Programming Puzzles & Code Golf)[21]온라인지정된 여러 프로그래밍 언어. 다른 형식의 프로그래밍 콘테스트도 함께 진행됨.실시 중
4clojure.com[22]온라인Clojure[23]실시 중
Kona code golf[24]온라인K실시 중
phpGolf[25]온라인PHP실시 중
CodeGolf[26]온라인Perl, PHP, Ruby, Python실시 중
VimGolf[27]온라인Vim 스크립트실시 중
Perl Golf Apocalypse오프라인 (Perl Conference 4.0, 캘리포니아주 몬터레이)Perl2000년 7월 (과거)


참조

[1] 웹사이트 About code-golf https://codegolf.sta[...] 2021-12-21
[2] 웹사이트 Introduction to Code-golf {{!}} ASSIST Software Romania https://assist-softw[...] 2023-03-23
[3] 뉴스그룹 Re: Incrementing a value in a slice https://groups.googl[...] 1999-05-28
[4] 웹사이트 RSA in 5 lines of perl http://www.cypherspa[...] 2011-01-10
[5] 서적 Lærebog i Kodning for GIER http://datamuseum.dk[...] Regnecentralen 2020-05-16
[6] 웹사이트 GolfScript Examples http://www.golfscrip[...] 2023-03-23
[7] 웹사이트 プログラマ向けコードパズルサイト「コードダンジョン」公開 https://news.mynavi.[...] マイナビニュース 2015-09-16
[8] 뉴스그룹 Re: Incrementing a value in a slice https://groups.googl[...] 1999-05-28
[9] 웹사이트 RSA in 5 lines of perl http://www.cypherspa[...] 2011-01-10
[10] 웹사이트 Wik Wiki A Wiki in 1287 characters of PHP http://c2.com/cgi/wi[...] 2015-12-02
[11] 문서 Spartan Programming http://ssdl-wiki.cs.[...]
[12] 문서 Spartan Programming http://blog.codingho[...] Coding Horror 2008-07-08
[13] 웹사이트 List of dedicated golfing languages on the esowiki https://esolangs.org[...] 2015-12-02
[14] Github GitHub - hostilefork/rebmu: Microscopic Rebol Dialect ("mooshed") for Code Golf https://github.com/h[...]
[15] 문서 anarchy golf http://golf.shinh.or[...]
[16] 웹사이트 Anarchy Golf http://golf.shinh.or[...] 2015-12-02
[17] 문서 JAGC http://jagc.org
[18] 웹사이트 Just Another Golf Coding http://jagc.org 2015-12-02
[19] 문서 Shortening codes http://www.spoj.pl/S[...]
[20] 웹사이트 Shortening codes http://www.spoj.pl/S[...] 2015-12-02
[21] 문서 Code Golf Stack Exchange https://codegolf.sta[...]
[22] 문서 4clojure.com http://www.4clojure.[...]
[23] 웹사이트 4clojure League http://www.4clojure.[...] 2011-07-24
[24] Github Project Euler Code Golf · kevinlawler/kona Wiki · GitHub https://github.com/k[...]
[25] 문서 phpGolf http://phpgolf.org
[26] 문서 CodeGolf http://codegolf.com
[27] 문서 VimGolf - real Vim ninjas count every keystroke! https://www.vimgolf.[...]
[28] 뉴스그룹 Re: Incrementing a value in a slice https://groups.googl[...] 1999-05-28
[29] 웹인용 RSA in 5 lines of perl http://www.cypherspa[...] 2011-01-10



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com