Code golf とは、与えられた仕様を満たす、できるだけ短いプログラムをつくることです。言語はなんでもよいのですが、今回はすごい Haskell を使いましょう。
プログラムを書いたファイルを Foo.hs としたとき、Unix ならば
% wc -c Foo.hs
25
%
のように、 wc -c を使うことで、ファイルが何バイトかを知ることができます。工程は、まず仕様を満たすプログラムを書いて、その次に同じことをする短いプログラムを考えます。そうでなくて、いきなり最短のコードを思いつくひとはすごい。
では、問題です:
- 標準入力に含まれる @ を数えなさい。つまり、標準入力から文字を読み取り、その文字列のなかにある @ の個数を標準出力に表示せよ。
サンプル入力:
ACTIVE
@iseebi
@yashigani
INACTIVE
@ikegami__
サンプル出力:
3
この問題は僕が実際に必要だったプログラミングから思いついたものです。このような処理は動的言語やエディタの機能で解くひともいますが、実は僕もそうだったのですが、改めて Haskell でやってみると縮んだので皆さんにも驚いていただきたかったのです。
code golf のテクニックは、実際のプログラミングでは以下の理由で推奨しません:
-
可読性が低くなりがち(空白とか削るから)
-
不必要な知識を活用しがちだから(f@main とか…)
しかし、知的なゲームとして楽しんだり、リファレンスを調べてみるなどの教育的な効果があると思います。
教科書の第 9 章後半に即した課題は他の人が出してくれると期待しているので、予想外の問題を出してみました。いかがなものでしょうか。
質問は Lingr で受け付けます。
Haskell golf については、@notogawa さんの秀逸な文章があります。今回の問題のヒントも含まれています。
http://d.hatena.ne.jp/notogawa/20101011/1286814280
ゴルフ場はこちらです:
推敲せずに文章を書いてしまったので、日本語がおかしくてごめんなさい。URL を固定するために、追記はコメントを通じて行います。