編程哥爾夫英文Code golf)係一種休閒嘅編程比賽模式,參賽者要用最短嘅程式碼去完成題目[1]。有時比賽嘅名會加埋個程式語言名落去,即係話只限於用呢一種語言,例如Perl golf就係淨係用Perl嘅編程哥爾夫。

歷史

編輯

揀定一種程式語言嘅話,畀一個想要嘅輸出,能夠做到呢個輸出嘅最短程式就係呢個輸出嘅Kolmogorov複雜度,源於1963年Andrey Kolmogorov對佢嘅數學研究。不過,編程哥爾夫係進一步嘅推廣,因為佢唔單止要求一個固定嘅輸出,可以有幾組嘅輸入—輸出,並用文字向參賽者描述題目嘅要求。

「編程哥爾夫」呢個名第一次出現係同Perl語言一齊[2],之後演變成用Perl嚟寫一個程式嚟做RSA加密[3],變得更加流行,但係其實喺早期嘅APL程式員之間已經有類似嘅玩法。呢種為咗縮短程式碼無所不用其極嘅玩法嘅難度一早已經被人認知,例如一份1962年Regnecentralen GIER電腦嘅編程手冊就話:「用最短嘅程式碼嚟寫程式係一種嘥時間嘅運動」並建議實際寫程式嗰陣唔好咁做[4]。今時今日嘅編程哥爾夫已經唔在限制於用Perl語言,甚至推動咗一啲專門用嚟玩哥爾夫嘅語言(golfing languages)。

詞源

編輯

編程哥爾夫呢個名係嚟自哥爾夫球呢種運動,因為同大部份嘅運動或者遊戲計分方法相反,哥爾夫球係愈低份愈好,編程哥爾夫都一樣,程式碼愈短愈好。

哥爾夫語言

編輯

有好多種程式語言係專登為咗玩編程哥爾夫而創造出嚟嘅,例如GolfScriptFlogscriptVyxal等等,佢哋係圖靈完整嘅語言,而且有一啲特別嘅指令可以好方便咁縮短程式碼,不過代價就係大大咁犧牲咗可讀性(readability),所以好多都被歸類到esoteric嘅程式語言,唔適合一般產品開發用。不過,有啲設計嚟做一般用途嘅程式語言都好適合用嚟玩哥爾夫。

呢度係一段可以印圓周率頭1000個位出嚟嘅GolfScript碼[5]

;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`1000<~\;

佢會「3141592653…」咁樣印1000個位出嚟。

編程哥爾夫嘅網站通常都會包括幾種哥爾夫語言畀啲參賽者用,除咗上面講過嘅幾種之外,仲有05AB1EHuskPythCJamJelly等等。

編程哥爾夫嘅種類

編輯

有啲編程哥爾夫無任何嘅限制,呢啲題目贏嘅好多時都會係啲專門嘅哥爾夫語言,亦都推動咗好多專明嘅語言誕生。另外,好多題目都有時間限制(time limit)。

睇埋

編輯

參考

編輯
  1. Code Golf Stack Exchange. About code-golf. Retrieved 2021-12-21.
  2. Greg Bacon (1999-05-28). "Re: Incrementing a value in a slice". 新聞組comp.lang.perl.misc. Usenet: 7imnti$mjh$1@info2.uah.edu. 喺2011-07-12搵到.
  3. Back, Adam. "RSA in 5 lines of perl". 喺2011-01-10搵到.
  4. Andersen, Christian; Gram, Christian (1962). Lærebog i Kodning for GIER (PDF).第1卷 (第3版). Copenhagen: Regnecentralen. p. 104. 喺2020-05-16搵到.
  5. "GolfScript Examples". www.golfscript.com. 喺2022-01-30搵到.

出面網頁

編輯