読者です 読者をやめる 読者になる 読者になる

TCO15 Tokyo Hackathon 参加記 ( AtCoder Problems の強化記録 )

TCO15 Algorithm Round 2C の東京イベントで併せて開催されたハッカソンに参加してきました。作戦がかなりハマって賞金2000ドルゲット出来たので、自分用メモを残しておきます。

テーマ発表前

適当にチームを作る。@kenkoooo (ぼく), @fat_daruuuuma (Androidに超詳しい), @GenkiSugimotoJP (インフラとかAPIに超詳しい), @ENIXERvsREXINE (よく知らない) が集まる。この時点で何かしらのAPIを作ってAndroidから叩くのだろうという雰囲気が出来る。

テーマ発表

テーマが発表される。ざっくり言うと「知らない人にも競技プログラミングの魅力が伝わるサービス(Appirio社)」、「オープンデータを使って街の魅力を発信するサービス(リクルート)」、「楽天APIを使ったサービス(楽天)」から好きなものをやるというテーマになった。

各テーマに1500ドルの賞金が設定されているため、全てのテーマをカバーするサービスを開発すればボロ儲けではないかという提案が出る。とはいえ、競技プログラミングを他2つに絡めるのは大変そうなので、競技プログラミングが好きな僕がAppirio社のテーマを担当し、残り2つのテーマを他の3人が担当するという完全分業制を採用することにした。

競技プログラミングのサービスでは、

  1. やったことがない人にも面白そうに見える
  2. 初心者がつまずきやすいポイントを解消する
  3. 「速く正確に解く」以外の楽しみ方も提供する

の3つの機能を実装することを目標にする。

街の魅力を伝えるサービスとしては、

  • (オリンピックとかで来た)観光客が、また来たくなるような居心地の良さを提供する
  • ユーザーが発信した情報が、他のユーザーにとって利益になるようにする
  • Wi-Fi 情報を提供できるようにしたい。

あたりが話し合われた。

内容を詰める

競プロアプリについては完全に個人プレーなので、まったり考える。

やったことがない人にも面白そうに見える

  • AIとかのコンテストだったら動いているから何となく面白さは伝わるけど、大変そう。
  • RPG っぽくしたら面白そう。
  • 問題を解くとステージクリアできて、レベルが上がる、みたいな。
  • 何かしらの課題をクリアすると、アイテムが手に入るみたいなのも良い。
  • 達成度を可視化したらワクワク感が出そう。

初心者がつまずきやすいポイントを解消する

  • 何から初めて良いかわからない→ ちょうど良さそうな問題をレコメンドする。
  • どのくらい練習したかがわからない→練習量を可視化したい。
  • 追いつけないプロを見てしまい、やる気がなくなる→実力の近いライバルを紹介したい。

「速く正確に解く」以外の楽しみ方も提供する

  • コードゴルフ機能を実装しよう。
  • 高速化チューニング機能も実装しよう。

実装する

  • 問題を解けば解くほどレベルが上がっていくようにする。最初のうちは簡単な問題でもすぐレベルが上がるんだけど、だんだん難しい問題も解かないと経験値がたまらないようになっていけば、ポケモンの要領で自然と練習できそう。
  • どのくらい問題を埋めたかを円グラフにしよう。
  • 問題ガチャを作ろう。レコメンドエンジンを作る。
  • ユーザーの評価値を出して、実力の近そうなユーザーを列挙する、ライバル検索機能もつけよう。

まとめ

もう1個の方は賞を逃してしまったものの、製品アプリと替わらない出来栄えで非常に良い出来だったので残念。 @fat_daruuuuma が Android アプリを作り @GenkiSugimotoJP がWi-Fi情報共有用のAPIを作り、 @ENIXERvsREXINE がカフェを検索するAPIを叩いていたっぽい。

この手のものは人数が集まるとチームワークよく上手くいくことは本当に少なくて、船頭多くして船山に登ることのほうが多いと思っていたので、完全分業制にしたことによって個々人の持ち味がかなり良く出たのではないかという気がする。
(完全分業制なので他方を全然知らない)

個人的には、競技プログラミングに新規参入者が増えたり、効率的に強くなる仕組みが導入されて強い人が増えたりして欲しいと前から思っていたので、本当にやりたいことだけをやった感じだった。