interprism's blog

インタープリズム株式会社の開発者ブログです。

社内でプログラミングコンテストをやってみたら結構熱かった

こんにちは、hirano です。

社内でプログラミングコンテストをやってみた話です。

プログラミングコンテストのルール

  • あるお題に沿ったプログラムを作る
    • 言語はJava(社内で使えない人がいないのでこれになった)
    • お題等の詳細は以下。 github.com
  • 処理速度が速いのが勝ち
    • シングルコア
    • ヒープは100MBまで

どうやったのか

速度を競う関係上、エントリーしたらすぐに結果が見たいはずなので、 ソースファイルをアップロードしたら自動的にコンパイル&実行&計測&ランキング更新するサーバーを作った。

余談だが、このサーバーは社内のエンジニアがフルスクラッチで数時間で作ってくれたが、私には無理だったので助かったww

エントリー経過

名前 実行時間(ms) エントリー日
JS専門社員 6,980 2016/04/22 01:26:33
JS専門社員 6,895 2016/04/22 07:34:32
goto3 6,921 2016/04/22 21:46:20
goto3 6,935 2016/04/22 21:47:16
goto3 6,454 2016/04/22 21:49:11

これがほぼ初日。適当に実装すると4時間以上かかってしまうのだが、 いきなり7秒台で勝負がスタート。 それにしてもJS専門社員のエントリー時刻がおかしい気がする。

名前 実行時間(ms) エントリー日
SQL大好き役員 3,648 2016/04/23 01:10:46
goto3 5,195 2016/04/23 03:15:14
C#系社員 4,477 2016/04/23 16:34:59

翌日。2日目にして3秒台が現れる。 初日にエントリーした goto3 も5秒台まで縮めてくる。

名前 実行時間(ms) エントリー日
JS専門社員 6,078 2016/04/24 11:20:59
JS専門社員 5,214 2016/04/24 12:57:13
JS専門社員 5,239 2016/04/24 13:46:45
JS専門社員 4,359 2016/04/24 19:31:36
JS専門社員 4,197 2016/04/24 20:13:32

3日目。JS専門社員無双。エントリーの度にタイムを縮めてくる。

名前 実行時間(ms) エントリー日
SQL大好き役員 3,893 2016/04/25 02:49:50
SQL大好き役員 3,194 2016/04/25 03:42:43
超絶技巧社員 4,268 2016/04/25 13:39:10

4日目。SQL大好き役員が 3,648ms から 3,194ms まで記録を延ばす。 超絶技巧社員もいきなりで4秒台とレベルが高い。

ちなみに4/25は月曜日だったのだが SQL大好き役員は翌日ちゃんと出社できたのだろうか。

名前 実行時間(ms) エントリー日
JS専門社員 4,129 2016/04/26 00:36:12
JS専門社員 4,355 2016/04/26 00:43:45
JS専門社員 3,603 2016/04/26 00:47:37
勝利指向役員 1,478 2016/04/26 08:31:39
超絶技巧社員 4,068 2016/04/26 14:08:45
SQL大好き役員 12,886 2016/04/26 19:42:30
SQL大好き役員 3,286 2016/04/26 19:45:16
SQL大好き役員 2,316 2016/04/26 19:46:02
SQL大好き役員 2,202 2016/04/26 19:57:44
SQL大好き役員 1,765 2016/04/26 19:58:59
SQL大好き役員 2,197 2016/04/26 20:00:05
SQL大好き役員 1,890 2016/04/26 20:01:11
goto3 2,126 2016/04/26 22:50:58
goto3 2,036 2016/04/26 22:51:21
goto3 2,022 2016/04/26 22:52:21
goto3 1,822 2016/04/26 22:54:58
goto3 1,624 2016/04/26 22:56:17
goto3 2,911 2016/04/26 23:18:17
SQL大好き役員 1,478 2016/04/26 23:39:33

5日目。勝利指向役員がいきなり1秒台を叩き出す。 これで一気にトップ争いのレベルが上がる。

余談ですが、私はここでみんなすごいなーと完全にヤムチャ状態でした。

名前 実行時間(ms) エントリー日
ざわ系社員 7,732 2016/04/27 00:08:29
ざわ系社員 7,250 2016/04/27 00:09:07
ざわ系社員 7,589 2016/04/27 00:09:59
JS専門社員 3,695 2016/04/27 01:24:29
JS専門社員 4,026 2016/04/27 01:26:54
JS専門社員 4,013 2016/04/27 01:29:00
ヤムチャ系役員 7,764 2016/04/27 07:53:36
超絶技巧社員 3,276 2016/04/27 09:41:40
ラビット系社員 6,729 2016/04/28 11:53:47
ラビット系社員 5,990 2016/04/28 14:06:51
SQL大好き役員 1,460 2016/04/29 02:35:55
SQL大好き役員 1,419 2016/04/29 02:36:37
SQL大好き役員 1,750 2016/04/29 02:37:58
SQL大好き役員 1,860 2016/04/29 02:38:47

ゴールデンウィーク前の追い上げでSQL大好き役員が逆転(1,478 → 1,419) やはりエンジニアは夜行性なんだろうか。

名前 実行時間(ms) エントリー日
C#系社員 2,136 2016/05/01 23:34:19
C#系社員 2,144 2016/05/01 23:44:51
C#系社員 1,666 2016/05/02 02:50:21
SQL大好き役員 2,110 2016/05/03 01:53:41
SQL大好き役員 1,410 2016/05/03 01:54:36
SQL大好き役員 1,756 2016/05/03 02:18:03
SQL大好き役員 1,752 2016/05/03 02:21:45
SQL大好き役員 1,758 2016/05/03 02:33:53
SQL大好き役員 1,523 2016/05/03 02:40:05
SQL大好き役員 3,728 2016/05/04 10:29:06
SQL大好き役員 1,385 2016/05/04 10:29:45
SQL大好き役員 1,399 2016/05/06 12:44:39
SQL大好き役員 1,397 2016/05/06 12:52:18
SQL大好き役員 1,335 2016/05/06 15:02:06
SQL大好き役員 1,488 2016/05/06 15:55:09
SQL大好き役員 1,442 2016/05/06 15:55:55
SQL大好き役員 1,388 2016/05/06 17:07:05
SQL大好き役員 1,317 2016/05/06 17:35:37
勝利指向役員 1,520 2016/05/09 02:41:51
勝利指向役員 1,474 2016/05/09 08:06:09
勝利指向役員 1,495 2016/05/09 08:28:43
勝利指向役員 1,398 2016/05/09 08:40:37
勝利指向役員 1,384 2016/05/09 08:47:38
SQL大好き役員 1,346 2016/05/09 10:58:40
勝利指向役員 1,318 2016/05/09 19:27:39
勝利指向役員 1,345 2016/05/09 19:44:22
勝利指向役員 1,346 2016/05/09 19:51:42
勝利指向役員 1,298 2016/05/09 19:52:45
SQL大好き役員 1,174 2016/05/09 22:08:30
SQL大好き役員 1,126 2016/05/09 22:22:58
SQL大好き役員 1,082 2016/05/09 22:53:26
SQL大好き役員 1,067 2016/05/09 22:58:06
SQL大好き役員 1,057 2016/05/09 23:27:24

ゴールデンウィークなのに勝利指向役員SQL大好き役員のエントリーが相次ぐ。 休む気ゼロなのか、余暇がプログラミングなのか。

名前 実行時間(ms) エントリー日
SQL大好き役員 1,001 2016/05/10 00:16:46
SQL大好き役員 977 2016/05/10 00:17:40
勝利指向役員 1,232 2016/05/10 08:48:22
勝利指向役員 1,172 2016/05/10 08:48:42
勝利指向役員 1,164 2016/05/10 08:48:54
勝利指向役員 990 2016/05/10 09:01:06
勝利指向役員 946 2016/05/10 09:01:16
勝利指向役員 1,046 2016/05/10 09:05:00
勝利指向役員 914 2016/05/10 09:05:11
勝利指向役員 928 2016/05/10 09:05:23
SQL大好き役員 1,023 2016/05/10 09:42:40
SQL大好き役員 1,363 2016/05/10 10:57:00
SQL大好き役員 1,169 2016/05/10 11:40:39
SQL大好き役員 1,537 2016/05/10 13:37:53
SQL大好き役員 1,045 2016/05/10 13:40:01
SQL大好き役員 1,026 2016/05/10 13:50:11
勝利指向役員 1,207 2016/05/10 13:56:10
勝利指向役員 1,203 2016/05/10 13:57:20

最終日になりついに1秒を切る。 更なる改良を目指すも最後の方は若干悪化するなどして、914msが最速の結果となる。 5/10は平日なので一般社員はエントリーしにくい中、役員の猛攻が目立つ最終日だった。

最終結果

以下の結果となった。

順位 名前 実行時間(ms) エントリー日 総エントリー数 ソース
1 勝利指向役員 914 2016/05/10 09:05:11 20 source
2 SQL大好き役員 977 2016/05/10 00:17:40 45 source
3 goto3 1,624 2016/04/26 22:56:17 10 source
4 C#系社員 1,666 2016/05/02 02:50:21 4 source
5 超絶技巧社員 3,276 2016/04/27 09:41:40 3 source
6 JS専門社員 3,603 2016/04/26 00:47:37 13 source
7 ラビット系社員 5,990 2016/04/28 14:06:51 2 source
8 ざわ系社員 7,250 2016/04/27 00:09:07 3 source
9 ヤムチャ系役員 7,764 2016/04/27 07:53:36 1 source

エントリー人数: 9

総エントリー数: 101

となった。Interprismには32名の社員がいて、いわゆるエンジニアが29名なので、約31%の人が参加してくれた。

通常業務でほぼ一日は使ってしまう中、多くの人がエントリーしてくれて予想以上に盛り上がった気がする。

感想戦

エントリーした人で集まってみんなのソースファイルを見てあーだこーだ話をしたがそれぞれに個性が出てなかなか楽しかった。

  • 2016年4月に入社した新人がエントリー
    • 4月からJavaを勉強し始めていきなりエントリーしていて他の人が驚いていた(何位かは言いませんが)
  • 若干反則なコード
    • 今回はデータファイル、入力ファイルが固定なので、読み飛ばす最小バイト数を予め調査出来た
    • その人は駄目って書いてないからOKと言っていた。確かに。
  • CPUのレジスタ、2次キャッシュの量まで考えてヒープの使用量をコントロールしていた人もいた
  • 速いだけではなく可読性も考えられているものもあった

次回予告(?)

実はもう2回目も実施済みなので、またブログにまとめたらエントリーする予定。

なんでプログラミングコンテストなんてやったの?

ここからは本筋ではないけど、プログラミングコンテストをやった背景を書きます。

Interprismにはエンジニアが多くいますが、ばらばらの場所で仕事していることが多いことからプログラマーとしてのスキルの高さが伝わりにくい状態です。 (噂レベルであの人は凄いねという話は聞こえてくるのですが)

なので、スキルを見せられる場があると良いなと思い、プログラミングコンテストという場を思いつきました。

プログラミングと一言で言っても色々あります。

  • 絶対に落ちてはいけないもの
  • 使用メモリー量が限られているもの
  • とにかくスループットが求められるもの
  • 拡張性が重要なもの
  • とにかく速度が求められるもの

Interprismでは他社さんの業務システムを実装することが多いのですが、

複雑な業務ロジックを正しく実装すること

が最重要事項で、速度やメモリー量は優先順位的に少し下に来ることが多いです。

業務ロジックを実装することはそれほど簡単ではないのですが、いかんせん凄さが伝わりにくい側面があります。

よって、分かりやすい速度にフォーカスをあてて、メモリーの効率的な使用方法や、アルゴリズムの組み方などが見えたらいいかなと考えました。

PAGE TOP