コードパズルに挑戦して⁠論理的思考を養おう!

本書は、⁠コードゴルフ」「アルゴリズム」で、プログラミングの考え方や面白さを体験していく書籍です。

「コードゴルフ」とは、ソースコードの文字数を可能な限り減らすという、一種のパズルゲーム。そして、⁠アルゴリズム」は、目的を達成するための一定の処理手順のことをさします。

これらの問題をJavaScriptを使って解いていくことで、腕試しにも、思考能力の養成にも役立つでしょう。そして、問題に付属するていねいな解説には、読むだけでも役に立つコード記述のテクニックが多数紹介されています。

エンジニアのスキル評価サイトCodeIQの協力のもと、著者の柳井政和氏がサイト上で出題した問題を中心に、新規の問題を多数収録しています。

ここでは、例としてひとつ問題を掲載しますので、詰め将棋を解くような気持ちで挑戦してみてください。

コードゴルフ問題

アスキーアートで円を描こう

以下は、アスキーアートで円を描く簡単なプログラムです。このコードと同じ文字列を返す処理を170文字以下で考えてみましょう。

//= 元のコード
function originalCode() {
        // 変数の初期化
        var res = "";
        var w = 80;
        var h = 40;
        var sz = 30;

        // 処理
        for (var y = 0; y < h; y ++) {
                for (var x = 0; x < w; x ++) {
                        var dstnc = Math.sqrt(
                                  Math.pow(w / 2 - x, 2)
                                + Math.pow((h / 2 - y) * 2, 2)
                        );
                        if (dstnc < sz) {
                                res += "*";
                        } else {
                                res += "-";
                        }
                }
                res += "\n"
        }

        // 結果を戻して終了
        return res;
}
ヒント

JavaScriptの言語仕様に沿ったテクニックは、

  • コメントを削除する
  • タブ文字を削除する
  • 不要なスペースを削除する
  • 変数名は1文字にする
  • [] を使って配列生成する
  • 条件演算子を使用して処理を短縮する

などが連想できると思います。これらを駆使し、よ~く考えてみてください。

(答えはひとつではありません。解答例は本書1-1を参照ください)

いかがですか? コード圧縮のイメージは湧いてきましたか?

「美しいコードや、アルゴリズムを見た時の興奮は、プログラマには共通でも、それ以外の人にはまったく理解できないものです。そういった面白さを、コードゴルフや、アルゴリズムの問題に紛れ込ませて、出題を重ねてきました。その楽しさのエッセンスを、この本に詰め込みました。⁠

「はじめに」より

――とあるように、本書には、プログラミングをはじめたばかりの人でも解くことができる初級問題から、腕に覚えアリの上級プログラマでも挑戦できる問題が数々収録されています。

美しいコードやリーダブルコードが注目されている昨今、その取り組みへの第一歩を踏み出すべく、プログラミングの仕様や構造をいま一度理解し、あたらしい刺激を受けてみませんか?

なお、本書では、Webブラウザで動く、JavaScript製の「プレイグラウンド」を用意していますので、簡単にコードが動くかどうかの判定ができるようになっています。