週記(2020/12/28-2021/01/03)

12/28(月)

先週の週記を投稿してからAGC051Cのupsolveをした。不変量だとわかっていれば解けたかというとこれも微妙。解説の最後の方で出てくる「実は操作は1種類しかしません」というのに気づけたか自信がない。今回は数分考えてわからず、その部分まで解説を読んでしまった。

布団に入ってハーメルンを読む。午前10時、就寝。

夕方に一度目を覚ましたあとも即座に二度寝してしまい、結局午後9時に起床した。第5回PASTの過去問が公開されているのに気づいたのが意識覚醒の決めてだった。

急いでパソコンに向かい最初の数問を通す。A問題は自明すぎて公開直後に最短コードが出ていた。B問題は似たような「解法」が既出なのでそこから最短コードを拾ってくる。

atcoder.jp

タイトルが洒落ていて印象深い。ちなみにどちらも(文字列の前処理をしたあと)「2つある文字を見つけて先に出現する方を削除する」ことを繰り返すと解ける。ただ僕の頭ではこの2つが同じ問題だとは思えない。

次にC問題。36進数への変換は、そういう機能がある言語を使えば良い。dcbcは16進数までしか対応していない。正確には、より大きな基数だとアルファベットになってくれない。今回はRakuが短いだろう。

get.baseとすると、getStr型であるためメソッドが存在せずRE+getとしてInt型にする必要がある。これは(+get).base(36)ではなく+get. base(36)と(空白を入れつつ)書いても動く、という発見があったらしい。これは面白い。ただもっと短い書き方があって、base +get: 36method a: b,c...と書くとa.method(b,c...)と同じ意味になる。+をつけるために括弧が要らなくなって短い。

Dはよくわからないので、とりあえず通しておいてから最短コードを見る。特に面白いことはやっていないが、隙があったので縮めておく。E以降を見てもあまり簡単に短くなるようなものはなさそうなので、再度D問題に戻ってくる。

文字列としてのソートをすると、0が先頭に多いほうが先にくる。このあと数値としてstableなソートをすると良さそう。そう考えてbashVimで試していたが、どうにもうまく行かない。ランダムケースを生成して試すことにした。mt19937 rng(114514)というコードでランダムケースを生成したら全部一緒のテストケースになるなどのヘマをやらかしつつ、落ちるケースを見つけることができた。000などを比較するとまずいらしい。確かに、この場合は0が少ないほうが先頭に来る。

そこで、各行の末尾に適当な文字、今回は'1'をつけてソートしてみることにする。このもとで、bashだとsort -n1回でうまく行った。Vim:sortを使うと、末尾に文字をつけていてもうまく行かないようだが、文字列の処理はVimに軍配が上がる。Vimからbashsortを呼び出すことで27Bになった。

ここでECR101があったので出た。1時間ちょっとで全完して6位。

Aは左から'('、右から')'で埋めて判定。与えられる文字列に'('')'がそれぞれたった1つしかないことを読み落とした人がたくさんいたらしい。太字で書いてあるんだよなあ(ただ'('')'がクオートされていないので、見にくくはあった)。

Bはやるだけ。Cは上下の端を持って順に見るだけ。Dはsqrtを使って小さくしていく、と思ったらWAを出した。53で割ると2になる。3>2なのがまずかった。こういう場合はもう一度割るようにして、それでも2e5において操作回数をはみ出ないことがわかったので提出、AC。もしかしたら微妙なケースで落ちるのかもしれない。

Eは難しい。しばらく考えていたら急に「長さkの部分文字列をbit反転したもの全てのmex」だとわかった。下20桁だけ持てば良い。Fは当たり前。誤読してk番目に遠い頂点のことを考えていた。この場合kを越える最小の部分和を考える必要があって困っていた。読み直すと解ける。

今回もスクリーンキャプチャを撮っていたが、あとからコンソールやブラウザを拡大していないことに気づいた。まあ見えるか。

終わったのでTwitterに戻ってきたら、PASTのD問題が縮められていた。くっつける文字は'A'でも良かったようだ。ちょっと試してみたところ、別にもとの数字と間が空いていても良かったので、文字列処理を工夫してさらに-2B25Bになった。

真夜中だが、第31回TechFUL Coding Battleの入賞商品のアマギフが届いた。深夜までお疲れ様です。当時バチバチに暴言吐いたのに、運営側の人に引用RTでおめでとうございますと言われて気まずい気分になる。気まずいだけで僕が間違っているとは思わないが。

午前6時半くらいまでかけてECR100の動画編集(セリフ付け)をしていた。終わったと思ってニコニコしていたらゆっくりの表情を変えなければならないことに気づいて呆然。今度から効果音付けも含めて同時に作業するようにしたい。

同時に帰省準備も進めておく。具体的には持ち帰るノーパソのアップデートなど。あと、久しぶりに最短コードをクロールし直していた。Rubyでフィールドの内容にCRLFが含まれるcsvファイルが読み込めず、非常に困った。出力のときに\rを削除するようにして、念の為もう一度クロールし直したら、1000個ほど処理したあとこの提出を処理しているときに落ちてしまった。

atcoder.jp

invalidUTF-8を含む文字列でgsubとかdeleteとかのメソッドを呼び出すと落ちるらしい。対処法をいろいろ調べて、結局scrubを噛ませることにした。本当は不正な文字列は\x??みたいにバイト表記をしたくてscrubにブロックを渡してガチャガチャやっていたが、どうにもうまく行かず、結局素のまま。

ゴミ出しとかもやっていたら、気づけば午前10時を回ってしまっていた。これから寝ると帰省できない可能性が生じるので、このまま徹夜で新幹線に乗ることにする。エンコードした動画を投稿して、適当にノーパソと本を持って出発。

仙台駅についてお金を下ろし、切符を買ってからどこかで食事をしようと歩いていると、動画でゆっくりの声が聞こえない部分があるとの指摘が来た。慌ててフリーWi-Fiを捕まえて当該箇所を確認すると、確かに聞こえない。後ろに表示していたはずのクレジット表記も存在せず、BGMだけが流れる中ゆっくりが交互に口パクする恐怖映像となっていた。まあ挨拶してるだけなので声が聞こえないのはいいが、クレジット表記が見えていないのはまずい。かといって今から修正もできないので、動画の概要欄に書き足しておいた。

丸亀製麺で食事する。セルフサービスの店は客がいろいろ触れる必要があってヤバそうという気持ちになる。あとシンプルに混んでいた。

ゲーセンにも行っておく。普通に2クレ、スマホアームが設置されている台に移動して1クレ。動画を撮ったので、帰省してから投稿した。

新幹線に乗る。

仙台始発の東京行きやまびこに乗る。1両にどれくらい人がいただろうか?仙台を出発するときは1両に1桁人しか乗っていなかったが、東京に近づくにつれて単調に増加した。僕は大宮で降りたが、このときも別の車両からは10数人降りていて、思ったより多いなあという感じ。 大宮で乗り換えの待ち時間が20分発生した。1つ飛ばしで座るベンチは、空きが少しだけある。平常時とは比べるべくもないが、そこそこの人がいる。 大宮からまた自由席に乗る。今度は最初からかなり人がいる。1列に1人くらいか。これは目的地・富山に着くまで単調に減少し、僕が降りるとその車両にはもはや1人しか乗っていなかった。

週記(2020/08/10-2020/08/16) - kotatsugameの日記

今回も仙台駅始発。人数に関してはあまり変わりはない。大宮では、今日は1時間の待ち時間が発生した。僕が降りた駅でも数人乗ってきて、ここから金沢まで新幹線か〜という気持ちになった。

途中ECR101のhackフェーズとシステスが終了して、4位となっていた。E問題でロリハを使った人がたくさんいたらしく、衝突させられていた。僕の解法だとそういう文字列マッチング系統のアルゴリズムを使う場所がないのでかなり謎に思っている。

新幹線内(と帰ってきてから数ページ)で「放課後探偵団2」を読んだ。特に「願わくば海の底で」という短編が良かった。東日本大震災から5年後を舞台に、当時を振り返りつつ行方不明の人が最期にいた場所を探す話。ちゃんとミステリー風味になっていて、またお話としても面白い。

SASUKEを見つつTwitterをしていた。SASUKEを見ながらTLを眺めると、同様にSASUKEを見ている人が浮かび上がってきて面白かった。カクテルパーティー効果。ところで、この時間は絶対無駄なのにテレビの前から動けなかった。やっぱりテレビは最悪の家電。

微妙に元気なのでこたつで寝落ちせず、風呂に入ることができた。出ることができなくなりかけたが、ギリギリ脱出。するとまた微妙に目が覚めたので本でも読むかと思ったが、今度こそ寝落ちしそうになったので慌てて就寝報告した。午前1時だった。

12/29(金)

昨日の日記に吸収された。

12/30(土)

午後2時起床。13時間も寝られて偉い。途中、謎の高齢男性が謎の音を発しているのが聞こえた気がして一瞬目を開けた。これが現実だと認められなくて再度寝た。

床屋に行って、本屋さんに寄って帰ってきた。今日も新刊を2冊買った。

レコード大賞がテレビで流れていたが、知っているのが「香水」しかなかった。LiSAは名前を聞いたことあるぞと思ったのに歌が「紅蓮華」じゃなくて謎、と思っていたら今日歌うものも鬼滅の刃関連の歌らしい。

PASTの残っていた問題を解きつつラノベを1冊読んだ。「強気なお嬢様が俺の料理で甘々に」。かなり面白いと感じた。主人公の、料理にしか興味がなく他の物事を一切無駄だと断じる様が気に入った。ただラノベの宿命としてヒロインに興味を持ち始めてしまう。それはそれで、一般的なラブコメと同様に楽しめる。

このような感想をツイートしたところ作者に拾われた。ラノベを新刊で買って読むと、最近は結構作者のTwitterアカウントに補足される。僕もそれをわかっていて作品名とともにツイートしている。ファンレターを書いたことはないが、ツイートするだけで作者に届き得るのは面白い。本を出す人は結構雲の上の人という感じがあるが、実はそうではないというのが最近わかってきた。

こどふぉのGood Bye 2020に出るので、環境を整える。今年は実家のデスクトップではなく持ち帰ってきたノーパソを使おうと思う。

異なるサイズのディスプレイを同時に使うのは難しい。マウスの移動が直感的でない。設定でずらしたりすればいいのかもしれない。試しにということでPASTの問題を最後まで解いたが、HHKBに慣れてきた状態でHHKB以外のキーボードを使うと破滅する。

PASTの問題に関しては感想はない。今回は特別簡単なように感じたが、最終問題に関する言及をTLで見てしまったからかもしれない。前の有志コンで出た云々というツイートに心当たりがあって、まああれだろうな……と思っていたら確かにそれだった。

Good Bye 2020は7完で135位。Hに崖がある状態でGに無限にペナを付けてしまった。predictorは+9なので、最近微妙に違うのを勘案してもIGMのまま年を越せそう。

Aはよく読めなかったがサンプルを見て完全に理解。(0,1)(1,0)に読み間違えていた。Bは前からやるだけ。Cは、こういうのは貪欲に変えていいはずだったが証明ができないのでとりあえず書いた。サンプルがあったので提出。うっかり1WAしたがアルゴリズムに問題はなく、次で通った。冷静になるとこの貪欲は当たり前。

Dも自明。Eもバラすだけなのに丁寧に紙で計算していた。結果を見て初めて気づく。Fは出力が辞書順最小でなければならないことを見落として1WA。そもそも根本的にアルゴリズムを変更する必要があった。最初はUFの連結成分に1点だけの頂点を含むかフラグを持とうとしていたが、これはUFの実装に手を加える必要があった。もうちょっと考えると、超頂点を設定するだけで良いことに気づけた。

Gは再帰的にやる。1を2つに分けようとすると1がそのまま残ることに気づかず、別の部分を高速化していた。最初にs_0とマッチングするのは、「任意の1文字」を含むパターンマッチなので難しい。2乗だと間に合わなさそう。畳み込みの方法は流石に大げさなので、以前PCKで見たbitsetを用いる方法で実装した。ある文字を見たときに、それがパターンのどの文字と一致するかを前計算しておいて、今何文字目までマッチしているか?を表すbitset&=する。あとはそれをシフトしつつやっていけばよい。

終わってからラノベをもう1冊読んだ。「姫騎士征服戦争」。古めのやつで1巻打ち切り。なんとも言えない。

日記を書いている間にシステスも全部通ってハッピー。ただしもう午前6時なのはいただけない。結局午前7時就寝。

12/31(木)

午後4時半、起床。昨日のこどふぉのレート更新が来ていた。2643→2656(+13)だった。年末なのでレーティング変化をまとめてツイートしておく。

チュウニズム、別に辞めたわけではないが、レートが一切上がっておらずびっくりした。確かに既存曲の新規鳥はご無沙汰かもしれない。

去年より2167問多く解いた。AtCoderで1000問弱、あとはCodeforces、yukicoder、AOJで300〜400問くらいの新規ACか。AtCoderはOther Contestsを巡回したのが効いたのだろう。ABCで毎週6問増えるとはいえ、それでも300問にしかならない。

競プロ流行語大賞の発表があった。僕が関係するものでは、Vec<Vec<Vec<Vec<Camera>>>>とペペロンチーノの作り方がそれぞれ1ptと2ptでランクインしていた。ありがたいことだ。

kotatsugame.hatenablog.com

「百億の金貨と転生者」を読んだ。そこそこ面白かった。設定とかはいい感じ。

紅白が始まる。概ね読書をしていて、興味のある歌手の出番だけ見ていた。「香水」とGReeeeNと「夜に駆ける」。GReeeeNは最初黒いシルエットで出ていたのに、歌い始めたら急に顔まで鮮明になったのでビビった。最初は放送ミスを疑っていたが、どうやらそういう演出らしい。戸惑っている間にキセキを歌い始めたので、慌てて歌に集中した。

「夜に駆ける」は非常に良かった。歌っている場所も気になっていたが、あとからツイートで流れてきた。

「雪には雪のなりたい白さがある」を読んだ。短編5本。どれもちょっと陰鬱なスタートで、そこからなにか希望を得たりする過程が描かれる。創元推理文庫から出ていたが、特に日常の謎の話ではないようだ。あらすじに「約束の真実が明らかに」と書いてあったのでそういうつもりで読んだのだが、純粋に人の気持ちとかの話だった。ともかく、面白かったことに違いはない。

このあたりで買ったり読んだりした本に関する記録の12月ぶんをつけ、1年を通して合計した。

去年は290冊読んだらしいので、減っている。買った本の冊数は去年は記録しておらずわからない。先週の週記に書いたことが達成できてよかった。

現在は366-105冊なので、あともう6冊読んで、せめて1年で366-99冊読んだことにしたい。

週記(2020/12/21-2020/12/27) - kotatsugameの日記

日付が変わったあと、2020年に読んだ小説・なろうからおすすめを10個くらい選んでブログ記事にまとめようと挑戦してみたが、本の選定から躓いてしまった。その本がどのくらい好きかなんてふだん一切考えないから、「印象に残っているか」をもとに判断しようとしたのだが、それはシリーズ全体として見て巻数・文章量が多ければ当然印象に残る。かといってシリーズの中途半端な巻を挙げようとしてもそんなピンポイントに覚えていないし、冊数の少ないシリーズに絞るのもなんだかな、という感じ。

あとは、実際に挙げてみたら思ったよりラノベが少なかったというのもある。一般小説の数倍ラノベを読んでいるはずなのに、絞り込んでみれば半々になってしまった。ラノベが一般小説よりも低俗であるという認識は拭い去り難く、今も心の奥底にこびりついている。これを如実に物語る結果となったので、表に出すのには気持ちの整理がつかない。

部屋にある読了本を実家に持って帰ってもらうことにする。

週記(2020/11/09-2020/11/15) - kotatsugameの日記

これが部屋に置かれていたので、本棚に詰める。詰める前に一旦全部出して床に積み、写真を撮った。その後本棚に詰めたあともう一度写真を撮っておいた。カウントしたら126冊だったが、棚を前後2列で使って収納したら2段にも満たなかったのが衝撃。

午前5時、就寝。

01/01(金)

午後3時半、起床。昨夜からずっと涼宮ハルヒの直観を読んでいて、午後10時半くらいに読み終わった。誤植が話題になっていたのを思い出して探してみようかと思うも、面倒になってツイッターで検索。直接何ページなどと書いたツイートは見つからなかったが、電子書籍で購入した人が全文検索の結果をツイートしていたので、それの前後の文章をもとに誤植の箇所を特定し、ツイートした。

本の感想はあんまりない。単体で読んでも十分面白い話だとは思うが、徹頭徹尾「涼宮ハルヒシリーズの続刊」という意識で読んでしまって、読めただけで大満足という感じ。

主人公の発言がほとんど地の文になっているのがなんとも読みにくい。

週記(2020/12/21-2020/12/27) - kotatsugameの日記

以前このようなことを書いた。涼宮ハルヒの直観も、キョンの発言はだいたい地の文になっているが、こちらは格段に読みやすい。この違いはなんだろう。結局誰がどこを喋っているかがわかるのが重要で、その点涼宮ハルヒシリーズとは長い付き合いだからセリフから発話者を特定しやすいということだろうか。

読書記録のブログ記事は12000字を超えてしまい長過ぎるということで、ちょうど年も変わったことだし新しく作ることにする。

kotatsugame.hatenablog.com

昨日から、1階のWi-Fiルーターから2階の自室に電波が届かない!とイライラしていたが、Wi-Fiルーターに問題があったようだ。父が1階のパソコンからインターネットに接続できないことに気づき、ルーターを再起動したところ直った。

日付が変わってから午前4時半くらいまで寝ていて、一旦起きたあと再度入眠できなかった。この寝落ちの前後ではTechFULの「新春 TechFUL Coding Battle 2021」を進めていた。どれが何点だったかは公開してよい情報だったはずだ。

今回はかなり注意深くコーディングを進めており、結果として最終問題以外のスコアは理論値を出せたと思う。タイムボーナスというのがあって、これは目標タイムより速く正解できればその分スコアが高くなるものだが、スコアの計算式を忘れたので何分以内に解ければ最大にできるのかわからないのが怖い。このせいでひたすら焦ってしまう。

結局、最終問題でめちゃくちゃ詰まってしまった。煩悶しているうちに夜が明け、親が起きてきてしまった。朝ご飯を用意してもらったはいいものの、その時点でまだ解けていなかったので食卓につけず、申し訳ない気持ちになる。それから10分くらいでなんとか正答にたどり着くことができたのは良かった。それまで1位だった人のスコアは990点で理論値だと思っていたのだが、どうやら今回は問題数が多かったらしく、僕のスコアはそれを上回る1001点になって、この日記を書いている現在は全体1位だ。

食事してちょっとラノベを読んだあと、夜のABCに向けて再度入眠。午前11時半だった。

01/02(土)

午後7時起床。午後3時くらいに一瞬起きて書き残した夢日記が下書きにあったので、投稿。いわゆる初夢である。

食事・入浴を済ませたらすぐABC187が始まった。優勝した。A問題のコードゴルフには1分くらいかけたが、それ以外は特にすぐ短くなりそうな問題がなかったので、最後まで突き進んだ。解法も全問すぐにわかったのでよいタイムが出せた。

A問題はdcが短い。BはRuby以外試していない。CとDはPerl。ここまではコードゴルフの話。

E問題は任意の点対でやろうとするとLCAが必要になるが、今回は辺の両端が対象なのでどちらが根に近いかわかればよい。これは深さを計算しておくとわかる。

F問題はO(3^N)が思い浮かぶが、N<=18なので少し怖い。そこで、遷移の際にあるbitを必ず含むようなものだけを考えた。計算量解析はしない・できていないが、3^Nよりは少し小さくなるだろう。最大ケースがサンプルにあって、十分な速度で通るので提出、AC。冷静になるとO(3^N)をそのまま書いても良かったようだ。

B問題に関しては、x+yiという複素数に関してy.abs<=x.absを調べるところで大幅な改善があって最短を取られた。((x+yi)**2).real=x**2-y**2>=0で良いようだ。

「セプテムレックス」というラノベを読んだ。7つの大罪のそれぞれを背負う悪魔が出てきてなんやかんやする話。各悪魔には特殊能力がある。「怠惰」の悪魔が主人公。

槻影「堕落の王」も似たような設定。これは僕のラノベ遍歴のほとんど最初期に購入した作品でかなり印象に残っている。僕が初めて読んだ槻影さんの作品でもある。これ自体は2巻で打ち切りになってしまったようだが……。

将来について少し考える機会があった。生きていくだけなら、学部卒でプログラミングの仕事をすれば大丈夫だろうと楽観視している。ただ、高校の先生から言われた「お前は将来なにかすごいことをすると思っている」という言葉や、数学で興味のある分野を探すこともできていないのが未練として残り、数学科にしがみつこうとしている。4年生になるとゼミが始まるので、そこで何らかの結論が出せるだろうか。「とりあえず修士には行く」は正解なのだろうか。

考え始めると嫌な気持ちになるので、考えたくない、が、考えなければならない。

1/4が提出期限のレポートが存在する。12/22に掲出されてからずっと放置していたが、そろそろ手を付けなければマズい。演習のレポートだが、この科目は講義も演習も今セメスター一度も勉強していないためである。講義資料が11回ぶん上がっているので、頑張って目を通していくが、Twitterやってる時間と半々くらいになってしまう。結局途中からラノベを読み始めてしまい、この日は第4回の冒頭で終了。レポート問題も少し眺めてみたが、1つ目の大問の(3)で詰まってしまった。一応2つ目の大問は解けそうだが、焼け石に水

布団に入ってから更に1時間ちょっとハーメルンを読んでいた。意味不明。午前7時半、就寝。

01/03(日)

午後6時起床。帰省してから有意に睡眠時間が伸びている気がする。非常に困る。基本的に7時間くらい寝たら起きるだろうという見込みで一日のやりたいことを考えているのに、実際はもう全然ダメで、何もできていない。

とりあえず夕食を食べてラノベを読む。「いわくつき魔族教師と天使候補生」。著者の柳実冬貴さんといえば代表作は「対魔導学園35試験小隊」だろう。本棚に4年積んである。

読み終わったら午後9時だった。講義資料を読む作業に戻らなければならない。残り8回。このあと6時間くらいずっとPDFファイルとにらめっこしていて、第10回まで目を通した。第11回を読む前にレポート問題を見直すと、大問1が何を言っているかについてはわかるようになっているので、ここで一旦レポートを作ってみることにする。

似たような問題が例として講義資料で紹介されているので、それを見ながら書く。「〇〇のガロア群が位数4の巡回群となっていることを示せ」にどう答えるかひとしきり悩んだ。どう悩んだか言語化するために講義資料を見直していたら、わかった。ガロア群の元がある多項式の根の間の置換と見れることを納得できていなかったようだ。そういう補題も講義資料にちゃんと書いてあった。ここが怪しかった(例から多分そういうことをすれば良いだろうというのはわかっていた)ので、議論がフニャフニャしていた。

大問2まで書いたところで切り上げる。そこから先は問題を読んでいなかったので、とりあえず今日は読むだけにして明日やろう。明日が期限。もう午前6時になってしまった。