コードを短く書く人のブログ

コードゴルフを稀に取り上げるブログ

第26回高専プロコン競技部門 反省会場

この記事はICT Advent Calendar 2015の7日目として書かれました。

はじめに

ブログの更新は1年ぶりになります、@orisanoです。
去年のICT Advent Calendarぶりの投稿になります。
今年はいろんなイベントや大会に参加しましたし、残り短いですがまだまだ参加します。
今年参加した中で個人的に最も注力したのが"""高専プロコン"""です。
読んでると思われる層の人は知っていると思うので詳しくは説明しません。
今年は競技部門に参加してきました。そのことについて書こうと思います。

高専プロコン競技部門と僕

今回の高専プロコン競技部門(以下競技部門)のチームは進捗優先探索という名前で

  • 僕 (専攻科1年) (リーダー兼コーダー)
  • レオきゅん (4年) (コーダー)
  • じんくん (2年) (コーダー)
  • 1年生2人

という構成で役割としてはリーダー(初)のような物をやっていました。
ちなみに僕は競技部門に参加するのが今年で4回目になります。

  • 舞鶴大会 (良い問題、なとりうむさんに初めてあった)
  • 有明大会 (サイコロ回、感情喪失)
  • 旭川大会 (サイコロ通信回)
  • 長野大会 (今回)

どの大会も思い出深いですね。(サイコロは絶対にユルサナイ)

初動

今年の競技部門の課題は「石畳職人Z」というタイトルで、
概要としては「全部埋まるかどうかわからないジグソーパズルを出来るだけ埋めよう」というものでした。
詳細が知りたい方はこちら

問題が公開されてすぐに練習場の作成にとりかかりました。
去年と違って競技者として参加するというものあって公開しませんでしたし、内部的にも活用しませんでした。
練習場の作成を通して、ルールの理解や曖昧な部分が理解できるのでとてもおすすめです。
練習場の作成が終わった頃から簡単なサーベイをしたり、チームメンバーに対して
探索アルゴリズムの概要をレクチャーしたりしていました。
それと並行してSiv3Dを用いたビジュアライザー兼手動ソルバーなどを作りました。
(本当はこの辺から一年生に対してちゃんと指示を出したりすべきだったんだろなぁ)

6~8月

土台が出来上がってきたので、ソルバーの実装ににとりかかりました。
非公式練習場(以下練習場)に提出を始めたのこの時期からです。
(練習場自体は5月くらいにはできていて、当時では信じられない解が提出されていた)
今回モチベーションが保てたのも練習場の存在があったからと言っても過言ではないでしょう。
練習場を公開していた@mecha_g3さんには感謝しかないです。
この頃は僕のソルバーはボロボロで全然良い解が出ずとてもつらい思いをしていました。
一方じんくんのソルバーがそれなりに良い解を出しており、評価関数の重みなどを参考にしたところスコアがかなり改善したことを覚えています。
じんくんありがとう。。。
KNCTが練習場にたくさん発生していて上位を独占していた頃でもありました、この時はひたすらKNCT爆発しないかなとか不穏なことを言っていた気がします。

最終的には僕もKNCTを名乗っていました。

ブレイクスルーとして高速化のために制限をかけたソルバーが
良いスコアを出すようになり、練習場でほとんどの問題で1位になりました。
8月の後半(?)からTMCITの攻撃が始まって、競争が激化します。
がスコアが全然改善せず、モチベーションがどんどん維持できなくなっていきました。
進捗管理も疎かになりました。ほんとにダメですね。

9月~

夏休みの期間はインターンシップで株式会社ABEJAさんとDeNAさんに行きました。
合わせて3週間ほどでしたがとても良い経験になりました。
その間は開発お休みしていました。( ◞‸◟ )

ここからアルゴリズムベースの改良は少なくし、高速化や提出ツールの作成などに入りました。
tcmallocなど修正無しで高速化が見込めるツールの導入や、
Instrumentsなどを見ながらボトルネックを探して高速化していました。
また_GLIBCXX_PARALLELで楽して並列化を行いました。
これでそれまでの4倍程度の速度が出るようになりました。やったね。

提出ツールの作成にあたって、チームの中で僕が一人だけ
Macユーザだったのでマルチプラットフォームを意識しなければいけなくなりました。
ISUCONのために勉強していたgolangで書きました。クロスコンパイル最高!

問題の1位取得数は6個で1位だったので比較的心おだやかに長野へ向かいました。

本番

長野に到着してからはどうやってTMCITの人を闇討ちするかを考えていました。いませんでした。

初日は練習と1回戦があったのですが練習の様子を見ると
自動で問題取得、解の提出ができないと困るということが分かりました。
空いた時間を使って取得、提出の流れを自動化してくれるツールを作りました。これが1回戦で非常に役に立ちました。
1回戦は第2試合だったのですが、1位、1位、2位と最終成績2位で突破することができました。(NAPROCKを除くと1位)
1問目はほとんど提出の速度を競う勝負になっていたので
自動化ツールが火をふき1位を取ることができました。
1回戦に関しては数ヶ月の努力があったのでそんなに不安はありませんでした。
準決勝は、5位、3位、3位と最終成績3位で突破することができました。
僕は4回目で初の決勝進出だったのでとても嬉しかったです。(顔がニヤついた写真が。。。)
決勝は10位と個人的には残念な結果でしたが、特別賞がもらえたのでよかったです。

反省

リーダーとしてもっとちゃんと仕事をふるべきだった。
進捗確認も絶やさずするべきだったし、困っているところをヒアリングすべきだった。
せっかくチームに入ってもらった1年生たちに仕事を振れず、
かと言って何かを教えることもできず、プロコンの楽しさを
十分に経験させられなかったことが一番の反省点です。本当に申し訳ない。

最後に

なんだかんだ個人的には今年のプロコンとても楽しめたので大満足です。
専攻科に進学した意味があったと思える出来事でした。
現地では他の高専の競技部門の人とそれなりに交流できたし、最高でした!!
チャンスがある後輩の皆さんは自分の武器を磨いて高専プロコンに出ましょう!!
以上、老害からでした。

明日は駐日ユーゴスラビア臨時政府大使館(@ICT_yugosoviet)です。
めちゃくちゃおもしろい記事を書いてくれることを期待しています。