週記(2021/10/11-2021/10/17)

10/11(月)

先週はかなり久しぶり(あるいは初めて?)に、日付が変わる前に週記を投稿した。その後は人の日記を読んだり、ちょっとコードゴルフをして、布団に入った。新しく1作ハーメルンを開いて読もうとしたが眠気には勝てず、いつの間にか寝落ちしていたらしい。直前まで意識を保っていて、寝る前には就寝報告のツイートをするぞと心に決めていたのに、本当に一瞬で意識を落としたらしい。

Chromeの履歴からは、午前2時過ぎに寝落ちしたことが分かった。

午前8時頃目を覚ます。どう考えても睡眠時間は足りていないのだからすぐ眠れば良かったのに、昨日読み始めたハーメルンを開いてしまった。そしてそのまま、なんと午後0時半まで延々読み続けていたようだ。1話当たりの文字数こそ少ないものの、実に150話近くを読み進めた。眠気が耐え難くなってきたこと、一方夕方からインターン先の定例会があることを鑑み、この時間には寝ておかなければならないだろうということで、頑張ってハーメルンを切り上げて寝た。

次に、午後3時半に起床。午後2時から30分おきに目覚ましをかけていたはずだが、眠すぎて結局この時間まで起きられなかった。先週はインターンの進捗を全く生やせていないため、今日の定例会の前に少しでも進めておこうと思ったが、すべてが無に帰した。仕方ないので内容がない進捗報告のスライドを作った。それを発表して、特に何も言われることなく終了。

定例会やそれに付随する諸々が終了して、そこで話した内容からちょっと業務モチベが上がったのだが、ハーメルンの前に人は無力。また開いて先ほどの続きから読み始めた。午後9時から2時間読んで、途中でうっかり布団に移動したのがまずかったのか、また寝てしまった。

午前1時起床。atgolferの更新を見てしばらく頑張っていたが、どれも縮められなかった。またハーメルンの続きを読み進める。パソコンの前と布団を往復しつつ、なんと午前7時半までかけて現在の最新話まで一気読みしてしまった。

syosetu.org

「俺は竈の女神様」。原作が「ダンジョンに出会いを求めるのは間違っているだろうか」というまだ触れたことのない作品でちょっと敬遠していたのだが、ちょうどダンまちが始まるあたりでエタっているということで、読んでみると前半分はほとんどオリジナルだった。後半はクロスオーバーが主軸だが、それも知っている作品が多く、問題なく読めた。最初はクロスオーバーだと気づいておらず、ダンまちの二次創作だと言っているのに東方古代スタートが始まりそうになったときはびっくりしたものだ。

内容は非常に面白い。少し前にハーメルンの捜索掲示板を漁っていた時期があったが、その頃「上位存在」みたいなワードの捜索に頻繁に登場していた作品で、その名に恥じぬ立派な上位存在っぷりであった。ただ人の発展を見守っているかというとあんまりそんな感じはせず、同じく上位存在たちとワイワイしていた、という印象。もちろん信仰を集めたり畏敬されたりという描写はあったものの、メインではなかった。

しかし、Fate/系の話はどこにでも出てくるものだ。他の作品でも、何の脈絡もなく「作品キャラがサーヴァント化したら」みたいな文脈で謎の展開が挿入されることがあって、そのたびにほとんど知識のない自分は読み飛ばし気味になっていたのだった。しかし、しょうがないのかもしれない。ゲームもプレイしないしアニメも漫画も見ない自分であってさえ、主にはTwitterで流れてくる絵経由で、伝説上の人物たちのビジュアルをFate/系列のもので固定しつつある。影響力が大きすぎるのだ。

エゴサーチをしていたら、去年のTCO Regionalで僕がACRushと1対1を行い、勝利したことについて言及している中国語の投稿を発見した。競プロ歴10年以上のACRushに対して僕のことは「后浪」、検索すると「新人」のような言葉で表現されていて、むず痒い気持ちになった。まだICPCも現役であるのだから、心だけでも若くあらねばならない。

zhuanlan.zhihu.com

なんとなく興が乗ったので、インターンの業務に手を付けることにした。とりあえず1つモデルを実装してみる。本当はそれくらいで切り上げるつもりだったのだが、思ったよりうまくいったし、学習自体もデータ数を絞ることで短いスパンで試せるので楽しくなって、昼過ぎまで延々コーディングしていた。今日は1on1の予定があったわけではなかったのだが、無理を言って昼から急に予定を入れてもらい、今日コーディングしていた成果を報告した。またいくつか疑問点を解消したり、自分の認識の正しさを確かめたりした後、次に進めることを決めて終了。

学習を進めればランダム値の具合によらず一定の結果を出すものだと思っていたが、うっかり同じプログラムを何回も回してしまうことがあって、その結果が思ったより異なっていたので、モデルの性能を評価するために乱数のシード値などを固定することにした。randomnp.randomtorchのシード値を設定し、torch.backends.cudnn.deterministicTrueに設定することで結果が一致したモデルと、それでもなお一致しなかったモデルがある。後者はライブラリを呼び出しているだけなので、その中で何かやっているのだろうか。

日記を書いてから布団に入り、ハーメルンを開いたが、すぐに寝落ちしてしまった。午後4時だった。

10/12(火)

午後9時半起床。またしばらくハーメルンを読んでいたものの、その作品は序盤で読むのを止めてしまった。

ハリーポッター二次創作だったが、どうやら連作のクロスオーバーの一部らしく、主人公が別作品由来で、しかもそこからいくつもの二次創作を経てチート能力を身に着けてきた……という設定らしい。こういうのも最初から読んでいけば受け入れられないことはないだろうが、見た感じ僕の知らない作品ばかり渡り歩いているようで、読む気にはならなかった。さらにチート能力を振りかざして原作キャラをおちょくっているのもあまり気に入らなかった。

食事して午後11時半からCodeChef Starters 15 div.2……と思ったら15分こどふぉった。

https://www.codechef.com/START15B

全完して優勝した。1766→1969(+203)。div.2を抜けるにはあと1回コンテストに参加する必要があるようだ。

Aはよい。Bは109以下の数を2000回素因数分解する必要があったので、念のため\sqrt{10^9}以下の素数を求めておいた。3500個程度しかないらしいので、余裕で通る。冷静になると毎回\sqrt{10^9}まで見ても間に合いそうだ。Cは上位桁から貪欲。

Dは面白かった。f(R)-f(L-1)として答えを求めることを考える。下の桁を担当する値を決めると、上の桁として対応させられる値の上限が決まるので、これをソートして尺取り。実際は尺取りでなくても二分探索で通ったようだ。Eは自明、Fは面倒な木dp。Fの遷移を書くのに少し手間取り、これでは優勝できない!と焦っていたが、ふたを開けてみると僕が全完した時点では5完すら他にいなかったようだ。div.2に限らなければ、unratedで参加した中の優勝者は僕より先に全完している。

div.3用の問題を含めて全部解いても1時間もかからなかったが、そのあとTwitterを見たり順位表を眺めてニヨニヨしたりして、結局さらに1時間くらいを無駄にした。

火曜日5限の講義の課題をこなす。Python積分値をできるだけ正確に数値計算せよというものだった。提出方法が面白くて、すでにGoogle Colabと連携された.ipynbファイルが用意されており、それを開いて編集するらしい。Google Classroomを使っていてこそのシームレスさという感じがする。数値計算については、講義スライドにDE法というのが載っていたので、それを適当に書いておけばよさそう。

DE法は実は初めて聞いたが、なかなか興味深かった。幅が有限の区間を無限の区間に置き換えていると思ったが、そもそも幅が有限だからといって結局内部の点は無限個あるのか。また無限の区間であっても、端のほうの重要度をうまいことほぼゼロにしているのも面白い。数式としてみればその理屈もわからないことはないが、実際に計算して精度が上がるのは結構びっくり。

また布団に入って少しハーメルンを読もうとしたが、眠気が強い。午前4時半就寝。

10/13(水)

午前8時前に起床。夢うつつながら、頭皮のかゆみに耐えかねて頭をかきむしった記憶がある。実際枕が毛だらけになっていたので、手で払い落し、いまだ気になるかゆみを抑えるべくシャワーを浴びた。

火曜日の昼間1on1が終わってから(つまり日記では月曜日)回していた学習の途中経過、具体的にはLossの変化をグラフにした。こういうちょっとした作業もやる気が出ないと全然手を付けられない。しかしグラフにしてみてみるとなかなか綺麗な曲線だったので、報われた感じがした。

しばらくパソコンを触ってから布団に戻る。寝ようとしたが眠れず、スマホをずっと触っていた。途中腹を壊したりして、さすがに夏も終わったのにブランケット1枚で寝るのは無謀だったと反省。そのうち気合を入れて掛布団を引っ張り出しておきたい。そのままハーメルンを読んでいたが、正午あたりにやってきた眠気に身を任せ就寝。

次に目を覚ましたら午後7時になっていた。せっかく朝起きたのでゲーセンにでも行くつもりだったのに思いっきり寝てしまった。まあ今日は天気もあまりよくなかったようだし、その点はセーフか。ちょっと食事してからまた布団でハーメルンを読み続け、午後11時過ぎになって身を起こした。

atgolferにPAST8の問題が流れてきていた。いつの間にかPAST8がAtCoderのトップページに表示されるようになっていたらしい。どうせ表示されないのはただの設定ミスだろうと思って、専用でクロールするような設定は入れなかった。

午後11時35分からCF #748 div.3。全完3位。

Dashboard - Codeforces Round #748 (Div. 3) - Codeforces

Aはよい。Bはちょっとびっくりするが、下2桁を全探索すればよい。正数を探す必要があるので、下2桁が00だったりしたらどうするのか、という気持ちになるが、与えられる数字にleading zeroが存在しないという制約から、00を選んだとしてもその左にちゃんと非ゼロの数字が存在してくれる。Cは、猫がn-1にたどり着く前に穴に入れるネズミの数を数えればよく、これは穴までの距離が短いものから貪欲に取ることで達成できる。最初n-1ではなくnで計算していて、適当に1引いたらサンプルが合って困ったが、ちゃんと自分で納得できて提出した。D1は差のgcd。

D2は答えを全探索する。ある値gが答えになることは、a_i\bmod{g}を集計して\frac n 2個以上が同じであるか?によって判定できる。この判定はmapの代わりに配列を使えばO(n)で可能なので、それを2\times 10^6回行う。\sum n\le 100という制約から変数による剰余の計算を2\times 10^8回行うことになってしまいかなりドキドキしたが、エイヤと出すと780msで通った。Eは葉から多始点bfsかと思ったが、落ちた。冷静になると、トポロジカルソートにおけるキューに入れるタイミングを次数1以下になったときと定めたような計算をする必要があった。Fは桁dp。Gは、'['または']'のあるインデックスを偶奇に分けてカウントし、それらが同じになることがコスト0で正しいかっこ列に変化させられることの必要十分条件。累積和で求まる。

全完した後しばらくTwitterを見ていたはずだが、いつの間にか布団に倒れこんで寝たらしい。Chromeの閲覧履歴によれば、午前1時半に寝落ちしたようだ。その直前に開いていたページはTLに流れてきたブログ記事で、確かに布団に寝ころびながらそれを開いて読み始めた記憶がないでもない。

10/14(木)

意識を取り戻したのは午前6時だった。またスマホを触ってハーメルンを読み続けていた。

午前10時くらいになって、無理やり切り上げて布団から出た。今日はゲームセンターに行く。夕方から1on1があるので、それに向けて今のうちに何らかの進捗を捻り出しておくことにした。ちょっと気合いを入れれば終わるようなタスクを1つ片づけて切り上げ、しばらくパソコンを触ったあと、出かけた。

東北大学川内キャンパスの近くの交差点は、朝から夕方まで歩車分離式になっているが、交差点を斜めに渡るような横断歩道がペイントされていないため、斜め横断は常に不可能である。ほとんど無視されているような規則だが、定期的に警官が交差点に立っており、斜め横断を見るや否や止めて注意するという光景が見られる。大学生活4年目にして初めてこれに引っかかった。これまでは、自分の前を走る人が止められているのを見てギリギリで警官に気づいたりしたが、それでもセーフだったのに。

食事してゲーセン。今日は新しい靴を履いていたのだが、足首の前のほうに余裕がなく、前方に体重をかけてゲームをプレイしていると靴が食い込んで痛かった。東方の新曲については、先週譜面動画を見ながら難しそうだと言っていたが、案の定13の2つはAJが出なかった。

今日アップデートでチュウニズムに追加された新曲の譜面動画を見ていた。13に追加された2つがどちらもかなり強めに感じられる。AJは難しそうだ。

週記(2021/10/04-2021/10/10) - kotatsugameの日記

理論値が1譜面増えた。前回ゲーセンに行ったときに狙っていたもの。

午後4時過ぎにゲーセンを出る。食事でもしようかと思ったが、あまりおなかが空いていなかったのでそのまま帰宅し、シャワーを浴びて午後5時から1on1。前半で進捗を報告した後は、扱っているデータの様子と学習結果を見て次回までの課題を決める。ビジュアライズするのにちょっとしたコードを書く必要があって、すぐ書けるので今書いてお見せします!と自信満々に宣言したはいいものの、設計がすぐに思い浮かばずしばらく手が止まってしまうなど、情けない場面があった。

1on1が終わってからも少しコーディングを続けていたが、学習を回して放置するフェーズに入ったので切り上げた。しばらくYouTubeを見てから布団に入ってしまい、すぐ寝落ち。午後7時半だった。午後8時半に一瞬起きてTLを見たような記録があるが、またすぐ寝たようだ。

10/15(金)

午前2時起床。夢を見た。

またずっとハーメルンを読んでいたが、今日は夕方から院試ゼミのメンバーで飲み会をする予定。午前10時くらいになって、さすがにもう一度寝ないとまずいという気持ちになり、目を閉じてみた。しかし眠れない。結局起きることにして、とりあえず学食に行った。

昨日寝る前に回していた学習が終了していたので、結果をちょっと加工した後、パラメータを弄ってまた学習を回し始めた。この作業は10分もかからないものなので、勤務時間の記録にどう入れたものか悩む。今後学習のための時間が長くなっていったらどうすればいいのだろうか。

僕が本格的に稼働し始めた3週間くらい前から、インターン先のSlackに自分の名前がついた(ほとんど専用の)チャンネルを用意してもらっている。業務の進捗とかはTwitterと同じ感じでそこに投げ入れているが、これは自分の性にかなり合っていると感じる。そういうチャンネルは他の社員の方も持っている。以下の記事のような運用になっているのだろう。

Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ 〜Problemが10分で解決するチャットを作ろう〜 - 株式会社クラフトマンソフトウェア

日記を書いていたが、かなり眠くなってきてしまった。飲み会は午後5時からで今ならまだギリギリ間に合うと信じて、昼寝することにした。睡眠の周期を考えて90分後に起きることにして、午後2時過ぎに横になった。

実際にはこのツイートをした後も布団の上で眠気に耐えようとしばらくクネクネしていた。なんとか身を起こして午後4時過ぎに家を出た。店の位置と地下鉄の駅の位置をあまりよく分かっておらず、歩いたほうが早かったかもしれないところを、うっかり地下鉄に乗ってしまった。せっかくお金を払うのだからと思って2駅ほど乗ってゲーセンの最寄駅まで行ったが、1プレイする時間はなく、そのまま店まで歩いて行った。思ったより遠くて、結局地下鉄1駅分くらいは歩いて戻ったらしい。店はここ↓。

http://wabisuke.style.coocan.jp/

店の前につくと他の3人はすでに揃っていて、即座に入店。予約の関係で2時間しかいられなかったが、せり鍋に加えて海鮮サラダ、魚のから揚げ(何の魚だったか忘れた)、馬刺しなどを注文。また日本酒も店のおすすめなどを含めて3種類、それぞれ1合ずつ注文した。院試お疲れ様会ということで少し高めのお店にするべくここが選ばれたが、実際1人4000円くらいで、自費で飲み食いした中ではかなり高いほうだった。

おいしいのだろうとは思うが、味をあまり気にしていなかったためよくわからない。量については腹6分目という感じか。女将が鍋を差配しつつあれこれ話していて、そういうタイプの接客も初めて受けるもので高級感を感じる。話の内容はせり鍋の蘊蓄、来店した有名人、店でやっている落語の寄席、くらいだっただろうか。これも途中から興味を失ってしまった。以上、店についてネガティブな言い方をしてしまったが、しかし4人でお酒を飲みながら話すのは非常に楽しかった。

最初は焼肉屋に行こうという話で、僕が以前腹痛で救急車を呼んでしまったためちょっとトラウマ……と言ってこの店に変えてもらった経緯がある。多分焼肉屋のほうが飲み食いしながら話すという目的には合致していたのだろう。またそのうち別のお店に行こうという話になったので、もし焼肉屋に行った場合はちゃんと肉を焼くこと、生肉をつかむトングを分けることを徹底したい。

飲み足りないので2軒目に行く。以前2週連続で行った、1杯200円のバー。今日も注文の内容をリプライツリーにまとめた。

先週の金曜日にも行ったバーに再度入店した。

週記(2021/02/22-2021/02/28) - kotatsugameの日記

飲みながら今日もまたソートなぞなぞをしていた。QuizKnockの動画から知った人もいてびっくり。競プロer特有の文化かもしれないと心配していたが、問題なく楽しんでもらえたようでよかった。出題されたものは記録をとっていないのであらかた忘れてしまった。

店を出て別れ、ゲーセンに駆け込んで閉店まで1時間弱プレイした。これまでの感覚から言えばそこまで酔っているわけでもなかったようだったが、それでも本調子でないことは確かで、ただただスコアが出なかった。閉店後地下鉄の駅に向かって歩いているとマックが見えてきて、なんとなく入店してしまった。ポテトのLとコーラのMを頼んだが、お酒で腹を下し気味だったので、コーラのほうはSサイズでよかった。ポテトをつまみつつしばらくハーメルンを読んでいた。マックのトイレを借りるかと思ったが、明らかに泥酔している人が出てきたため敬遠して帰宅。終電もなくなっていたため、延々歩いて帰ってきた。

シャワーを浴びて布団に入り、すぐ寝た。午前2時前だった。

10/16(土)

午前9時前に目を覚まし、またハーメルンを読んでいた。今日は午後2時まで読んで、ARCに備えてまた寝た。午後4時くらいに生協の弁当配達があって一瞬起きたが、この時はまたすぐ寝ることに成功した。

午後8時起床。atgolferを確認すると、マラソンのコンテストで同じ問題3問×本選とオープンの合計6問が一気に更新されていてひっくり返った。3問あるのはいいけども、なぜ問題idを変えたのか……。どうしようもないので眺めてしみじみしつつ、午後9時からARC128に出た。

Daiwa Securities Co. Ltd. Programming Contest 2021(AtCoder Regular Contest 128) - AtCoder

3完遅めで何もかもが崩壊した。最近ヤバい。

Aから難しい。A_iのうち最も値が大きいものを考えると、その右(つまりそれ以降)にまだ交換しない日があるなら、そのうちA_iが最小の日と組みにして交換することにしても損しない。以降は選んだ組を無視して同じことを繰り返すが、銀に交換→金に交換というステップの繰り返しを崩さないように最小値を検索する範囲を制限して行う。選んだ最大値より最小値のほうが大きくなったら切り上げる。Bはつい最近インターン先の勉強会でほぼ同じ問題が扱われており、難なく解けた。といってもA問題をACしてからの時間を見る限りFAは僕より1分以上速いらしく、頭が回っていないなあという感じ。

……このツイートを引用するかどうかは迷ったのだが、多分ちょっと調べるとわかる情報だろう。

C問題は難しかった。d_i=x_i-x_{i-1}などと置いて書き換えてみても、あまり見通しは良くならない。しばらく唸っていたがどうしようもないので、元の問題に戻って解の形を考えてみると、どうにもd_i\ne 0なるiは少ないんじゃないかという気持ちになる。N\le 5000ということもあり、d_i\ne 0なるiを2つ決め打って計算するO(N^2)のコードを書いたら通ってしまった。誰かのツイートで見た言葉だが、問題を解釈して一般的な問題に落とし込むと元の問題の構造が失われてしまうことがある。今回はその一例だったかもしれない。

Dは解けなかった。隣接する要素が等しい位置で数列を区切り、それぞれ解くことにして、解き方はdp、更新先が区間になるだろうというところまで考えた。その更新の区間を求めるコードが全然違っていたようで、半分くらいのケースで落ちるようなコードしか書けなかった。スタート地点からある程度先「まで」の区間に対して更新するだろうと考えていたが、TLを見る感じある程度先「以降」の区間に対して更新するようだ。なんてこった。

コードゴルフをする。AはOctaveで、まず数列のdiffを取り、それが0より大かどうかの列を作ってまたdiffを取るようなアルゴリズムで解ける。BはRuby。高度な機能を持ち出して全探索するより、ソートして場合分けを並べたほうが短くなってびっくりした。Cは線形計画問題なのでOctaveのglpkで解けるようだ。

夜中CodeChefのSnackdownにレジってQualの問題を解いた。来週火曜日までで、週記を投稿する予定の日にまだ終わっていないため、ここでは何も言わない。

最近熱心に読んでいたハーメルンを読了。「阿礼狂いに生まれた少年のお話」。

syosetu.org

非っ常~~~に良かった。設定についてもオリキャラと原作キャラの繋がりがいろいろあって楽しめたし、前半分のほうは主人公の強さも印象的だったが、後に行くにつれて、そうした表面的な面白さの奥に潜む主人公と周囲の人妖の関わりの物語がだんだん現れてきたように感じられた。特に阿求の章に入ってからは、すぐそこまで迫った主人公の寿命があり、その中で友誼を結んだ妖怪にとっての死別のとらえ方だったり、人里の先立った人・残される人とのやり取りだったりが感傷的に描かれていた。ラストで主人公が亡くなり終了かと思ったら、幕間という形で亡くなった直後の幻想郷の様子が描かれ、僕はそういうのに弱いので泣いてしまった。

朝方はずっとコードゴルフをしていた。今日起きた時にatgolferに流れてきていた更新は取り返せなかったが、ちょっと前のコードをずっとタブに開いていて、改めて考えていたら少し縮めることができた。その後日記を書いたら午前11時だったので、布団に入る。今まで夏用のブランケット1枚を引っ被って寝ていたが、さすがに寒くなってきたので、秋用の掛け布団を出すことにした。布団カバーをかぶせてみると微妙にサイズが合っていないように見えるので、もしかしたら冬用の布団のカバーを出してしまったのかもしれないが、今更戻すのも面倒。

布団に入って昼過ぎまでハーメルンを読んでいた。TLを見て、日曜日の昼からJOI一次予選(第2回)があることを知った。第1回は大体1月前に開催されたが、その時は予選が終わって1時間もしないうちにAtCoderに過去問が公開されて、起きたころには自明な最短はすでに取られていたのだった。

今日の昼頃行われたJOI一次予選の問題が2時間前に公開されていてびっくりした。

週記(2021/09/13-2021/09/19) - kotatsugameの日記

今回はそんな失敗をしないようにしたい、ということでもうすぐにでも寝て、午後4時くらいに起きることにした。午後1時就寝。

10/17(日)

午後4時起床。まだJOIの問題はAtCoderで公開されていない。非常に眠いので寝たい気持ちが強いが、そうしている間に公開されたら悔しいので、頑張って起きていることにした。この時点では、公開されたらすぐ取り掛かって、ABCまでまたしばらく寝ようと考えていた。

atgolferの更新を見ながらコードゴルフしていたが、一向に公開される気配がない。コードゴルフでは、gets.bytes$<.bytesに置き換えられることに気づき、検索するとこれで縮むコードが結構あったので拾ったりしていた。午後7時あたりでいったん切り上げて日記を書き、午後9時からはABC223に出た。実は今日は午後8時からCFでcombinedがあったのだが、ABCと被っていたので見送ってしまった。

AtCoder Beginner Contest 223 - AtCoder

A問題はちょっとひっかけ気味。0円に対してはNoと答える必要がある。逆にこの設定があると、正規表現/00/にマッチすることがYesと答える場合の必要十分条件となってくれる。最初は/00$/でないとダメだと思っていたが、入力される値の最大値が1000なので/00/でよい。B問題はRubyで書いた。

CからはC++。距離を二分探索して、左右からそれぞれかかる時間の差が0になる点を見つけた。Dはトポロジカルソート。Eは↓の問題からの類推で試すべき敷き詰め方のパターンを予測し、対称性からループなどでまとめて書いたらかなりスッキリした。Fは遅延セグメント木で括弧列を±1に直した累積和を持つ。Gは木の最大マッチングが葉から貪欲でよいことを元に全方位木dp。HはDisjoint Sparse Tableを貼ったがマージに602回くらいの計算が必要で、そこをどうしても落とせなかった。

atcoder.jp

もう結構な期間ゆっくり実況を出していないが、一応AtCoderのコンテストに参加するときは画面キャプチャを撮っている。撮っているつもりだったのだが、最近3回分でサブモニタがキャプチャされているのに気づき、非常に残念な気持ちになった。以前同じ現象が発生して、ちゃんと直したはずだったのだが……。パソコンを再起動すると元に戻ってしまうとか、そういうことだろうか。以前とは使っているケーブルもモニタも変わっていないはずなのだが、抜き差しすることに副作用があるのか?

ふと思い立って画面キャプチャのテストをしてみたところ、これまで真ん中のメイン画面をキャプチャできていたのが、いつの間にか左端の画面をキャプチャするようになってしまっていた。

週記(2021/09/13-2021/09/19) - kotatsugameの日記

コードゴルフ。Aはsedでよい。BはRubyで頑張っていたが、コンテストが終わってみるとVim 25Bがあって何も勝てないという気持ちに。Cは2つの火がぶつかる時間が\frac 1 2\sum \frac{A_i}{B_i}と求まることを解説を読んで知った。これを使ってdcで頑張って現在52B。符号を弄ったり式変形を繰り返した結果、なぜこれで答えが出るのか自分でもよくわからないコードになった。

DはPythonheapqを使う問題に見えていたが、提出を眺めているとRubybsearch_indexinsertを使ったコードがギリギリ通っているのを見つけた。実際書いてみると、たまにTLEするものの数回出せば確実に通っていく。そのコードを縮めることにした。連想配列を使うような書き換えをしているとC++脳ではlogがついて遅そうに見えるが、Rubyのそれはhash mapなので思ったより速かった。

Eはパターンをまとめて頑張る。.permutation.any?を3段に重ねるようなコードを書いた。どの長方形を固定するか、縦横どちらに固定するか、残りの2つを縦横どう置くか。コードを文字列のjoinで作ってevalしていたが、入力読み込みのときに改行がついてくるのに気づかず不要なセミコロンを入れており1B負けてしまった。あとは手付かず。

最短コードが1700問になった。

今日が終わってしまったが、まだJOIの問題は公開されていない。せっかく頑張って起きたのに……という気持ちもあるが、今週は生活リズムを崩し続けた一週間だったため、最後にこのような形で多少整ったのは不幸中の幸いか。せっかくなので空が白み始める前に寝たいものだ。