CodeChef Snackdown Onsite 旅行記

4年半ぶりにここに書くっぽい。旅行記はQiitaには載せづらいのでこういうところにしか書けないかもしれない。

CodeChef Snackdown 2016の決勝にインドまで行ってきました。同じ組織の人で2人までチームを組んで行うコンテストです。去年はteamlabとして出ていたのですが、今年はRCOとして@kenkoooo君と組んで出ました。

あらまし

予選では42位で、実質決勝に行ける25位以上には程遠かったのですが、15位以上は全額支給されるのに対し残り10チームは航空券は自費負担になっていて、それで行かない選択をするチームが多く出て自分たちにまわってきました。
正直奮わない順位だったので自分としては行っても行かなくてもどちらでも良いかなと思ってたんですが、kenkoooo君がぜひ行きたいとの事だったので、RCOパワーを借りて出張名義で行くことになりました。航空券は会社持ちです。本当申し訳ないです。

準備

決まってから出発するまで2週間弱しかなかったので、パスポートを持っていないとこの時点でアウトです。
e-tourist visaというネットで申請できるビザがあり、ちゃんと申請できると一晩で発行されます。結構な量のフォーム入力がありますが、何を書けばいいかを示してくれるサイトが割りとあったので助かりました。
航空券はkenkoooo君が買ってくれました。感謝。海外用保険も会社が用意してくれました。死んだら2500万。バングラデシュのテロもあったのでビビってました。
持ち物に関してはあとでまとめてかきます。

1日目(7/7)

前日に朝食用のパンを買っておいたんですが、例によって寝不足でとても食べる気になれず結局空港に持ってきてしまいました。乳製品等はどこの入国審査でも引っかかると聞いていたのでやばいと思い急いで詰め込んでました(実は問題ない)。パンを頬張った直後に機内ランチが出たので悲しくなりました。これから何度も悲しくなる。
席が3人席の最後尾の2人席だったので、空間があいていてかなり良かったです。コースが関東から九州まで横断する感じで、結構天気も良かったので、窓から写真を撮りまくっていました。日本を抜けた後は雲ばかりで何も見えなかったんじゃ。
機内ではテトリスや麻雀をやってマシンをフリーズさせたりズートピアを見てたりしました。

チャトラパティ・シヴァージー国際空港に着いてインドの湿気を感じました。温度は東京より少し低いけど湿度がとにかく高くて、持っていた紙がどんどん湿気っていきました。ムンバイの入国審査は割りとスムーズにいけました。ホテル名・場所を控えておかないと悲惨な目にあうのはロンドンで経験済みだったのでそこはぬかりなく・・

ホテルに着いたら日本勢で夕食にしました。最初外でとろうという話だったんですが、ホテルの外には道路しかなかったのであきらめました。夕食はバイキングで、カレーをはじめイタリアンとかタイ料理とかカリフォルニア寿司とか色々並んでました。Egorがやたら巡回していたのが印象的でした。
このあとのホテルの食事もコンテストの食事もそうなんですが、給仕がとっかえひっかえ来て食べ物を勧めてくるのが印象に残ってます。
それから、電気で蚊を殺すラケットを持っている係員がいて、コバエをバチバチしていたのが印象的でした。
食べ物のバラエティは結構あるのですが、飲み物のバラエティはほとんどなく、ほとんどが水(3日目のディナーは水しかなかった)で、たまに謎の野菜ジュースとかチャイ・紅茶・コーヒーがあったりする感じでした。
ホテルの部屋については、トイレと他を仕切る扉がガバガバで、音がモロに漏れる以外は問題ありませんでした。

2日目(7/8)

5時間程度しか寝られませんでした。もちろんテンション低かったんですが、そのあと特に眠くならなかったのが不思議。
朝食もバイキングでした。スモークサーモンが常時あったので必ず食べる。イギリスで味わったのとほとんどかわらず、美味しい朝食でした。

16:00までは予定がなかったので、日本勢で観光しようという話になり、タクシーに乗ってまわっていました。インドでは列をつくるという意識がなく、車線に容量以上の車がひしめきあい、ドライバーは他の車を追い抜くレベルでもクラクションを鳴らしていて(多分自分の存在を知らせているんだと思うが)、常時どこかでクラクションが鳴っている感じでした。
Mahalaxmi Dhobi GhatとMarine DriveとGateway of Indiaに寄ったと思います。
Mahalaxmi Dhobi Ghatが巨大洗濯場とかいわれているところでタクシーから降りて散策したんですが、それっぽいのはあまりなく、湿気と臭いとゴミと、露店の野菜に群がる無数のハエに参ってしまい、命の危険を感じておびえていました。インド最大の都市の都市部でこんななのか・・という感じでした。さすがにここで物を買おうとか食べようとかいう気には到底なれませんでした。
Marine Driveはテトラポットがひたすら並んでいる海岸線で、カニがいました。
Gateway of Indiaはムンバイの代表的な観光地で、人がたくさんいました。門の窓の模様が窓ごとに違っていたのが気になりました。眺めはいいのですが、客引きとかゴミもたくさんあって、大丈夫かコレってなってました。
インド人は結構あっちこっちにゴミを投げるっぽいです。これは文化だししょうがないのかなーとも思いました。
帰りに謎のおみやげ屋に連れて行かれました。hogloidとsugim48は何か買ったみたいです。店先に食べ物とかなにもないのにハエが無数にいたのが印象的でした。
帰りにみたのですが、モノレールが走っていました。通常の列車はドアはついてないですが、モノレールはついていました。

ホテルに帰ってから、17:00くらいに開会式的なのがあって、そのあと3時間activities/gamesというものがあってteam dinnerという感じでした。イギリスにいたときは聞ける人の英語は聞き取れたのですが、インドの英語はなぜか聞き取りづらくて、ほとんど何を言っているのかわからなかったです・・英語力なのか・・。なおここでもドーナツ等を勧められました
activities/gamesは、ビンゴカードを各自渡されて、adminの出す課題に複数人で協力して最初に正解したグループが壇上に上がって何かもらえる・・というものでした。ビンゴじゃないです。これ以後もそうなんですが、課題が基本口頭でしか発表されない上に、他の話と違い厳密さが要求される文脈なので、聞き取れない英語弱者は完全に置いてけぼりでした。本当に部屋に帰りたかったです。帰りたそうにしているとスタッフが参加を激しく促してきます。なんか1個の課題に自分のビンゴカードがマッチしていたっぽく一度だけ壇上に上がれて中国製の四面体ルービックキューブをもらえたんですが、あっはいという感じでした。
この時点ではユニフォームとかなく、有名人以外はどんな名前かすらもわからないし、別にプログラミングで解かせるような問題でもないし、なぜこんなゲームにしたのか本当に意味がわからなかったです。
あまりにつまらなかったのでビンゴが終わってすぐにatcoderが始まったので適当に解いていました。
ビンゴのあとは偉い人の指示に従いみんなでひたすら太鼓をたたく催しでした。みんなで太鼓を叩いてシンパシーを感じればそりゃ盛り上がるだろ、って感じでした。ずっと昔にオーケストラ出てた時のことを思い出してました。

team dinnerは何か特別なものかと思ったら前日のバイキングと同じものが出てきました。

3日目(7/9)

finalsの日がやって来ました。3位以内でなければ賞金を貰えないし、予選の順位(決勝メンバーの中では19位相当)を上回ればいいやーと考えていました。
朝に部屋の前にユニフォーム等を入れているリュックが置かれているらしく、みんなユニフォームを着ていましたが、僕等のチームの部屋の前にそれが届くことはありませんでした。疎外感を感じたままバスに乗りdirectiplexへ。ユニフォーム一式は到着時にもらいました。
出発の数日前に知ったのですが、このコンテストはネット閲覧が許されない(ただし事前に送ったデータはPCに入っている)ICPC形式に近いものなので、ICPC勢以外には基本的に不利です。ネット閲覧が許されないのでiphoneは没収されました。環境はOSがUbuntuで、当然ですが英語キーボードです。どちらもほぼ使ったことないレベルだったので、Ubuntuの操作はkenkoooo君に頼りっきりでした
し、はじまるまでfor文をひたすら打っていました。ディスプレイ2台にキーボード・マウス1台、マスターとなるノートPCがあって、これらにさらに持込のキーボードやマウスを付ける感じでしたが、ノートPCのキーボードが一番しっくりきたので、結局それでずっとやっていました。
練習コンテストは去年の決勝の問題で、無理ゲーだろってなってました。チームアカウントはなぜかprofileが設定できなく、デフォルト言語が常にAdaになるというトラップがあるのがいやらしかったです。
あとEclipseを使ったんですが、Eclipseのバージョンが3.8でした(最新は4.5か4.6)。3系はJava8のラムダ式まわりが基本ダメで、ラムダ式を書こうとすると怒られます。実質的finalもエラーでした。だから実質Java8封印したまま出る感じです。ただしJava8で加わったLong.unsigned系等の関数は通ります。テンプレとライブラリはちゃんと入ったのでそこはうまくいきました。
後述するんですが、会場は冷房がきいていて、いつものRCOのオフィスぐらい寒かったです。なんとなく暑いだろうと思って長袖を一着も持ってこなかったのが仇でした。寒がっていたら某スタッフがパーカーをくれました。本当にありがたい!
本番中やたら飲み物食べ物をテーブルの上に置いて行かれました。水が美味しかったです。りんごとバナナを置かれた時は、絵でも描けというのか、という感じでした。

(問題それぞれについては後述)

コンテストが終わったら解説会をして下の階で結果発表・ディナーをやりました。解説はwriterのKevinsogoが現れて何か解説していましたが、まわりが冷たかったです。
結果発表は、適当に誂えた舞台でやるのですが、肝心の発表の前に長いご高説やらよくわからない表彰やらあってgdgdでした(もちろん口頭オンリーなので余計に何やっているのかわからず)。都知事みたいな人がいたんですがあれがDirectiの偉い人かもしれません。順位表を凍結したにもかかわらず、動く順位表もyes/noおじさんも出ることはなく、普通に3,2,1位が発表されていました。kussoooooooooおめでとうございます(クッスーと呼ばれてました)。発表後に参加賞的なものをもらいました。ディナーはカレー中心のバイキングでした。割りとおいしかった。バタチキとタンドリーチキンが無限に食べられるのは幸せだと思います。
どうでもいいけど順位は11位でした。

4日目(7/10)

3日目にHackerRankでいつも窓口になっているShashankという人に会う約束をしていたので会いました。ここでも自分のつたない英語が炸裂して意思疎通の限界を感じていました。
2日目の観光でだいぶ観光というものに嫌気がさしていたのか、本来この日に観光する予定だったのにみんなあまり乗り気じゃなかったのでさてどうするかってなっていたところ、adminがfacebookに、午前中に自然公園をハイキングするから希望者は来いと言っていました。kenkoooo君は眠っていてクッスーチームは蒸し蒸し嫌いとのことだったので、日本人としては僕だけ行ってきました。
地図で空港の北東にある緑色の塊が自然公園です。これの外縁までバスで行ってから、歩いてKanheri Cavesを目指しました。Kanheri Cavesの入り口まで道路が続いていたんですが、なぜかみんな歩くノリになっていたので歩くことになりました。地図上で測ったら5kmありますね。そりゃ時間かかるわけだ。
バスの中に10匹くらい蚊がいて、かなりやばかったです。どこから湧いたんだろう・・潰しまくっていました。
道中は1.5〜1.8台分の幅の濡れた路面と、そのわきのぬかるんだ道をひたすら歩いていました。道路には車がひたすらきてクラクションを鳴らしていきます。自然公園のなかには白い鳥(フラミンゴなんだろうか)とか猿とかスラム街がありました。
Kanheri Cavesに着いたら入場料を払って入場して小高いところに登っていきます。入り口には猿がたくさんいました。特に人間に危害を加えるわけでもないし、人間にビビったりしている様子もなさそうでした。
小高いところから周囲を一望できました。確かtwittertweetしたところだとおもいます。結構な時間ゆっくりしたあと嵐がきて強風と強い雨にうたれながら下山しました。
時間を大幅にオーバーしたようですが、これはこれで楽しかったです。

夜はホテルでディナーを食べてから空港に向かいました。帰りはデリー経由で東京に行くんですが、これが結構厳しかったです。まずチェックイン時の係員と話が通じなかったです・・そしてタグをつけてもらえず出国審査で引っ掛かり余計に時間を食うことに・・出発2時間前に空港に着いたにもかかわらず、11分前にようやく出国審査を抜けられました。なぜか予約時の席がうまっていたのでエコノミークラスの1個上のクラスに座ることになりました。まさか1時間半くらいの便のなかで機内ディナーが出るとは思っていなかったです・・つらい。

デリーでも2時間くらい余裕があったにもかかわらず、乗り継ぎするには一旦空港の外に出なければならず、したがってふたたび出国審査を受けなければいけませんでした。どうなってるんだこれ。これも結局残り時間10分くらいでようやく乗れた感じでした。

5日目(7/11)

今回の席は普通の席だったのでかなり狭く、寝る姿勢をとるのに難儀しました。着陸前は窓の外が晴れていたので写真を撮っていました。日本の風景は綺麗ですね。
そして帰国しました。せっかくなのでスカイライナーに乗りました。結構スカスカだったので何で安くしないんだろうなーとか考えていました。

天気について

雨季というから雨が毎日ドバーッと降り続いているんだろうなーと思っていたんですが、そんなことはなかったです。基本的に曇りで、2時間に10分ぐらい雨が適当にザーッと降る感じでした。

インドについて

人がたくさん、ハエもカラスもたくさん、ときどき野犬という感じです。野犬は狂犬病にかかる恐れがあるのであまり近づけませんでした。
湿度が高く、路面が常時濡れていて、その上にゴミが転がって、その上にハエがたかって、その上にカラスがいて・・という感じでした。インドの写真をネットで拾うと結構綺麗そうに見えますが、下を見ると割りとゴミだらけだとおもいます。唾吐きや立ち小便、ポイ捨てなど、東京で見かける負の部分が増幅している感じでした。こんだけ汚いのにネズミやGはいなかったのもまた不思議でした。
カラスの首筋が灰色になっていて、日本より退廃的な、ゲームでよく聞くような鳴き声で鳴きます。
あとあっちこっちにスラム街があります。青いビニールシートの屋根で、下が家のようにみえないものは全部スラム街だと思います。

持って行ったもの

ホテルがかなり良いホテルだったようで、ほとんどのものは結果的に要らない感じになってしまいました。

7月は雨季らしく雨対策してねと書かれていたので傘を2本持って行きました。ホテルの出口に貸し傘があったのと、あんまり外に出歩くことがなかったので基本的に使いませんでした。

  • 蚊対策

自分は蚊に刺されやすい(出発前に5,6箇所刺されてた)ので、蚊対策用に部屋に撒くのと肌にふきつけるのを用意していきました。毎日出発前につけていたのですが、基本的に蚊に刺されなかったみたいです。

  • 水(お茶)

ロンドンのときも持って行って結局使わなかった水ですが、今回も使いませんでした。ホテルが毎日1人あたり1リットルの水を置いていってくれます。

  • 非常食

メシマズのときの非常食もメシマズじゃなかったので使いませんでした。

"インド トイレ"でぐぐって戦慄していたので、絶対こうならないようにトイレットペーパーとウェットティッシュを持って行きました。ホテルのトイレはトイレットペーパーが付いているので基本的にこの目的で使うことはありませんでしたが、給仕に提供される食べ物は本当に食べ物しかなく、手を拭くものは一切あたえられなかったので、その目的で大いに役立ちました。また寒さで鼻水が出た時にも役に立ちました。

  • モバイルバッテリー

ロンドンに行った時、iphoneがしょぼかったのもありますが電池が一瞬で切れて満足に写真を撮ることができなかったので、今回はバッテリーを持って行きました。モバイルバッテリーは機内持ち込みしかできないので注意。結果的には残量を気にせず撮影できてとても良かったです。

会社から間接支給されたのですが、外に出歩くことは基本なく、adminからSIMが提供されたのでそちらを使っていました。SIMを抜き差しするためのクリップを持って行ったのは良かったです。

  • サンダル

サンダルを持って行きました。これにより靴下がなくとも歩き回れてよかったと思います。あと丸洗いもできたので10日のハイキングの後も問題ありませんでした。

  • 扇子

最初うちわを持って行こうと思っていたんですが、サイズ的な問題で扇子にしました。たまに使っていましたが、ホテル内は暑いことはないのであまり出番がありませんでした。

  • 名札

名札を下げていったからといって人に話しかけられると思うな。

  • 偽財布

スリが怖かったのでやっすい財布を1個買ってみました。ただ買い物すること自体がなかったので結局使わずじまい。総評ですが、インドの人たちはそんなにあくどそうにはみえませんでした。

  • マウス

会場のが割りとよかったので使いませんでした。

  • e-tourist visaのgrantedメール
  • e-ticketを印刷したもの
  • ホテル名
  • codechefのチームアカウントの認証情報
  • 日程表を印刷したもの
  • テンプレ
  • SA-ISの論文

主に紙媒体。上4個はほぼ必須です。5番目はあってもなくてもiPhoneから確認できたけれど、ちゃんと使ったので良し。6番目はライブラリがちゃんと入っていなかった場合の最終手段です。使わなくてよかった。7番目は途中で読むかなと思って入れたんですが読みませんでした・・。

問題について

結構どうでもいいことにハマっていたり、後でわかるんですが、虚仮威しだったものもいくつかあったりでなんか釈然としていないです。

Tree Cake

正しい漸化式をつくって法則を見つけ出す問題。セットの中では解いたチームが一番多かったんですが、一番ハマったと思います。クソミスを繰り返してWA3してしまいました。

Equalize

中央値の最大値を求める問題。クソ問。最初の提出の実装であっていたのにTLEしてしまい、ウ〜ンとなって終了直前まで悩んでいました。ソートをradix sortにしたら通ったけれど、正直ジャッジの気まぐれレベルだと思います。

Segment Tree

問題文に書かれていることを忠実に実装して、あとは分割可能な条件を自力で導ければ解けます。これは割とすんなりいけました。

Xortest Path

XOR回廊。ただ気づくまでに30分かかってしまったのは本当に情けない。森になっているが、1頂点でまとめて木にすると少し扱いやすい。

Beautiful Sandwich

解いたなかではこれが一番おもしろかったです。区間の長さの2乗はその長さ2以上の部分区間と長さ1の部分区間の個数で表されることを使ってNGパターンをぽちぽち追加したあと、高速ゼータ変換を使って一気に片付ける感じ。

Rain vs City

コードを書いてすらいなかったけど、kenkoooo君の解法で良かったらしい。これdoubleの3.2*10^8のDPでそして整数に近い値の扱いが謎なんですけど普通通ると思わない・・(追記)通しました。これはひどい

Provinces of ChefLand

これはまだ通してないけど、普通のセルを追加していくBitDPで良いっぽい?連結成分が小さいのでRedelmeierで列挙すればいけたか・・もったいない。(追記)通しました。Redelmeierで連結成分を全列挙してずらすだけ・・

Catch Spider-Chef

簡単な幾何。なぜこんなに解かれていないのか不思議。にぶたんやるだけ。

Counting Games

kenkoooo君から問題解釈を説明されたが、あとで読んだものとだいぶ違う理解をしていた。もったいない。いったんgrundy数を決めてしまえばあとは高速アダマール変換で行けそう。 (追記)ました。細かいミスたくさんしたけれど。

TreeLand Journey
Weird Queries
Big Search Trees

読んでないです。

これから

リスニング力が致命的にダメだったことを再認識しました。スピーキングも。こういうのはどうしたら鍛えられるんだろうか・・kenkoooo君とか他のメンバーに頼りっきりでした。感謝感謝。
他の国の参加者とも意思疎通したかったんですが、これではとてもとても・・という感じでした。
あとはコンテストの最初1時間固まっててあまり進捗が出せなかったのも問題です。このスロースターターっぷりをなんとかしたい。