解答例
興味のある人が多いと思いますので、各文字数の典型的なコードを掲載します。最後の一つ以外は、サンプルとして、私が順に文字を削って作成したものです。
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日)
- クロノス・クラウン