解答例
興味のある人が多いと思いますので、各文字数の典型的なコードを掲載します。最後の一つ以外は、サンプルとして、私が順に文字を削って作成したものです。
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
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
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
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
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
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
r=""
for(y=-20;y<20;y++){for(x=-40;x<40;x++){r+=x*x+y*y*4<900?"*":"-"}r+="\n"}
return r
r="" for(y=-21;++y<20;r+="\n")for(x=-41;++x<40;)r+=x*x+y*y*4<900?"*":"-" return r
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」の問題にぜひ挑戦してください。
参考資料
- CodeIQ ITエンジニアのための実務スキル評価サービス
- blog.code.iq│CodeIQ
- コードゴルフ:最短コードを書く!(受付期間:2012年11月10日~12月10日)
- サンタのためのコードゴルフ(受付期間:2012年12月6日~12月25日)
- コードゴルフ:迷路(受付期間:2012年12月27日~2013年1月24日)
- クロノス・クラウン

