[목차] == 개요 == Code golf 또는 golf scripting. 가장 짧은 코드로 주어진 [[알고리즘]]을 구현하는 프로그래밍 방식. 골프 스크립팅 혹은 숏코딩으로도 불리며, 1999년 [[Perl]]에서 이 단어가 [[https://groups.google.com/group/comp.lang.perl.misc/msg/7b97c434492c8d20|탄생]]했다. 공을 최소한 적게 쳐서 골을 넣어야 하는 골프와 비슷하다고 하여 그런 이름이 지어졌다고 한다. 최대한 코드를 단순화하는 것도 기본적으로 코드 골프와 같은 맥락이다. 가령 정수형 변수 하나를 선언하는 상황에서 {{{#!syntax cpp int value = 10; }}} 위와 같은 선언문을 {{{#!syntax cpp int v=10; }}} 이렇게 단순화하는 것. 이것을 변수 선언에 국한하지 않고 소스코드 전반에 걸쳐 극한으로 줄이고 줄여서 누가 더 짧고 메모리를 적게 쓰는지 경쟁하는 것이 코드 골프. 가독성이나[* 혹은 의도적으로 가독성을 낮추는 난독화도 해당] 데이터 절약 등의 특정 목적을 위해 일부 변수명이나 코드를 단순화하는 것은 흔하지만, 아예 소스코드 전반을 이런식으로 작성하는 것은 딱히 실용성이 없는데다 추후에 코드를 파악하는 것도 어려워 자충수가 될 수도 있다. 실제로 사용하는 경우는 거의 없고 사실상 재미를 위한 오락 내지 흑마법에 가깝다(...). ~~진짜로 팀에서 코드 골프하듯 구현하면 맞는다.~~ 다만 코딩을 공부하는 초심자 단계에서는 숏코딩을 해보는게 유효한 경험이 될 수 있다. 최대한 깔끔하고 간결하면서도 효율적인 코드를 작성하는 법을 공부하는 것은 [[최적화]] 능력의 기반이 된다. 언어에 따라서 이름이 다르게 불리기도 하며, Perl Golf 같은 경우가 대표적이다. 특히 [[Perl]]은 이 분야의 원조인 만큼 특히 규모가 큰 편이다. == 전용 언어 == 코드 골프를 위해 만들어진 언어도 많은데, [[http://www.golfscript.com/golfscript/|GolfScript]]나 FlogScript 같은 경우가 대표적이다. 최대한 코드 길이를 줄여야 하다 보니 [[난해한 프로그래밍 언어]]와도 어느 정도 통하는 편이고, 실제로 GolfScript는 공식 홈페이지에 난해한 프로그래밍 언어라고 명시해 두었다. 아래의 코드는 GolfScript로 소수점 아래 1000자리의 [[원주율]]을 출력한다(29 bytes). {{{#!syntax perl 6666,-2%{2+.2/@*\/10.3??2*+}* -> 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989 }}} ## 골프스크립트가 문법 강조가 지원되는 지 모르겠습니다만은, 지원하지 않더라도 삭제할 이유는 없으니 가급적 유지 바랍니다. [[https://www.acmicpc.net/problem/11023|입력 받은 수 N개의 합을 출력하는 문제]]의 경우, 다음과 같이 Golfscript 언어로 단 6 Byte만에 푸는 것이 가능하다. {{{#!syntax perl ~]{+}* }}} == 여담 == [[Baekjoon Online Judge]]에서는 각 문제의 모든 정답 코드를 바이트 크기 오름차순으로 정렬해주는 기능을 제공하여, 난이도가 낮은 문제들의 경우 치열한 코드 골프 경쟁이 이루어지는 것을 볼 수 있다. [[분류:프로그래밍]]