エンジニアのスキルを試すコードパズル ─この問題,あなたは解けますか?

第10回 柳井政和からの問題(第3回)解説編

この記事を読むのに必要な時間:およそ 4 分

JavaScriptで文字数を削減する11のポイント

じつは今回のコードゴルフ問題,ただ文字数を削るだけでは駄目で,上位に食い込むには自分でアルゴリズムを工夫しないといけないように設計されていました。

それはどこでしょうか?

その答えはメインディッシュとして後に置いておき,まずは前菜として,JavaScriptの文字数を削る手法をいくつか紹介します。今回順位が振るわなかった方々の多くが,JavaScriptの仕様レベルで文字数を削減できる部分を取りこぼしていたためです。

文字数を削減すると,難読化を招き,可読性が低下し,仕事においてはデメリットにしかなりません。しかし,コードゴルフではこれらの手法は有効です。パズルを解くためのツールのようなものです。

ポイントは以下の11個です。

その1 動作に影響しない文字を削る

具体的には以下がポイントです。

  • 変数宣言のvarを削る(ただし,再帰関数内の変数は変数宣言が必要なので注意)
  • 無駄なスペースやタブ文字,改行や末尾のセミコロンは削除する
  • 変数名は1文字にする
var res = "";

 ↓

r=""

その2 配列は[]で初期化し,要素数は指定しない

JavaScriptは,配列を[]で初期化できます。また,配列の要素数を指定しなくても自動でサイズを拡張してくれるので,初期化する時の要素数の指定は省略できます。

maze = new Array(w * h);

 ↓

m=[]

その3 for文の棘括弧({})を削り,処理はカンマで連結する

for (~) {
        処理1
        処理2
}

      ↓

for(~)処理1,処理2

その4 if文を条件演算子にする

if (maze[x + w * y] == 1) {
        res += "■";
} else {
        res += " ";
}

   ↓

res+=maze[x+w*y]==1?"■":" "

その5 文字列内の特定の1文字は添え字で取得する

res+=maze[x+w*y]==1?"■":" "

  ↓

res+=" ■"[maze[x+w*y]]

その6 booleanは数値演算する(0,1になる)

console.log(0+true)     // 1と出力

その7 |0で整数を表現する

console.log(2.345|0)    // 2と出力

その8 0をfalseの代わりに,0以外をtrueの代わりに使う

for(i=10;i--;)console.log(i);   // 9~0が出力

その9 空文字を数値演算で0にする

i="";console.log(++i);          // 1と出力
i="";console.log(i++);          // 0と出力
i="";console.log(i);            // 空文字が出力

その10 要素数1の配列は中身をそのまま使う

i=[100];console.log(++i);       // 101と出力
i=[100];console.log(i++);       // 100と出力
i=[100];console.log(i);         // [100]が出力
i=[];console.log(++i);          // 1と出力
i=[];console.log(i++);          // 0と出力
i=[];console.log(i);            // []が出力

その11 変数を初期化する場所を変える

// 初期化
i=[j=9,k=l=((m=8)/2)]

// 出力
console.log("i=" + i);  // i=9,4と出力
console.log("j=" + j);  // j=9と出力
console.log("k=" + k);  // k=4と出力
console.log("l=" + l);  // l=4と出力
console.log("m=" + m);  // m=8と出力

著者プロフィール

柳井政和(やないまさかず)

横浜で物を作る会社『クロノス・クラウン合同会社』代表社員。2002年に起業して,オンラインソフト,携帯ゲーム,Webアプリの開発,IT情報の記事,マンガの執筆,書籍の作成などを中心に活動しています。いろいろなものを企画して作るのがお仕事です。著書に『マンガでわかるJavaScript』(2010年10月,秀和システム)他。

Webサイトは『クロノス・クラウン』
URL:http://crocro.com/

コメント

コメントの記入