SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

ITエンジニアの実務スキルを見抜ける「CodeIQ」で、コードゴルフ問題を出してみた

  • X ポスト
  • このエントリーをはてなブックマークに追加

解答例

 興味のある人が多いと思いますので、各文字数の典型的なコードを掲載します。最後の一つ以外は、サンプルとして、私が順に文字を削って作成したものです。

コードゴルフの例(177文字)スペースとタブを削り、変数名を短くした程度
var r="",w=80,h=40,s=30;
for(var y=0;y<h;y++){
for(var x=0;x<w;x++){
var d=Math.sqrt(Math.pow(w/2-x,2)+Math.pow((h/2-y)*2,2));
if(d<s){r+="*";}else{r+="-";}
}
r+="\n"
}
return r
コードゴルフの例(147文字)変数の値をコード中に埋め込み、「var」を削除
r="";
for(y=0;y<40;y++){
for(x=0;x<80;x++){
d=Math.sqrt(Math.pow(40-x,2)+Math.pow((20-y)*2,2));
if(d<30){r+="*";}else{r+="-";}
}
r+="\n"
}
return r
コードゴルフの例(128文字)条件演算子を使用して処理を短縮
r="";
for(y=0;y<40;y++){
for(x=0;x<80;x++){
r+=Math.sqrt(Math.pow(40-x,2)+Math.pow((20-y)*2,2))<30?"*":"-";
}
r+="\n"
}
return r
コードゴルフの例(126文字)「Math」の罠に迷い込む
r="",m=Math;
for(y=0;y<40;y++){
for(x=0;x<80;x++){
r+=m.sqrt(m.pow(40-x,2)+m.pow((20-y)*2,2))<30?"*":"-";
}
r+="\n"
}
return r
コードゴルフの例(118文字)「Math.sqrt」が罠であることに気づく
r="";
for(y=0;y<40;y++){
for(x=0;x<80;x++){
r+=Math.pow(40-x,2)+Math.pow((20-y)*2,2)<900?"*":"-";
}
r+="\n"
}
return r
コードゴルフの例(99文字)「Math」がすべて罠だと気づく
r=""
for(y=0;y<40;y++){for(x=0;x<80;x++){a=40-x;b=(20-y)*2;r+=a*a+b*b<900?"*":"-"}r+="\n"}
return r
コードゴルフの例(87文字)グラフのX軸Y軸の中心を中央に移動して文字数を削減
r=""
for(y=-20;y<20;y++){for(x=-40;x<40;x++){r+=x*x+y*y*4<900?"*":"-"}r+="\n"}
return r
コードゴルフの例(81文字)JavaScriptの仕様上可能なところを詰める
r=""
for(y=-21;++y<20;r+="\n")for(x=-41;++x<40;)r+=x*x+y*y*4<900?"*":"-"
return r
コードゴルフの例(75文字)1位の1人 tompng 様のコード
for(s='',x=y=n=40;y+n;s+='-*\n'[x+n?x*x--+y*y<900|0:(x=n,y-=2,2)]);return s

 81文字までが普通の手法での文字の削減になります。それ以上は、大きな発想の転換が必要になります。そのため、解答者の点数分布グラフでも、数度にわたって投稿した人達の多くが81文字辺りで行き詰っていました。

 80文字以下のコードでは、「文字列に添え字を付けることで、その位置の文字を取得できる」仕様を利用していました。1位の例として掲載させていただいた「tompng」様のコードは、募集期間終了後に、githubに解答が上げられていましたので、転載させていただきました。

まとめ

 というわけで「CodeIQ」という、「ITエンジニアのための実務スキル評価サービス」を利用して、問題を出し、そのフィードバックを行いました。そして1か月にわたり、いろいろな方のコードに触れました。いつもとは違う、刺激的かつ有意義な時間を送ることができました。

 自分の能力を試してみたい方も、求めているITエンジニアを探し出したい会社や技術者も、「CodeIQ」を利用してみると面白いと思います。

 特に解答者の方は、最前線で活躍しているエンジニアの方々からのフィードバックを受けられるので、楽しいだけでなく勉強になると思います。答える側の私も、たいへん勉強になりました。

 みなさん興味があれば、この「CodeIQ」の問題にぜひ挑戦してください。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6926 2013/01/08 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング