あおぽけの布団

音ゲー(DDR/IIDX/BMSetc)ほかゲームなどについてタラタラ殴り書きするだけのブログ

ACM-ICPC2015参加記

いつも通り5ヶ月放置してましたあおぽけです。この度ACM-ICPC 2015 アジア地区予選 つくば大会が開催され、岡山県立大学 3625のメンバーとして参加してきましたので、その参加記を書いておきます(なお、本記事はOB/OGの会の参加記に投稿する予定ですので、本名及び写真以外は公開します)。

 

事の発端は、学部1年からの友人で競技プログラミングによく参加しているTくんに、「ICPCに参加したいんだけどメンバーが足りないから参加してくれない?」と言われたことでした。私自身は競プロというものをほとんどやっておらず、研究でCのシミュレーションプログラムは書いてるけどそんなに大層なアルゴリズムを使うわけでもない…という感じで、最初はあんまり乗り気ではなかったのですが、もう1人のメンバーであるひすい(@hisui19720)含め2人があまり英語が得意ではないということで、問題文を読む係(?)として参加することになりました。6月の国内予選では、3完チームの中でもかなり速かったことから36位となり、うちの大学では初めての予選突破となりました。とはいえ、プログラミング力はTくんの方が圧倒的に高いこともあって、アルゴリズムの考案などをした以外にはほとんどワンマンプレー状態でした。

そんなこんなで11/27朝に岡山の地を発ち、つくば遠征に行ってきました。と言っても1日目は東京に前泊で、荷物を置いたら東京観光をしていました。到着が15時頃と比較的遅かったため、浅草→東京スカイツリー秋葉原という感じで軽く巡ってきました。翌日、秋葉原からつくばエクスプレスに乗り、つくばの地に降り立ちました。

会場のつくばカピオに着いたのが若干早かったため、会場付近に誰もおらず困惑していましたが、13時前にはぞろぞろと人が集まり始め、しばらくして入場しました。ICPCアジア地区予選では公用語が英語となっているため、テキストやアナウンスの英語を大量に処理しなければならず少し焦りましたが、そんなに難しくないため一応の理解はできる状況でした。

大会1日目は環境のテストユースとJava Challengeでした。用意されたキーボードですが、

  • \キーが妙に横長かつ右シフトキーの位置が悪く、右シフトを押そうとすると↑カーソルキーとの誤爆が頻発
  • Home/Endキーなどが主要部分と一体になっていて、BSキーを押そうとするとEndキーと誤爆しやすい

など、個人的にかなり扱いづらいものでした。実際他の参加者の参加記やTwitterなどでも使いにくいという声は多かったようで、もう少しなんとかならなかったかなと思う次第でした。というか英語キーボードは普通の104なのに日本語キーボードで101キーなるものがあること自体がものすごく謎です。また、テスト問題で妙に難しく考えて詰まったりするトラブル?もありました。

Java Challengeは、"Java"の名称とは裏腹に言語はC/C++からPython,Ruby,HaskellScalaまで、割となんでも使えるものでした。競技ルールは、キャラクターを動かして床を落とすことで相手をフィールドから落とすというゲームで、そのキャラクターのAIを作ることでした。とりあえずC++のサンプルコードを落として、アクションが完全ランダムになっているところを、自分の床が落ちそうなときに逃げるというアルゴリズムを加えたコードに変更しました。しかし、提出しても実行結果がなかなか返ってこない、まだかまだかと思ってたらサーバーが落ちた…という、運営が割とボロボロな状況で、最後に提出したコードが本当に正しく動くのか全く検証できないまま競技が終了しました。

その後、筑波大学の食堂で歓迎会という名の立食パーティーが行われました。途中で各チームの紹介を行うことになっていましたが、他のチームがネタに溢れた爆笑プレゼンを行っていた中、うちのチームはかなりお堅い紹介になってしまいました。まあ初参加でどんな空気で行けばいいのかわからなかったことや、あんまりはっちゃけるような性格のメンバーもいないこともあり、正直仕方ないかなという気はします。

大会2日目の本番では、私とひすいでA,B問題を頑張って解き、C問題をTくんに解いてもらうという作戦で臨みました。

  • まずA問題はほぼ誰でも解けるような問題だったため、私が実装し30分弱でACしました(実際は領域数が微妙に足りず、コーナーケース次第ではWAが返ってくるところだったことを講評で知らされ、若干白目になりました。油断禁物)。
  • 次にB問題に取り掛かりましたが、事前練習でも苦しめられていた幾何問題で、中高の頃から幾何が苦手な私にはかなりつらいものでした(余弦定理すら思い出せないとは…)。ひすいが実装をし始めるものの、サンプルは全通過なのにWAが返ってきてしまい、一時は手詰まりになりかけました。
  • B問題で唸ってるところにTくんがC問題の実装を始め、こちらが題意を確認する前にACしてくれました。さらに詰まっていたB問題もTくんが改めて実装を始め、なんとかACが取れました。やはり我らがリーダー。
  • B問題で手間取ったためにD,E問題にはほとんど手が付かず、ようやく実装を始めたところでタイムアップ。結局3完26位でした。

大学初の出場チームとしては、42チーム中26位という結果を取れたのは十分健闘できたのではと思います。また、終始Tくんに頼りっぱなしに近い状況だったものの、チームメンバーとして最低限の仕事ができたかなとも思います。ちなみに1位のチームは、パーフェクト達成かつ全問とも1発AC&最速クリアという完全勝利を果たしていました。世の中にはバケモノがいるもんですね(遠い目)。

Java Challengeでは、あまり期待せずに結果発表を聞いていたら、いつの間にやら予選を突破しており、あれよあれよという間に決勝戦に行ってしまい、驚愕しました。最終的に2位になり、余興ながら私の書いたコードがとんでもない結果を生み出してくれました(なお、1位は完全ランダムのサンプルコードだった模様。コンテストの意味は…?)。副賞として、ドイツのカードゲーム"Beasty BAR"を頂きました。早速遊んできましたが、なかなか面白いです。

夜には懇親会という名の立食パーティーもとい企業合同説明会が開催され、IBMの企業賞を受賞したり、各ブースの企業からいろんな物をもらったり、Googleから配布された問題を飯を食うのも忘れてみんなで解いたりしていました。某企業ではパクチー入り袋麺なるものも配っていましたが、帰ってみたら案の定粉々でした。これどうしようかな…

翌日はエクスカーションとしてつくばツアーが行われ、CYBERDYNEというロボティクス企業の展示と高エネルギー加速器研究機構の見学をしてきました。情報系や特に通信・ネットワーク工学とはかなり遠い分野だったこともあり、どちらも普段見る機会がないものを見られて面白かったです。15時に解散となり、TXや新幹線を使って21時過ぎには家に辿り着きました。

競プロという自分とあまり関わりのなかった分野でこのような大会に出られ、大変貴重な経験になりました。一方、それが災いしてかオンラインでの知人も全くいなかったこともあり、別大学の方との交流がほとんどできず、少し後悔しています。こういう場面で少しくらい話しかけられるよう、コミュ力を上げていきたいと思います。なお、大会終了後にTwitterでエゴサなどをしてフォローしてくださった方、ありがとうございます。競プロ関連のツイートはあんまりしませんが、よろしくお願いします。

というわけで、参加記は以上になります。チームメンバーのTくん及びひすい、コーチを引き受けてくださったK先生他、参加者の皆さん本当にお疲れ様でした。ICPC自体は年齢制限のため最初で最後になりますが、今後はこれを引き継いでくれる後輩探しに取り組みたいと思います。

 

以下それ以外の近況報告。

  • ここ数ヶ月結構なペースで学会発表に行ってます。今度は松山に行ってきます。ちょっとペース上げすぎた感が…
  • グラブルたのしすぎわろた パのモチベが急激に低下中。まあ最低限のことはやってますが。
  • おとげーまったくしてない