飲酒プログラミングコンテストに参加した

注意(2019/09/01 追記)

この記事は過度な飲酒を推奨するものではありません。飲酒プログラミングコンテストでは速く飲むことを重視するあまり、過度に飲酒を行ってしまう傾向があります。開催する場合、その危険性を十分認識した上で自己責任で行ってください。また、最悪の事態に備えてシラフで判断力のある人間を用意することを強く推奨します。

原作

wass80.hateblo.jp

amylase さんがこの記事に感銘を受けて飲酒プログラミングコンテストを開いたので参加した。

コンテストの様子

amylase さん謹製の統計モデルで、難易度が易しいものから難しいものまで揃うように問題セットが組まれた。

参加者の酒の好みが分かれたので、ルールはアルコール体積ベースになった。唯一の青コーダーなので、銀〜黄の皆様が酒で破滅することを願いながらハイボールを開けた。

実際にやってみるとまず1缶目が空かない。レート差を埋めるためにはサクサク飲んでいかねばならないので焦る。tokoharu 先生は 45ml のウイスキーをストレートで飲み干して問題を解き始めている。橙コーダーが酒に強いと勝ち目がないのでやめろ。

1 問目 Garbage Collector

atcoder.jp

ようやく1缶目のハイボールが空いたので問題を開く。問題を開くコストが重いので最終問から開くのは悪手に思えるが、知っている問題だったので酩酊実装力を信じて勝負に出た。

ロボットをk台として累積和を回してやれば調和級数の和で O(N log N) で解けるという方針が立つ(知っているので)。Rust で実装し始めるが手元がおぼつかない。実装も終わったのにコンパイルが通らない。全部ミュータブルでええやろ!wコンパイルは通るようになったが、今度は配列外参照でサンプルが通らない。サンプルが間違っている。

順位表を見ると早くも not さんと yosupo さんが WA を出している。始まってきたな。

手元のコードは相変わらずサンプルが通らない。ランタイムエラーは消えたが数字が合わない。やはりサンプルが間違っている。コードを読む能力は失われているため print デバッグすると n と m を取り違えていた。競技プログラマは1文字変数を使うのでダメ。

サンプルが合ったので提出する。

atcoder.jp

一 発 A C

1000 以上あるレート差をひっくり返している。適性があるかもしれない。問題を読む権利が無いので2本目のハイボールを手に取る。

缶で飲むよりも一旦グラスに移して飲む方が流体力学的に早く飲めるという知見が得られた。破滅しそう。

2 問目 Megalomania

atcoder.jp

2 問目は無難に一番最初の問題を開いた。おそらく解いたことがない。

区間スケジューリングっぽい。蟻本で見た。早く終わらせないといけない仕事から順番にやっていけばええやろ!w俺は蟻本を3冊持ってる男やぞ。

atcoder.jp

一 発 A C

敗北を知りたい。

初手ウイスキーストレートをキメていた tokoharu 先生が print デバッグで苦しんでいる様子だったのでとりあえず煽っとく。

3 本目のハイボールは最初からグラスに移して飲み干した。やはり缶で飲むよりも流量が大きいので速く飲むのに適している。

3 問目 Successive Subtraction

atcoder.jp

3 問目も何も考えずに前から開く。

普通に難しくない?

解けないことが分かってしまった。

とりあえず一番小さいやつをメチャクチャ小さくして大きいやつから引けば良さそう。サンプルが合うので提出する。流石に 3 完すれば優勝間違いないでしょ。

atcoder.jp

WA

tokoharu 先生がいつの間にか追い上げてきている。ウイスキーの小瓶も空になっている。どうなってんの。

4 本目のハイボールが空かない。アルコールもそうだが普通に体積が厳しい。残り時間も少ないので飲み切らなくてもギリギリペナルティ差で逃げ切れそう。

結果

こんな破滅的なコンテストで発揮される勝負強さ、何なの?