2013年06月04日の日記です


コードゴルフの起源  2013-06-04 22:51:20  コンピュータ

起源、と言ったところで、そもそも「コードゴルフ」なんて言葉を初めて聞く人も多いだろう。

僕もそうだった。


メールアドレス暗号化を作ったのは、もう2年近く前。

それから1年近くかけてJavascriptのコードを、1バイトでも小さくする方法を考えた。

今でも時々、もっと短くならないかと見直し、知らないテクニックがないかとググってみる。


で、とあるページでJavascriptの短縮化テクニックをまとめてあり、そこに「ゴルファーな人は知ってそう」と書かれていた。


ここでは「コードゴルフ」の単語は出ていなかったのだが、言おうとしている意味はすぐに分かった。

そんな懐かしい言い回しを覚えている人がいたか…と思ったのだが、これは僕の早とちりで、1バイトでも短縮すべく競う遊びを「コードゴルフ」と呼ぶのだと知った。




Wikipedia の日本語ページはほとんど情報がない。でも、英語ページにはそれなりの解説がある。

それによれば、コードゴルフ、という名称は、1999年に perl 向けに使われたのが最初だそうだ。


しかし、この「1バイトでも縮める」という遊びをゴルフと言うのには、少し違和感を感じる。


僕は本物のゴルフはやったことがないが、ゲーム好きなのでゴルフのルールを取り入れた遊び…パターゴルフだとか、フライングディスクゴルフだとか、レーザーガンゴルフだとか…そういう遊びはやったことがある。

ゴルフルールを取り入れた遊びの共通点は、3つ。


1) 何かを達成するまでの「打数」を競う。少ないほど良い。

2) 1つの「ホール」での標準打数(パー)が決まっていて、複数ホールの合計で競う。

3) 通常、パーは3~5。そのため1点の重みが非常に重い。


コードゴルフには、パーは存在しないし、1点の重みはゴルフほど重くない。

問題や言語にもよるが、4バイトでなにか実用的な処理ができる、なんてことはあり得ないだろう。




さて、最初に「ゴルファー」という単語に対して「懐かしい」と書いた。


コードゴルフという言葉がはじめてつかわれた、とされる1999年より以前…1980年代中盤に、すでにプログラムの短縮競争を「ゴルフ」と呼んでいたのを知っているためだ。


正確な記憶ではないのだが、1984年ごろではないかと思う。

NECのパソコン向け専門誌、Oh!PC の連載(読者投稿コーナー)だったはず。

(僕はOh!Xは買っていたがOh!PCは買っていなかったので、記憶違いがあったら申し訳ない)


#翌日訂正:Oh!PC ではなく、PCマガジンだった模様。

 こちらのサイトの掲示板に情報が…って、これ15年前の自分の書き込みだよ (^^;


#2014.10.28 追記

 10年前の2chで話題に上ってた

 これ、当時の紙面に載っていたルールの抜粋だ。



毎月お題が出て、BASIC で「出来るだけ短く」書く競争をするコーナーだった。

「Proゴルフ」という連載名だったと記憶している。

Pro は、Program の意味だ。もちろん、職業ゴルフの意味の「プロゴルフ」と掛けているわけだが。



ここで「短さ」の定義は、行数。1行にどれだけ詰め込んでもよいが、今の言語と違って行には重い意味があったため、詰め込みに限度があった。

(分岐を使うには「行番号に」飛ぶしかないため、処理上どうしても改行が必要な場合がある)


そもそも、詰め込もうにも1行の文字数は仕様上の制限があって、PC-8801の場合で255文字、PC-6001だと71文字が限度だった。


機種によってハンデがあるため、パーは機種ごとに設定されていた。

しかし、基本的にはパーは3~5程度。本当のゴルフと同じような感じだった。


出題内容はよく覚えていないが、「任意のメモリアドレスから入っているデータを文字列として画面いっぱいに表示し、キー操作によって自由に上下スクロールさせながら閲覧させる」という出題があったことは覚えている。


他の月の出題といくつか合わせると、エディタの基本が出来上がる、という説明がついていた。

最終目標がエディタだからこそ、1つ1つの機能は出来るだけ小さく作り、エディット可能なメモリを大きくとりたい、という出題意図だった。


パー4くらいのところを、2行まで縮めてきたのが数名、1人だけ1行で書いてきて出題者が驚いた、とかではなかったかと思う。(別の月の話だったかもしれないが、時々超絶技巧による「ホールインワン」が出た)



投稿者は常連が多く、1年間の合計行数で競っていたように思う。

ちゃんと、ホールを回っているのだ。ここでもちゃんと、ゴルフらしさを出している。




Wikipedia の英語版にあるように、短縮競争を「ゴルフ」と呼ぶのは1999年にNetNews のperlのコミュニティに登場し、なんの違和感もなく(その考えは面白い、というような賞賛もなく)周囲も受け入れている。


先に書いた Proゴルフは、BASICの「行」が非常に重い意味を持っていたから成立する遊びだった。

Apple // の頃も、「2行」で何ができるか、を競う遊びが流行っている


だとすると、アメリカでも BASIC の行数削減を「ゴルフ」に例える遊びはあったのではないだろうか?

Oh!PC のアイディア自体、オリジナルではなかったのかもしれない。


BASIC での行数短縮を「ゴルフ」と例えるのであればわかるのだが、perl のバイト数短縮を「ゴルフ」と呼ぶのは、どうも不自然に思えてならない。

まだ想像の域を出ておらず、裏付けも難しそうだが、コード短縮を「ゴルフ」と呼ぶのは、BASIC 時代に端を発しているのではないか、と考えている。



同じテーマの日記(最近の一覧)

コンピュータ

関連ページ

ベーマガ投稿【日記 15/03/27】

ベーマガ投稿【日記 15/03/27】

Scratch の舞台裏【日記 16/06/16】

別年同日の日記

03年 今年もまた

07年 結婚記念日

18年 三笠


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

0000

-- follow --




- Reverse Link -