CodeIQ Blog

自分の実力を知りたいITエンジニア向けの、実務スキル評価サービス「CodeIQ(コードアイキュー)」の公式ブログです。

「マラソンマッチ:効率的に敵を撃滅せよ」第4回戦2013年8月6日0時30分時点暫定ランキング発表~ランキングシャッフル発生です #javascript #MarathonMatch

CodeIQ中の人、millionsmileです。

第4回戦「マラソンマッチ:効率的に敵を撃滅せよ」の暫定ランキングです。2013年8月6日0時30分時点となります。

いやー、ランキングシャッフルが発生して、激しく入れ替わっています。

出題者の柳井さんの解説付きで暫定ランキングの発表です。
===================================================

● 順位

 2013年8月06日、0時30分時点の順位は、以下の通りになりました。


1位(↑前 3位/ 3位/ 7位)(2913点)hm001 様
2位(↑前 6位/ -位/ 4位)(2843点)mad_p 様
3位(↑前 10位/ -位/ -位)(2760点)alluser 様
4位(↓前 2位/ 1位/ 1位)(2661点)sapics 様
5位(↓前 1位/ 2位/ -位)(2596点)simbelmyn 様
6位(↑前 9位/ 7位/ 3位)(2501点)ayuzak 様
7位(↑前 時外/ -位/ -位)(2493点)promwing 様
8位(←前 8位/ 5位/ 5位)(2482点)takryo 様
9位(↓前 5位/ 4位/ -位)(2310点)simanman 様
10位(…初 -位/ -位/ -位)(2286点)由雲 様
11位(↓前 4位/ 8位/ 2位)(2183点)hellowd 様
12位(↓前 7位/ 6位/ 8位)(2001点)とさ 様
13位(↓前 10位/ 9位/ -位)(1751点)Azicore 様
14位(↓前 11位/10位/ 6位)(1711点)ciel 様

 今回は順位変動が激しいです。おそらく理由は、敵の配置が大きく変わったためだと思います。そのために、前3回とは違うやり方で高得点が取れるようになったのだと推測しています。

 そう思う理由は、1位の hm001 様のコードを見た感想です。環境が変わると、最適な手法が変わるのだろうなあと感じました。というわけで、おめでとうございます、hm001 様!

 今回は、徐々に参加者が慣れてきたのか、順位を上げている方が多かったです。挑戦、順位発表のサイクルを経験することで、改良の勘所が分かってきたのかもしれないと感じました。

 さて、壊れて修理に出していたパソコンが、先ほど戻って来ました。まだセットアップしていないので、きちんと使えるか分かりませんが、使えれば再びCPUパワーが増えます。増えるといいなあ…。


● コードの複雑さ

 まずは、前回、前々回と掲載した「時間」と「mifiy後の文字数」を掲載します。

順位 ニックネーム 得点 時間 文字数
1 hm001 2913 39.7 1212
2 mad_p 2843 33.8 8931
3 alluser 2760 56.3 1057
4 sapics 2661 46.1 4610
5 simbelmyn 2596 24 1791
6 ayuzak 2501 8.8 799
7 promwing 2493 46.9 1853
8 takryo 2482 9.2 2550
9 simanman 2310 28.7 1401
10 由雲 2286 7.4 1052
11 hellowd 2183 21.8 1350
12 とさ 2001 19 1148
13 Azicore 1751 8.6 752
14 ciel 1711 11.7 1147

 さて今回は、これまでのデータとは別に、異なる数字から、コードの複雑さを示してみます。

 ソースコードは、その目的からいくつかの部品に分けることが可能です。今回は、「条件分岐」「ループ」「関数」の3つの数字を示して、各参加者のコードの複雑さを示してみます。

 まず「条件分岐」ですが、「if、&&、||、?、try、case」の文字をカウントしました。

 次にループは「for、while」の2つの予約語を集計しました。最後に関数は、単純に「function」の数を示しています。

個別

順位 ニックネーム if && || ? try case for while function
1 hm001 17 0 0 0 0 0 11 0 0
2 mad_p 77 13 10 13 0 0 37 2 48
3 alluser 5 13 1 4 0 0 9 0 0
4 sapics 49 6 4 6 0 0 34 0 12
5 simbelmyn 15 4 0 1 0 7 17 0 0
6 ayuzak 6 1 0 0 0 0 8 0 5
7 promwing 28 4 0 0 0 0 7 0 0
8 takryo 21 5 1 0 0 0 8 2 5
9 simanman 17 1 0 0 0 0 12 2 3
10 由雲 15 5 0 0 0 0 3 0 2
11 hellowd 15 2 0 2 0 0 5 0 1
12 とさ 10 1 0 0 0 0 6 1 0
13 Azicore 11 1 0 0 0 0 4 0 0
14 ciel 13 0 0 0 0 0 4 0 0

集計

順位 ニックネーム 得点 条件分岐 ループ 関数 3要素の合計
1 hm001 2913 17 11 0 28
2 mad_p 2843 113 39 48 200
3 alluser 2760 23 9 0 32
4 sapics 2661 65 34 12 111
5 simbelmyn 2596 27 17 0 44
6 ayuzak 2501 7 8 5 20
7 promwing 2493 32 7 0 39
8 takryo 2482 27 10 5 42
9 simanman 2310 18 14 3 35
10 由雲 2286 20 3 2 25
11 hellowd 2183 19 5 1 25
12 とさ 2001 11 7 0 18
13 Azicore 1751 12 4 0 16
14 ciel 1711 13 4 0 17

f:id:codeiq:20130807173717p:plain

 この数字から分かることは、1位の hm001 様のコードと、3位の alluser 様のコードがかなりシンプルだということです。つまり、以外とシンプルな方法で高得点が狙えるということです。

 あとは、当然と言えば当然ですが、得点が増えるにつれ、これらの3つの要素が増加傾向にあることです。

 この数字から、「自分はもう少し細かく条件分岐をした方がよさそうだ」「自分より順位が上の人のアプローチは、どうやらああいった方向性らしい」などの情報が推測できるのではないでしょうか。

 最後に、もう1つ参考になりそうな指標を掲載します。「random」をどれぐらい使っているかです。各参加者の考え方の違いが推測できると思います。上位と下位で、割ときれいに分かれていると思います。

順位 ニックネーム 得点 random
1 hm001 2913 0
2 mad_p 2843 2
3 alluser 2760 0
4 sapics 2661 0
5 simbelmyn 2596 0
6 ayuzak 2501 2
7 promwing 2493 0
8 takryo 2482 18
9 simanman 2310 2
10 由雲 2286 2
11 hellowd 2183 0
12 とさ 2001 2
13 Azicore 1751 2
14 ciel 1711 2


● 第5戦について

 問題は、パラメータを変えて、第4戦に突入します。

 新しいコードを送っていただいた場合は、最新のコードで順位用の判定を行います。また、そのままの場合は、以前のコードを使って、順位の判定を行います。

 というわけで、同じアルゴリズムでも、問題の環境が変わったために、順位が変動する可能性があります。

 さて、第5戦は、また新しいパラメータが増えます。新しい敵の移動の仕方が登場します。そのため、これまでと敵の見た目が大きく変わっていると思います。

f:id:codeiq:20130807173853p:plain

 パラメータがどう変わっているかは、問題を見て確かめてください。

 どこが変わっているか、それがアルゴリズムにどう影響するか。そういったことを踏まえて、他人よりも効率よく敵を倒せるプログラムを投稿してください。


===================================================

所変われば見方も変わるといいますが、そんな感じのランキングシャッフルでした。
まだまだマラソンのゴールは先ですので、ぜひぜひ挑戦してみてください。

https://codeiq.jp/ace/yanai_masakazu/q378
f:id:codeiq:20130807174232j:plain

でわ~、よい夏休みを。

エンジニアのための新しい転職活動!CodeIQのウチに来ない?の特集ページを見る