April 24, 2016

CodeIQ 挑戦

CodeIQ の星 4 個の問題に挑戦してみた。 (この問題 。回答期限が過ぎたらリンク切れになるかも)

ちなみに、CodeIQ は Recruit の運用しているプログラムの問題を出してくれるサイト。 答えを提出すると Unit Test を動かして自動採点してくれる。 誰がどの程度正解したかをヘッドハンターや企業の採用担当の人が閲覧出来るようになっており、それを元にしたスカウト機能が付いている。 そのため、ユーザーは無料で使用可能。

初心者向けプログラム学習サイトとは異なり、「簡単すぎる問題しかない」という事もないし、かと言って競技プログラミングのような理不尽なまでの難しさもない。 Paiza というよく似たサービスもあるのだが、CodeIQ は Haskell が使えるので重宝している。 (只今 Haskell 勉強中)

CodeIQ の問題は難易度に応じて星 1 個 - 星 4 個で分類されている。 ただ、CodeIQ は問題の検索性が悪いというか、星の数で問題をフィルタリングする事が出来ない。 そのため今まで星 4 個の問題を見つけた事がなかったのだが、今回はたまたま見つけたのだ。 ちなみに、該当の問題には「難問」というタグがついていた。 そうか、星 4 個の問題は Ctr-f で「難問」を検索すれば見つかるのか。

何はともあれ星 4 個の問題を見つけたので挑戦してみる。 挑戦にあたり、今回気になったのは以下の 3 点。

  • そもそも、俺に星 4 個の問題が解けるのか?

  • 今まで、星 1 個の問題を解いたらそのプログラムの「初級」に、星 2 個の問題を解くと「中級」に、星 3 個の問題を解いたら「上級」に認定された。 星 4 個を解けたら何級?

  • 今、星 3 個を解いた状態でも時々スカウトが来る。 星 4 個を解けたらどれだけスカウトが来るのだろう? (チヤホヤされるの大好き)

さて、既に心は問題を解けたつもりで何となく顔がニヤけながら問題を見てみる。

何これ、難しいじゃん。 もちろんプログラムとしても難しいんだけど、数学的にも簡単ではない。 何より、「想定時間 30 分」って何だよ! 30 分で出来るわけねー。

でもプログラムって不思議なもので、出来ない問題ほど楽しい。 出来無いなりに手を動かし続けたら、とりあえず動くものが出来た。 ここまで 2 時間以上かかっている。想定 30 分の問題に対して 2 時間以上か。 なんか結果が出る前に負けた気がする。 ここで既に最初のウキウキは消え失せているわけだが、回答を提出してみる。

まさかの全問不正解

この問題では 6 セットのデータを用いてプログラムを動かして正しく動くか確認してくれるのだが、なんと全問不正解

ただ、CodeIQ は親切な事にテストしたデータセットと提出したプログラムの実行結果を表示してくれる。 これが何かおかしい。 自分の開発環境で同じデータを流した時と結果が違う。

「オーバーフローか!」

Haskell コードの Int 型を全て Integer 型に変換して再挑戦。

テストが通った!

テスト 6 個のうち 1 個が失敗したけど、5 個は通った!

それにしても、「俺の環境では動きます」というダメプログラマの典型文句を自分で言うことになるとは。 それに、この 1 個が通るようにするのがまた大変なんだよね。 この日は他にする事があったので一旦終了。

次の日、「さて、昨日の続きをやるか」と思ってCodeIQ を開いたら驚いた。 なんと、この問題に関連したスカウトがもう来ているではないか。 「星 4 個ですよ、すごいですねえ」っていう歯の浮くようなスカウトだった。 現在転職活動はしていないのでスカウト貰っても意味はないし、相手の立場からすればお世辞だと言うことは分かっているんだが、なんか嬉しい。

それにしても、まだ俺解いていぞ。1 個テストが通らなかったんだぞ。 この差出人、どれだけ見ているんだ?

すこし気力が回復したので再度問題に挑戦。各関数に対して unit test を書いていったら原因は意外と早くわかった。 浮動小数点計算における桁落ちだ。 計算の順番を変更して再提出したら、めでたく全テストを通過した。 良かった。

さて、最初に気になっていた結果だが、まず星 4 個の問題はなんとか解けた。 でも、想定 30 分の問題に合計 3 時間以上かけてしまった。 不本意だ。 半年前だったら「俺、プログラマじゃないし」って言い訳できたんだが、今は仕事でもそれなりにコード書いているからなぁ。

次に CodeIQ からの認定だが、今回は特に無かった。星 4 個を解いたのに、星 3 個と同じ「上級」のまま。「超上級」みたいな認定がもらえれば嬉しかったのに。

最後にスカウトだが、あまり来なかった。 お世辞で持ち上げてくれたのはあの 1 通だけ。 あとはいかにもコピペチックな定型文のスカウトが 3 通きただけだった。 少し残念。 プロフィールあまり書いていないからかね? 一応 Linked in へのリンクは貼ってあるのだが。

以上、CodeIQ への挑戦履歴でした。