AHC028参加記

問題はAtCoderを参照。コードはGithubにあります。

ChatGPT(無料)とGithub Copilotを使っています。

準備

日課の散歩をして、昼寝をしてから万全の状態で挑むつもりだったが、テレビでデルタ・フォースという面白い映画がやっていた。それを見ていたら30分前まで何もできなかった。とりあえず15分仮眠をとった。AtCoderを開いて、CLionを開いて待機。

初動

問題文を読んで理解する。前回(AHC029)と違って、今回はC++向けの親切テンプレートコードがなかった。前回と同じくKotlinでやるためにIntelliJを起動する。

とりあえず、入力と適当な出力(合致した文字を貪欲に入力していく)を書いて提出する。このままコンテストが終わってくれ。

次に、合致した文字の中で、今指があるところに一番近いところを押していく貪欲に書き換えて提出する。この時点で14位ぐらいだったと思う。このままコンテストが終わってくれ。

ここまでは、入力ケース0000のみの結果を見ていた。ちゃんと100ケース実行したくなるので、ChatGPTにスクリプトを書いてもらう。IDEを使わずにKotlinのコンパイル・実行をする方法を覚えていないので、それも教えてもらう。

ChatGPTにKotlinのコンパイル実行方法を教えてもらう

0000.txtから0099.txtまで実行して総和をとるPythonスクリプトを書いてもらう

質問を英語でしているのは、かな入力と英語入力を切り替えるのが面倒だったから。ディレクトリの配置を変えたり、IntelliJPythonをちゃんと認識できるように設定したりするのに手間取った。さらに、微妙にファイル名が違った。

それから、単語がせいぜい500個しかないので、全部の単語を見て、1文字目が今の指の位置から一番近い単語から入力していくようにする。

これで100ケース567017点。3時56分

シェル芸とタイブレーク

Pythonスクリプトがテストケースを逐次実行していくのが遅いので、シェル芸を使って並列実行できるようにする。月刊シェル芸は役にたつ。

Pythonでつかうコマンドを

seq 0 99 | xargs printf "%04d\n" | xargs -I@ -P8 sh -c "CI=true java -jar Main.jar < in/@.txt > out/@.txt"

にする。

プログラムでは、現在の指からの移動距離が同じやつをランダムに選ぶを繰り返し実行して、一番いい解を出力するようにする。

これで620802点。4時35分

被った入力を省略した(つもり)

一個前の単語の接尾辞と、次の単語の接頭辞が被っていたら入力を省略する(つもりになっていた)コードを書く。悲劇の始まりである。

626268点。5時2分

5文字全部のコストを計算

先頭1文字だけではなく、5文字全部入力した時のコストを使って貪欲をする。

679017点。5時17分

もう一回タイブレーク

5文字全部入力した時のコストが同じだったら、ランダムで選ぶようにする。これを時間いっぱい繰り返す。

680769点。5時24分

5文字入力する経路を最適化する

ダイクストラを使って、5文字入力するステップを最適化する。Github Copilotが作ったバグに悩まされて結構時間を食ってしまう。うちは晩御飯を6時に食べるので、呼び出しにちょっとコンテストの続きをさせてくれと頼む。

693984点。6時15分ごろ

ご飯を食べて順位表を眺める

ちょっぴり冷えたご飯を食べながら、下がっていく順位を見守る。6時40分ごろに食べ終わったが、もうやることもないかなと思い、リビングでダラダラする。

結果、340位

おまけ

自分が書いたプログラムを眺めていたら、衝撃の事実がわかる。

これがなかったら、200位以内に入れていたらしい。

教訓

Github Copilotのコードはちゃんとレビューしろ。

2023年の振り返りと2024年の目標

2023年の目標

  • RTLな言語の勉強を始める。
  • 6冊以上の技術書を読み終える。
    • 達成(11冊)
  • iKnowで新たにマスターした語数1000以上(累計で4204以上)
    • 未達成(598語)
  • 新しいプログラミング言語を1つ以上勉強する。(たぶんGoかRust)
    • 達成(Go)
  • 長期間開催されるコンテストに2回以上参加する
    • 達成(2回, ISUCON + AHC)

iKnow

12月31日時点で、マスターした単語が3802語になっている。去年が3204語だったので、今年マスターした単語は598語になる。目標の6割だった。

履歴を振り返ると、5月ごろと9月から11月まで、1日5問でかろうじてstreakを伸ばしていたようだった。5月ごろはおそらく自分に元気がなかったころだったと思う。9月以降のものは、iKnowTOEFLやGMATなどのコース提供を終了するが、コースを既にスタートしている人は引き続き使用できるという理由で、それらのコースを一気に追加したのがモチベーション低下の原因だと思う。日常で使わない数学用語なんていつ使うんだ?JAG合宿の作問で選手への嫌がらせのために使えばいいのか?

来年こそは、1000語を追加でマスターできるようにしたい。

Duolingo

今年はアラビア語を追加でやるようにした。新たに音楽と数学のコースも追加されたが、こちらはあまりやっていない。

技術書

記録に残っている範囲では、次の本を読んだ。

また、Software Designの定期購読を再開し、特集記事は目を通すようにしている。

長期間開催されるプログラミングコンテスト

ISUCONとAHC029に出た。ISUCONは1日のみの開催だが、目標を達成とするためにこちらにカウントした。

ISUCONについては、ブログ記事を書いたので省略。AHCは参加する時のためのスクリプト(全サンプルケース実行や、ハイパーパラメーターチューニング)を充実させたい気持ちがある。

アプリケーション開発

RainbowshoesがHerokuから脱出したので、少し財布に優しくなった。また、Webクローラーのライブラリを変更して、Springのバージョンをあげた。

今は、全文検索へ移行するためにElasticsearchの勉強・実装をしている。

2024年の目標

  • iKnowで新たにマスターした語数1000以上(累計で4802以上)
  • 6冊以上の技術書を読み終える
  • 新しいプログラミング言語を1つ以上勉強する(たぶんRust)
  • Kaggleの本を読んで実際に参加してみる
  • AHCで青以上になってキープする
  • 月に1回ABC/ARCのバーチャルコンテストをやる
  • Rainbowshoesに全文検索を実装して、アイドルマスター以外の作品にも対応させる

情報オリンピックの思い出

はじめに

数学セミナーの2023年7月号に、数学オリンピックの特集があった。その特集の中には、過去の参加者の方々が数学オリンピックの思い出についての記事と、「わたしの1問」という思い出の問題についての記事があった。後者は難しそうなので読まなかったが、前者はたいへんおもしろく読ませていただいた。その特集に感銘を受けた私は、情報オリンピックについても同じことができないだろうかと考えた。

思えば、私が第9回日本情報オリンピックに参加したのは2009年から10年のことなので、もう14年が経つ。情報オリンピックの思い出は、当然、私にとってとても大切なものである。とはいえ、10年以上の年月を経るうちに徐々に色褪せて来てしまっている。まだ、記憶がある程度確かなうちに、書き残しておこうと思い立った。

10年以上も前のことなので、覚え違いもあるかもしれないが、ご容赦いただきたい。

情報オリンピックとの出会い

私が情報オリンピックのことを知ったのは、私が高専1年の2008年のことだった。それは、先生が教室の前に掲示した情報オリンピックのポスターだった。(その前に、情報科の先生がこういう物があると紹介もしていたかもしれない。)そのポスターを見た私は「まだ、プログラミングについてよくわかっていないし、来年になったら参加しよう」と思った。今でもこのことを思い出しては後悔している。当時の私は知らなかったが、高専生が情報オリンピックに参加できるチャンスは2回だけで、そのうちの貴重な1回を私は捨ててしまったのだ。もし、この記事を読んでいるあなたが、情報オリンピックに参加しようかどうか悩んでいるのなら、一旦この記事を読むのをやめて、今すぐに参加登録をしてもらいたい。

情報オリンピックへの貴重な参加を捨てた私は、その年の夏を俗に言うパソコン部で過ごした。この部の主な滑動は、高専プロコンに参加することだったが、1年生にあまり仕事はなかった。暇を持て余した私は、市立図書館にあった柴田望洋さんのJavaによるアルゴリズムとデータ構造を読んだ。このときに身につけた知識が、翌年の情報オリンピックで大いに役に立った。

予選

翌年、2年生になった私はついに情報オリンピックに参加する決意を固めた。高専プロコンが終わった11月ごろから、12月の日本情報オリンピック予選まで、予選の過去問をほぼ全部解いた。当然、わからないものは解説を読んでからである。そのときに、解説の中から再帰動的計画法について学んだ。

ほぼ全て解いたというのは、1問だけ解説を読んでも解けない問題があった。ビンゴという問題である。解説を読んでもさっぱりわからなかったので、部活の顧問の先生に解説を見せ「これわかりますか?」と聞いたら、1時間ほど考えたあとで「ちょっとわからないねぇ」と言われた。部活の先輩たちにも相談したところ、ある先輩がその問題を解くプログラムをインターネットで見つけてきてくれた。Haskellで書いてあった。私の部にはHaskellがわかる人がいなかったので、結局解法を理解しないまま予選当日になった。

予選には情報科専用のパソコン室から参加した。私は6問中の全問に対してプログラムを書くことができた。6問目の解法は、あまり効率のいい方法ではなかったので、プログラムがちゃんと終了するかどうかハラハラしながら待っていた。

予選の結果は6問中5問が完全正解で、残りの1問は全滅だった。間違えたのは2問目で、複雑なことをやろうとして見事に失敗してしまったのだった。予選の問題を全部正解すると賞が貰えたようだったので、とても悔しかった。今でも後悔するポイントその2である。

本選

1問を完全に落としてしまったものの、予選はAランクで通過することができた。本選進出が決まってからは、本選の過去問を全問解いた。かなり大変だったと記憶しているが、それなりの難易度の問題を自力で解けたときはとても嬉しかった。

情報オリンピックの本選は学校の学年末テスト期間に重なっていた。母と姉が入試関連のことで不在だったので、テスト期間前に私は父と二人でご飯を食べる機会があった。そこでわたしたちは焼き肉を食べた。しかし、これが良くなかった。焼き肉でお腹を壊した私は、ひどい腹痛と下痢のなかでテストを受けることになった。はじめの2日はなんとか耐えたものの、これはもうどうしょうもないということで病院に行った。病院の先生には「よくこれでテストを受けたね。僕なら無理だよ」と言われ、薬を出してもらった。

薬でだいぶマシになったものの、腹痛を抱えたまま本選に挑んだ。行きの新幹線の中では、学校の先生に借りた、動的計画法の解説が載った本を読んでいたと思う。まだ、動的計画法への理解が不十分だと考えていたと思う。

本選競技中のことはほとんど覚えていない。腹痛と問題のことで頭がいっぱいだったからだと思う。

先にも述べた通り、競技のことはほとんど覚えていないが、オリンピックセンターの談話室でのことは覚えている。そこでは、日本の各地から来た選手たちが、プログラミングのことについて語り合っていた。ある人はCのマクロについて、またある人は自分が開発しているゲームについて話していた。今思えば、とても貴重な交流だったと思う。

春合宿

本選の結果、私は2問と部分点で成績優秀者に選ばれて、合宿に参加できることになった。合宿に参加する選手の学校は、どれもテレビで見たことがあるような名門校で、私はかなり怯えてしまった。それを母に相談すると、次のような答えが帰ってきた。

それを聞いて安心した私は、合宿までの期間を実にのほほんと過ごした。多分、予選と本選の練習で力を使い果たしてしまっていたのだと思う。もうちょっとちゃんと練習しておけばよかったなと今では思う。

練習はほとんどしていなかったので、競技は散々だったか、合宿は楽しかった。競技時間外には、本選と同じく、プログラミングのことも、それ以外のことも話した。特に、同じく高専生だった人には、自分にしては珍しく積極的に話しかけていた。

特に記憶に残っている出来事は、灘高校の人とお風呂で話したことだ。彼とは灘高の大学受験について聞いた。彼いわく「東大に行って当たり前、京大は医学部じゃないと失敗だと言われる」とのことだった。山口県の片田舎で育った私には大変な衝撃だった。私の地元で京大に受かると、何年にもわたって市内中の噂になるレベルである。大変な学校だと思った。

もう一つ、鮮明に覚えているのは、納豆をかき混ぜる回数を口に出して数える人がいたことだ。頭がいい人はちょっと変わっているんだなと思った。

合宿中にパソコン甲子園ICPCSuperConTopCoderの存在を知ったことは、大げさではあるが、私の人生に大きな影響を与えたと思う。その後、私はこれらに片っ端から参加していって、友達や知り合いを増やした。その人たちの中には、今でもたまに遊びに行く仲の人もいる。あまり社交的でない自分にとって、とても大切な友達だ。就職先も、紆余曲折があったが、プログラミングコンテストに参加していたおかげで見つかった。

すべての競技が終了したあと、谷先生が、当時はまだ珍しかったスマートフォンiPod touchだったかも)に順位を表示して教えてくれたことも覚えている。

最後に

情報オリンピックで、同世代のトップクラスの仲間と交流できたことは、とても貴重な経験だったと大人になった今強く思っている。自分は田舎の秀才だったので、自分より頭の良い同世代の人を実際に見たことがなかった。情報オリンピックに出て初めて、自分より頭のいい人たちを見て、大変な衝撃を受けた。ちょっぴり天狗だった自分の鼻を折るのにピッタリの機会だったと思う。

同じような経験を今の生徒たちにもしてほしくて、当時の自分が本選に行くのにかかったであろう金額を、毎年寄付している。

最近、本選がオンラインになったことを知った。本選の大人数の一夜の交流がなくなったのは残念に思う。しかし、先生方も悩んだ末での結論であるだろうし、私にそれ以上のことを言うことはできない。とある富豪が大金を寄付して、大人数のオンサイトができるようになることを祈っている。

ICPC2019 アジア地区予選横浜大会 参加記(スタッフ)

今年もICPCアジア地区予選のお手伝いをして来ました。今年で3回目です。

私が手伝った日は11/16,17の二日間です。

前日夜

去年、必要になった張り紙を手書きで済ませたので、今年はちゃんと印刷できるようにパワポで張り紙を作り始めます。作り終わったあとで、実はすでに印刷してあることを教えてもらいます。でも、アリーナの配置と、持ち込み可能物品が変更されたのに対応するため、書き換えが必要なものがあるとも教えてもらいました。完全に無駄にならなくて何よりです。

1日目

JAGスタッフは朝9時集合です。日本大通り駅に着くと、JAGのスタッフが何人か見つかったのでみんなで会場までいきます。

8時50分ぐらいについたので、スタッフ用のTシャツと名札、交通費をもらって、急いで朝ごはん(サンドイッチ)を食べます。

9時にアリーナに集合します。コンテスタントのPCとジャッジサーバーのテストがまだ終わっていないらしいので、みんなでやります。一人二台ずつマシンを使ってテストします。色々な言語で提出 して欲しいらしいので、KotlinとJavaで書きます。また、ダメなケースも試して欲しいと頼まれたので、それぞれWAとREになるプログラムを出します。 Ubuntuを起動した瞬間にCodeBlocksのショートカットを見つけてIOIのことを思い出したので、今年は何もありませんようにとお祈りします。

コンテスト環境のテストが終わると、係の分担をします。私は去年と同じ受付に回されます。微妙に受付要員が足りなかったので、英語を話しなれている同僚(kenkooooさん, amylaseさん, ヘクトくん)をスカウトします。

受付係だけで集まって、受付のフローの説明を聞きます。そのあとで、入場用通路用のパネルを設置したり、必要な張り紙をペタペタ張ります。

【非公式】 日本で行われるICPC地区大会で気をつけたいこと

注意

これはあくまで非公式の文章です。公式のルールやアナウンス、指示と矛盾する場合は、必ずそちらの方に従ってください。

また、この文章は日本で行われるアジア地区予選についてなので、他の国で行われる大会には通用しないと思われます。

これは何?

この記事は、ICPCのOBの私が、日本で行われるICPCアジア地区予選に参加する選手に送るアドバイスです。

練習方法などではなく、アジア地区予選でトラブルに遭う確率を小さくして、競技に全力を投じられるようにするためのものです。

やってはいけないこと

遅刻をする

選手のうち一人でも遅刻すると、失格になる可能性があります。せっかく国内予選を通過したのに、遅刻で失格になっては目も当てられません。

絶対に寝坊をしないようにしましょう。朝に弱い人は、チームメイトと一緒の部屋に泊まるなどの対策を検討しましょう。

受付の終了時間のギリギリに到着しようとするのは、交通の乱れなどに巻き込まれたときに危険です。時間に十分な余裕を持って出発しましょう。

万が一、遅刻や欠席の可能性が生じた場合は、なるべく早くチームメイトと大会運営に連絡をとりましょう。

学生証を忘れる

(大会側から求められている場合は)必ず学生証を持っていきましょう。

学生証を紛失している場合は、なるべく早い行動が必要です。まず、学生証の再発行の手続きをしましょう。 学生証の再発行が大会に間に合わない場合は、在学証明書(英語または日本語)を発行しましょう。

学生証に英語または日本語の名前表記がない場合は、パスポートも要求されることがあります。大会側からの案内をよく確認してください。

学生証が完全に電子化されている場合は、事前に大会側に連絡しておくと、当日の手続きがスムーズになる可能性が高いです。

Tシャツ・名札を忘れる・なくす

大会中は、初日に配布されるTシャツと名札が参加者の証となります。大会中は絶対に忘れたり、無くしたりしないようにしましょう。

ちなみに、私は毎年次のような方法を使っています。

  1. 一日目の夜、寝る前に二日目に着るものをスタックとして積む。
  2. ICPCのTシャツの上に、長袖のTシャツを置く。
  3. 着替えの一番上に名札を置く
  4. 二日目の朝、起きたら名札を身につける
  5. 長袖のTシャツの上から、ICPCのTシャツを着る。
  6. 残りの着替えを着る。

他にも忘れないようにする方法はあると思うので、自分にやりやすい方法をとってください。

通りにくくくしてあるところを通る

通りにくくしてあるということは、通ってほしくないということです。

会場にちょっと頑張ったら通れそうなところ(狭い隙間とか、ちょっと低くテープが張ってあるところとか)があっても、頑張って通らないでください。そこにはとても大事なものが置いてある可能性が高く、それら壊すと大会に参加させてもらえなくなるかもしれません。

これはコンテストが終了したあとにも当てはまります。コンピューター、ディスプレイやネットワーク機器はレンタルか、毎年大事に使っているものです。壊さないでください。どれも安くはないですよね。安いと思う富豪の方は、IISFにお金を寄付してください。お願いします。

触りにくい場所にあるものを触る

触りにくい場所にあるということは、触ってほしくないということです。触らないようにしましょう。

理由は上に同じです。

ケーブルを踏む・触る

ネットワークケーブルや電源の延長ケーブルは踏んだり、触ったりしてはいけません。ケーブルを抜くことは、ルールでも明確に失格の原因として書いてあります。

それらは大会を行うのに大事なもので、断線したり、抜けたりするとコンテストに重大な影響が出ることがあります。

空いている電源にスマートフォンの充電器などを挿すのも、他の電源を誤って抜いてしまう原因になるので禁止です。

スーツケースを持ってくる人は、ケーブルやモールを跨ぐときは持ち上げてください。協力をお願いします。

走る

大会中は絶対に走らないでください。コンテスト中にトイレに行くとき、できるだけ早く行って、席に戻りたいのは痛いほどわかります。

ご存知の通り、運動エネルギーは速さの二乗に比例します。また、走っていると、どうしても足元や周りのことがおろそかになってしまいます。

大きな運動エネルギーをもったあなたが、ケーブルに足を引っ掛けたり、テーブルに当たったりしたら、あなたのチームや他のチームが競技を続行できなくなるかもしれません。

このように、大会中に走ることは危険な行為なので、走っているとスタッフに止められて「Do not run. Please walk.」と言われることがあります。こうなると、急ぎすぎたせいで、かえって時間を無駄にしてしまうことになります。

大会中は絶対に歩いてください。

やっておいた方がいいこと

disqualifyの意味を知っておく

ICPCの全選手に、一つだけ英単語を覚えさせることができるなら、私はこの単語を選びます。

「失格にする」という意味です。受動態のdisqualifiedという形でも使われます。たとえば、

..., or we will disqualify you.

とか

..., or you will be disqualified.

のようなかんじで使われます。...の指示に従わなければ失格にするぞという意味です。

スタッフからこの語が発せられたら、その人の言う事は絶対に聞いて下さい。

アナウンスではなく、スタッフから直接この言葉が発せられた場合は、かなりまずい状況にあると思ってください。

英会話をする心の準備

ICPCの地区大会の言語は基本的に英語です。大会によっては、別の言語のサポートも用意されていることがあるようですが、日本での大会は英語のみが使用されます。

これは、選手とスタッフのコミュニケーションがすべて英語で行われるということです。

一朝一夕で英会話能力がどうにかなるわけではありませんが、スタッフから英語で話しかけられて戸惑わないように心の準備はしておきましょう。

紙の英和辞書を持ってくる

(今までの)日本の地区大会では持ち込みできる紙の枚数に制限がありません。

英語によほどの自信がある場合を除き、紙の英和辞書をお守りに持っていきましょう。(お守りにしては大きいですが)

服装

日本での地区大会は秋から冬の間に行われています。

大会へ行く前に当日の天気予報を確認し、どのような服装で行くか考えておきましょう。

時期によっては過剰かもしれませんが、私のおすすめセットは以下です。

  • 長袖のTシャツ
  • 前の開くパーカーまたはジャケット
  • コート
  • (二日目)Tシャツ
  • (二日目)名札

長袖のTシャツの上にICPCのTシャツを着ることを想定しているセットです。私の長袖Tシャツのおすすめはヒートテックです。

パーカーやトレーナーを着ていく場合は、前がボタンやファスナーで開くものを強くおすすめします。理由は会場の出入りの際に、Tシャツの柄を確認されることがあるからです。よほど寒くなければ、パーカーの前は開きっぱなしか、軽くとめてある程度がおすすめです。

競技環境の確認

コンテスト前に競技環境の仮想マシンのイメージが公開されるはずなので、可能であれば試しておきましょう。

エディタやIDEは何が利用できて、どのように設定すれば、思う通りに動くかを確認しておくことをおすすめします。当日は外部のネットワークに接続できないことを忘れないように。

また、近年は基本的に英語(US)配列のキーボードを使っていると思うので、慣れていない人は注意しましょう。

最後に

以上、私が競技プログラミングスキル以外で大切だと思ったことをまとめました。

みなさんがアジア地区予選で、トラブルなく、全力を出せることを祈っています。

ISUCON13参加記

ISUCON13に参加しました。チームは去年と同じで、blue最高!でした。目標は初期状態からスコアを有為に改善するでした。(去年は改善できなかった挙げ句、環境を壊して初期状態出だしたため

メンバーと役割

saikou9901

主にアプリケーションコードを修正する

blue

データベース係

blue_jam

ICPCのスタッフをやるため、14時すぎに行動開始) ベンチの結果を解析して、改善する場所を提案する

言語と使ったツール

  • Go
  • VSCode +Liveshare(サーバー上で動かす
  • pt-query-digest

練習と作戦会議

ISUCON本に目を通した。(完全に理解をしたわけではない

さくらのクーポンへの案内がなかなかなかったので、デスクトップに環境を立てて、ラップトップから操作をする練習を一人でした。

練習したのは、

  • private-isu
  • ISUCON11予選
  • ISUCON12予選

で、1台構成で行けるところまでやった。

作戦会議では、去年の上位陣の参加記を参照して、どうするか決めた。去年との主な変更点は、

  • VSCodeをサーバー上で動かして、動いているアプリケーションのコードを直接変更する
  • pprofを使う(なお去年はJavaだった

あと、一番大事なこととして、ICPCと被っている都合上、半分ぐらい参加できないことを話した。

さくらのクーポンが手に入ってからは、一回みんなでサーバーのセットアップを試したり、共同編集の練習をした。

当日

9:30

みんなでDiscordにつなぐ。自分はすでにICPCの会場準備をしていたので、イヤホンを片耳に指して他のメンバーが話しているのを聞いていた

10:00

ISUCONは始まったが、自分は続けてICPCの準備をする。チームメイトがサーバーにちょっとした変更を追加してベンチを走らせた結果、ベンチが失敗しているっぽくて大変そうだった。

12:30

ICPCの受付業務に専念するため、Discordから完全に撤退する。

ICPC参加者のメンバーが全員揃っているか、必要なものをちゃんと持っているか確認をしていた。

14:00

受付業務が終わったので、宿泊しているホテルに移動し、作業に参加する。

まず、スロークエリログの設定が1秒になっていたので、それを0にしてベンチを走らせてもらう。

saikou先輩がgetUserStaticsHandlerのN+1を解決しようとしていて、エラーで悩んでいたので、手伝って直す。3981点

スロークエリログを解析したらADMIN PREPAREが一位になっていたので、interporateをONにしてもらう。

スロークエリログを解析して、livestream_tagslivestream_idにインデックスを張ってもらう。5674点

スロークエリログを見て、iconsuser_idにインデックスを張ってもらう。8191点

saikou先輩がmoderateHandlerをいじる(内容はよく把握していない)。9901点

ここまでをやって大体17時ぐらいだった。blue先輩がランキングの計算をSQLを使って頑張ろうとしていたがうまく動かずに断念した。

スロークエリログを止めて最後に再計測して10414点。

感想

目標のスコアを改善するは達成できたので良かった。次はnginxのアクセスログをちゃんと解析したり、データベースにインデックスを張る以上の改善をしたい。

次回はちゃんとスケジュールを確認して、多方向に迷惑をかけないようにしたい。(といいつつ、打ち上げのスケジュール調整で、ダブルブッキングをしてしまったが)

ICPC 2023 横浜大会 スタッフ参加記

今年もOBOG会スタッフとして参加してました。

-X日目

ISUCONに参加登録してから、今年のISUCONとICPCが被っていることに気がつく。申し込んだのが自分な上、チームで参加登録したので、自分が参加しないわけにはいかないだろうということで、ICPC一日目は受付まで手伝うことにする。

-Y日目

去年遅刻しそうになったチームの話が、運営のチャットで話題になってた。遅刻すると失格の可能性があるというのはあまり知られていなそうだなと思った。そこで、ICPCのルールやよくつかわれる英文を、ICPC英語と題してできるだけ毎日ポストしていた。選手に見てほしかったが、自分のフォロワーに現役選手がほぼいなさそうなので、そっちの役に立ったかはよくわからない。むしろスタッフから役に立ったというコメントをもらった。

これをやるために、現役のときより真剣にルールを読んだと思う。

0日目

集合時間の30分前ぐらいに着くように行こうと思って、7時すぎに家を出発した。ただ、風が結構強くてアクアラインが止まるか不安だったので、東京湾迂回ルートを選択し、遅刻が確定する。選手に遅刻をするなと言っておいてこのザマである。

11時過ぎに会場につく。荷物を置いて電源の配線を決めて養生をする手伝いをした。

お昼は中華街で麺を食べた。

戻ってから、電源とネットワークの配線と養生の続きをする。

たぶん、5時頃に配線が終わり、スタッフでリハーサルでやるコンテストと同じものをやった。ここでの任務は

  • 解答コードを提出する。正解・不正解・悪意のあるプログラムの提出が求められる
  • Clarを投げる
  • 外部のネットワークに接続するよう試みる

という感じ。悪意のあるプログラムを提出したり、外部のネットワークに接続を試みたりするのを選手がやると、失格になるかもしれないので、真似をしないように。

インタラクティブを通したかったが、Kotlinの環境構築がうまくいかなくてできなかった。

ネットワークの監督者に「脱獄ができないようじゃだめじゃないか」と煽られたので、来年はそういう攻撃方法を勉強してから臨みたい。

コンテストの練習が終わったら解散。ホテルに行ってから、ご飯を食べに行く。ジョナサンでミックスグリルを食べた。

前日に10km走っていたので、ちょっと足の裏が痛かった

就寝は11時ぐらい。

 1日目

起きてから山下公園まで走りに行って、ガンダムを遠くから見た。

シャワーを浴び、朝食を食べてから会場に行く。

昨年に引き続き受付係を拝命する。受付の流れを確認してからアリーナの整備の手伝いをする。

このあたりから、ISUCONのチームメイトのDiscordボイスチャットに繋いで、なんとなくISUCONの状況を把握しておく。

アリーナの整備では、システムの使い方のマニュアルを配った。

受付開始時間になったら、選手を呼び込み始める。OB OG会のスタッフの主な仕事は、チームメンバーが全員揃っているか、学生証を持っているかを確認すること。また、会場から出ていく選手が、ちゃんと名札とTシャツを身に着けているかを確認すること。

今年は学生証を忘れた人が、若干名いただけで、全チームが時間以内に入場できた。

受付が終わったので、ホテルに戻ってISUCONに参加した。

ISUCONが終わってから、会場に戻ってちょっとだけ手伝いをする。その日の準備が終わってから、OBOG会のスタッフで中華料理を食べに行った。

この日はなぜかうまく眠れなくて、3時間ぐらいしか眠れなかった。

 3日目

会場に行く。

受付の準備をする。2日目は選手が名札とTシャツと学生証を持っていることを確認する必要がある。

名札を忘れた人が若干名と、昨日に引き続き学生証がない人がいた以外は大きな問題がなかった。

今年は受付終了5分前程度までに全チームが入場できた。毎年こうであってほしい。

コンテストが始まってからは、会場内を巡回したり、印刷物を配布したりした。また、今年はトイレに行く選手に、行くトイレのジェンダーを確認し、同行するスタッフの性別を選んでいた。先生はこの決断をしたことをかなり悩んでいる様子だったし、選手には「みたらわかるのにいちいち聞いてほしくない」(その気持ちはわかる)と思っていそうな人がそれなりにいた。でも、自分は必要な配慮だったと思っている。見た目で性別を判断するのは危険なので。

あと、会場内を走っている選手には、歩くように指導をしていた。急ぐ気持ちは痛いほどわかるが、会場の環境を破壊してしまうと誰にとっても不幸な結果になるので、心を鬼にしていた。

コンテスト終了間際には、コーチを会場に入れるタイミングでドアを開ける係をやった。ちょっとSecの方でオペレーションに齟齬があったらしく、ちょっと混乱した。

このあとのタイミングで、出身学校の選手にちょっとだけ声をかけた。

閉会式の解説は聞かないようにしていた。

スタッフに差し入れのドーナツが配られた。毎年余るから遠慮せずに食べろと言われたし、今年のスタッフは後片付けで懇親会に出られないという噂を聞いていたので、本当に遠慮せずに食べた。

閉会式が終わってからは、チームの名前を吊るしてるやつを回収したり、ケーブルの養生を剥がしたり、ケーブルを回収したりした。

ケーブルを回収しきったところで懇親会にに出られるようになった。知り合いに適当に声をかけたりしたが、長く話せるほど社交的でないので、懇親会会場をぐるぐる歩いていた。

机や椅子の片付けを業者がやってくれている。あれ結構大変だからスタッフの仕事じゃなくて助かる。

懇親会が終わったら、選手をゆるっと追い出して、ケーブルの箱詰めをして、みんなで記念写真を撮って、挨拶をして終わり。