週記(2020/09/28-2020/10/04)

09/28(月)

結構早くに目が覚めて、ハーメルンを読んでいた。面白すぎて二度寝できない。結局10時頃に起床報告をした。

昼前、空腹に耐えきれなくなったので学食に行く。夏休み期間中の学食は、弁当のサイズが中しかなくて、かなり空腹の今は1個食べると足りないくせに2個だとちょっと多い、みたいな感じで辛かった。 しかしちょうどこの日から他の店舗の営業も再開して、そちらは大中小が選べるらしい。今日は知らなかったので今度から行こうと決意する。

食事をして、床屋に行って、帰ってきた。即座に布団にダイブしてハーメルンを読み続ける。

午後4時頃、読み終わった。

syosetu.org

信じられないくらい面白い。以前からずっと、上位存在・長命種が人間の発展を見守ったり導いたりする話が好きだと言っているが、これもそういった作品の1つ。しかしこの作品は現在540話あり、歴史のイベントをいくつも丁寧に描いているため、なんというか没入感がすごい。

あまりにも丁寧に描きすぎて、最初100話くらいは話が全然進んでいないように見えて「思ってたのと違う……」と感じていたが、このあたりの出来事も後々重要な役割を持つ、というかほとんど神話みたいな扱いをされるので、我慢して読んでよかった。

数日かけて一気読みしたせいで作品世界に深くとらわれてしまい、しばらく身動きが取れなかった。頻繁に身動きが取れなくなってないか?ハーメルンが面白すぎるのが悪い。

ようやっと身を起こして、サークルの事務作業をする。ICPCの関係でコーチを引き受けてくださる方とメールのやり取りをしていたが、4日くらい止めてしまっていた。サークルメンバーへのアンケートの回答待ち、という言い訳をしていたが、別に回答が出揃っていなくてもメールのやり取りはできるんだよなあ。急いでメールの返信をする。

自分が一方的にフォローしている(相手からフォローされていない)ことを片思いという。フォロバ100%という方針でアカウントを運営していると、これが結構重要になってくる。

向こうからフォローしてきたので返すと、頃合いを見計らって外されて、片思い状態にさせられてしまうことがよくある。これはフォローチャーンといって大規模アカウントを育てる常套手段だが、かなり気に食わないので見つけ次第こちらからも外す。が、そもそも見つけるのが大変。僕は専用のサービスを利用している。

twitter 片思いチェッカー|アプリ認証不要の相互フォローチェック!

ここ数か月全然やっていなかった。海外の大規模アカウントが100個くらい片思い状態になっていたので、片っ端から外す。あとはまあ、普通に僕のツイートが合わなくてリムられたアカウントをリムり返したりして、片思いの数を減らす。絵師とか有名人とか、そういったアカウントに対して片思い状態になっているのは普通なので、たいていフォロー数<フォロワー数+150くらいの状態を維持している。

フォロバ100%だからと言って「片思われ」が一切存在しないかというとそんなことはない。監視アカウントと言って、鍵アカウントでフォローするけどフォローリクエストは通さないというアカウントが数十個くらいある。あとは、そんな極端なFF比ではないのにフォローリクエストが数年保留されているアカウントもいくつかあるのだが、これはたぶん別アカに転生したんだと思う。

いろんな理由でフォローリクエストを通してくれないアカウントが存在するが、これの扱いは人によって対処が分かれがち。ブロック・ブロック解除で被フォローを外す人もいれば、放置する人もいる。僕は放置している。理由は単純で、フォロワー数が増えるとうれしいから。

ハーメルンで別の作品を読み始める。エカスドクィナさんがハリー・ポッターの二次創作おすすめをまとめていて、それから1つ。

syosetu.org

就寝報告できずに寝落ち。

09/29(火)

午前5時くらいに起きる。昨日は寝落ちしてしまったが、日付は変わっていたはずなので、5時間も寝ていないことになる。かなり眠いし二度寝するべきなのだが、いかんせんハーメルンが面白すぎる。スマホに手を伸ばし、読み始めてしまう。こうなるともう寝られない。

そのまま8時間くらい布団で読み続けていた。そろそろ学食が閉まってしまう。特に、昨日言っていた店舗は13時半に閉店である。急いで大学に向かい、食事をした。今日は味噌ラーメン大。

帰ってきて、また布団に寝っ転がってハーメルンを読み続ける。午後9時頃になって、今日絶対にしなければいけないことを済ませるために起き上がる。

まずはメールの返信。サークルでアンケートの回答を催促したところ、ちゃんと全部集まってくれた。昨日送ったメールへの返信が来ていたので、それにまた返信。1日1往復の気の長いやり取り。

あとは少しAtCoderをし、おすすめのなろう小説をまとめていた。日付が変わったあたりで、なろうの更新確認をする。

第2部が完結した。同時に作品も完結らしい。長かった……最近は頻繁に更新があったが、途中3年で3話という意味不明な更新ペースになっていて、正直完結は絶望的だと思っていた。この作者さんは結構多作かつ書籍化されたものもいくつか抱えているので、古い作品は忙しいし顧みる暇がないだろうな……と想像していた。

しかし終わり方はあんまり納得できない……戦闘シーンに突入する瞬間がラストシーンって典型的な打ち切りのイメージがあるぞ。と不満に思いつつ、あとがきのお知らせを読むと、書籍化されるらしい。

書籍化!?

これ6年前の作品だぜ?信じられない!僕が一番好きな作品だと思っているので、書籍化される妄想をしたことは何度もあったが、さすがに古い作品だし、そんな話の影も形もないということは書籍化はあり得ないだろうと思っていたのに。

で、それに伴って全面改稿するのだが、新しい作品としてなろうに投稿していくらしい。それ商売になるのか?ありがたく読ませていただきます。

書籍化の衝撃から回復したので、おすすめのなろう小説まとめを投稿した。

kotatsugame.hatenablog.com

これのジャンル分けは、自分がその作品のどんな要素を求めて読んでいるかを表している。まあでも2つ以上の要素があると感じる作品もかなり多いので、ジャンル分けはあまりよくなかったかも。あとコメントもちゃんと書きたかったのだが、熱意が足りずかなり適当になってしまった。そもそもコメントを付けられなかった作品も多い。

コメントがついていない作品は、別に筆舌に尽くしがたく面白かったわけではなく、逆にあんまり印象が残っていないだけ。そんなのおすすめするなよ……と自分でも思うのだが、このまとめ記事はとにかく数を重視した。掲載分を全部読んだ記録が残っている作品のうち半分くらいは載せたんじゃないか?

好みが似通っている人であっても、刺さるなろうは人それぞれ微妙に異なるはず。だからおすすめ記事といっても自分に本当に刺さった作品を少しだけ載せるのではあんまり他人の参考にならない。数を用意して、まとめ記事を見た人がリンクをたどって個人で判断してもらうのが良い。というか僕がそういうまとめを好み、新しい作品を探している。

布団に入ってハーメルンを読んでいたらまた寝落ちしてしまった。

09/30(水)

朝、起きる。眠いけどハーメルンを読み始めてしまい、二度寝に失敗する。昼頃、ようやく起床報告をして、学食に行く。

本当は学食に行った後そのままゲームセンターでアップデート前に駆け込みでイベントマップを終わらせる予定だったのだが、ハーメルンが面白すぎるため家に帰ってまた読む。

ハーメルンはいつでも読めるのに対して、イベントマップは今日を逃すと次復刻するのはいつかわからない。そんなことは百も承知だが、理性ではなく感情が、ハーメルンを求めているんだッッッ!

今日も今日中にしなければならないことがあるので、午後9時くらいにいったん切り上げるか……と思っていたのだが、ちょうどそのころ物語の山場を迎える。読むのが止められない!そのまま2時間くらいまんじりともせず読み続けて、一区切りついたところでしぶしぶ身を起こしてパソコンに向かう。

メールを送り、少しAtCoderをする。今日はこどふぉのdiv.1があるらしいが、眠いしハーメルンを読みたいしなのでサボる。こどふぉに真面目に向き合っていないので、結構簡単にratedをサボってしまいがち。

実は今日は夏休み最終日なので、2020年後期の履修を組まなければならない。取得単位を丁寧丁寧丁寧に確認する。今期の専門科目は再履修と結構かぶっていてあんまり取れないが、所詮選択必修なので全部取ってもあんまり意味がないどころかキャパるだけ。被っていないものを取るだけでちょうどいい。

結局、今期の再履修は1年生の時に落とした線形代数学と、2年生の時に落とした群論幾何学。1年生の時に落としたやつは、2年生のときは必修と被っていて取れなかったのだったか?まだ負債が残っているとは、嫌になってしまうな。

履修登録は明日からなので、時間割だけ考えておいて、今日は終わり。布団に入ってハーメルンを読んでいたらまた寝落ちしてしまった。最近就寝報告できてないな。

10/01(木)

朝起きて、ハーメルンを読み続ける。

このシーンで読むのに耐えられなくなる。感情がデカすぎて読み進められない。わかるか?これすき。途中から薄々感づいてはいて、お互い名字で呼び合っているのを逐一確認していた。とはいえ、予測可能回避不可能の一撃。

今日から後期なので学食の営業時間も伸びる。それで、無理して昼の学食に行く必要もないこともあり、昼はずっと布団でハーメルンを読み続けていた。午後5時、シャワーを浴びて家を出る。

学食で数学科の友人2人と会った。今日の講義の話題が出るが、まだ資料を参照していないのでよくわからない。あとは履修の話や夏休みの話。

帰宅して、またしばらく布団でハーメルンを読んだあと、履修登録をすることにした。

昨日決めた時間割の科目を登録していく。線形代数学は人数が多いので講義が5個あり、再履修の人は先生を選ぶことができる。これは後回しにして、他のものを登録した後空きコマで何が取れるのか確認する。

探すと結構プログラミング関連の講義って多いんだな。Pythonを使う講義が2つと、R言語を使う講義が1つあった。かなり興味を惹かれるが、Pythonは好きではないしR言語AtCoderで使用できないので、別にいいかな……という気持ちになる。履修登録期間中は意識が高くなりやすいので、注意する必要がある。

コンピュータグラフィックスという講義を発見した。別にプログラミングをする講義ではなさそうだが、かなり興味深い。これは耐え切れず登録してしまった。意識を低くする必要がある。

工学部の科目なので、工学部のサイトで詳細を調べる必要があるが、TLに話題を流すと運よく同じ講義を取ろうとしている人に引っかかった。classroomの講義コードを教えてもらってニコニコ。

線形代数学の先生を、シラバスを確認しつつ選ぶ。期末一発という先生は、実はあんまりうれしくないことを実感してしまったので、無難にレポートとテストで決める先生を選ぶ。

布団に入って数時間ハーメルンを読み、眠気に耐え切れなくなった段階で就寝報告をする。今日は寝落ちじゃないぞ!

10/02(金)

昼頃起きる。生活リズムがだんだんずれてきていい感じ。土曜日はARCなので、夜眠くなるわけにはいかない。ハーメルンが面白すぎて二度寝は不可能なので、最初に起きる時間自体を遅くする必要がある。

ICPCのチーム決めに関して、サークルと顧問の先生の研究室で合同チームを組むことになっているが、これに関するやり取りが佳境に入る。最近メールをやり取りしていたのは、ただこれだけのため。一昨日はこちらでまだチームを組んでいない人たちのレートを渡し、昨日はそれに対する研究室の希望を聞いた。関係する人に確認が取れたので、本決まりの連絡をする。

向こうが了承してくれれば終わりだが、一応それを待つ必要があるので、先にICPCのアカウントを作ってもらうことにする。メールアドレス収集のためのGoogleフォームも用意する。最初はサークルSlackのDMで教えてもらおうかとも思っていたが、それはあまりに原始的だろう。

学食に行く。結構時間ギリギリになっちゃったな。13時半を過ぎているので、大中小を選べる店舗は閉まっている。仕方なく普通に弁当を食べる。

帰ってきて、また布団でハーメルンを読み続ける。夕方、合同チームの了承が取れたので、残りの人たちでチームを組み、発表した。まだチームを組んでいなかった人たちを、僕がレートを見て勝手に組み分けた。圧政。この人と一緒になりたいとかの希望は聞いていたので、それ以外の人たちを何も相談せずに組み分けたのは許してもらえるものと信じている。チーム名を決めてもらうが、これまた出そろうまでにはかなり時間がかかるだろう。

しばらくAtCoderをした後、yukicoderのコンテストに参加する。5完。A問題は最も難易度が低いはずだったが、結構考察する必要があり、時間を取られた。Eは実験すると、ありうる状態の数がそんなに大きくならないことがわかるので、mapでDP。

Fは全然わからなかったのだが、区間DPらしい。うーん、まだよくわからない。こまごまとした等差数列の計算が面倒そう。

ハーメルンは全然読み終わらない。今400話まで来たが、現在投稿されているのは530話。しかもいまだに2日に1話ペースを守り続けている。これは本当にすごいことだ。

最近読んだ「東方遺骸王」も500話越えだったが、あちらは1話あたりの文字数が少ないらしい。実際、合計文字数を見れば1,487,449文字に対して3,745,967文字である。どちらも大長編であることに違いはないが、それでも差は大きい。

10/03(土)

今日はratedなのでちゃんと寝ておくことにする。相変わらず5時間くらいで一度目を覚ましてしまい、ハーメルンに手が伸びそうになるが、それを必死の思いで抑え込んで二度寝した。結局10時間くらい寝られたのでよし。

寝っ転がったままハーメルンを読んでいると、大学生協の弁当の配達と宅配便があった。対応していると、ちょうど隣人が帰宅したので、挨拶でも……と声をかけた。

ちょっとした立ち話になって、「もしかしてこたつがめって名前のアカウントでTwitterやってますか?」と聞かれた。大正解である。FFの方だった。

同じ共同住宅内にTwitterをやっている人が他にいる、というのは別の住人から聞いていたらしく、垣間見える僕の生活リズムがツイッターでの言動と一致していることで疑いを持ち、過去のツイートから確信に至ったらしい。すごいな……僕はいっつもカーテンを閉めっぱなしなので、隣人の部屋に明かりがついているかどうかさえ知らない。

過去のツイートから確信に至ったとは言っても、同じ共同住宅に住んでいればわかる程度の話で、僕の住んでいる場所がツイートから特定できたというわけではないらしいので、ちょっと安心。実際のところ、丁寧に分析すれば住所はかなり絞られると思う。インターネットって怖いね。

僕は大学でもこたつがめと名乗っているし、ツイッターアカウントとリアルが紐づけられることについては全く気にしていないのだが、普段のツイートを見てリアルの僕を想像するとちょっとウッとなるのは確かだと思う。致したとかつぶやきまくってるしね。これについては、僕がどうこうする問題ではないので、諦めてくださいと言うほかない。

あとは、せっかく隣人と話す機会なので、普段夜中にYouTubeを垂れ流しているのが音漏れしていないかを聞いてみた。特に聞こえていないらしいので安心。机があるのは会話している隣人の部屋とは逆側の壁なのだが、スピーカーが向いている方向的に考えると、音が響くとしたらこっちだよなあと考えていた。(この「こっち」というのは不正確な言葉だが、正確に書くと冗長なのでこうしている。)

水曜日に再履修で全学教育の線形代数学を取っている。専門教育が対面かそうでないかはチェックしていたが、そういえばこれが対面かどうか確認していなかった。どこで情報を得るのだろう、とツイートしたら、ホスフィンから教えてもらった。

東北大学 全学教育ホームページ Tohoku University General Education

オンラインらしい。やったぜ!

夜になって、ARCに参加した。4完74位でパフォーマンス2641、レートは5下がって2687。順位から予想していたほどひどい結果にはならず、安心している。人が増えたのと全体のレベルが上がった影響なのかな?2年前にこの順位を取っていたら、橙ギリギリのパフォーマンスが出ていたと思う。D問題にかなり手間取って、通したときはかなり遅いと感じていたが、その後4完の人がかなり増えたので、危ないところだった……という感想。いやレートが下がったのでアウトなんですが。

Cはパッと見よくわからなかったけど、N=100なのでいろいろできて、考察した条件1つだけでDPしてOK。

DもDPだけど、ついうっかりべき級数にしてしまう。べき級数にしていいことは何もない。

多項式の列があって、それの区間の積を求める。セグ木は明らかにダメなのでDisjoint Sparse Tableを使って書き上げたが、これも全然間に合わない。

もう少し観察すると、積を求めたい区間は常に正と負(DSTのときはオフセットを足して正にしていた)にまたがっているので、ここで2つに分けて0からの累積積だけ持っておけばよい。まだ少し間に合わない。

負に対応する多項式は、それぞれ正のものを流用できることに気づく。まだ微妙に間に合わない。

あとは最大ケースの答えを変えない範囲で多項式の次数を削ったり、答えが対称的であることを利用して後ろ半分は以前の結果を参照したり、そういう高速化をしたら最大ケースでもTLの4secにギリギリ収まるようになった。提出すると3820msでAC。

実際には、掛ける多項式の非ゼロな係数はK個しかないので、毎回愚直にDP遷移をしたほうが良い。他の考察はすべてよかったが、このDP遷移でべき級数を持ち出したのが本当にアホ。ギリギリ通ったからよかったものの……。ちなみに愚直にDP遷移をすると1300msだった。多項式の次数を削ることはしていない。

E問題に取り掛かったころには残り30分だった。N<=6に気づいて、座圧後の数列を固定することまで書いたら残り15分。ここで焦って考察ミスをし、場合の数を求められなかった。実際にはDPを座圧して高速化する必要があるらしく、もとより15分では望み薄だったか。

ハーメルンを読み進める。クディッチのシーンを読んでかなり興奮した。ルール的にゲームとして成立しているとは思えないのだが、フィクションの世界でバトルを演出するのには向いてそう。

そういえば、D問題で1300msを出したコードは、手元で最適化オプションをつけずにコンパイルして実行すると最大ケースで1分くらいかかる。こんな極端に変わるものなのか……。

10/04(日)

朝寝て昼に起きた。6時間も寝ていないらしいが、今日は特にコンテストもないし、生活リズムを前にずらす意味でも起きることにする。

昼食を食べた後、しばらく布団でハーメルンを読んでいた。ハリー・ポッターとオリ主がホグワーツを卒業してしまい、ちょっと読むペースが落ちてしまう。

自分は原作終わったあたりで放置してる。

個人的ハーメルンおすすめ小説集 - -!=x=!-

納得。

ACLRubyに移植するプロジェクト、最近全然触れていない。コード自体はおおむね完成していて、今はドキュメントを書いているらしい。僕が作ったライブラリのぶんくらいはドキュメントを書くべきだろう。

convolutionは実装したが、convolution_llは実装していない。NTT-Friendlymodを3つ用意して復元するのだが、本家は何を計算しているのかよくわからない。まあRubyはオーバーフローの心配がないことだし、mathの一部となっているcrt(中国剰余定理の復元)でよいだろう。わざわざconvolution_llにまとめる必要もない……と考えていた。

実際には、そもそも十分大きなmodconvolutionすればよいのである。例えばFFTが誤差なく計算できる限界ともいわれる(要出典)10^15くらいであれば、mod 1125900443713537 = 2^29*2097153+1を用いてNTTすれば一発で求まる。3回もNTTするよりは定数倍的に格段に優れるだろう。このmodを用いると、10^9くらいのmodのときの倍の時間がかかったが、3倍よりは速い。

ではlong longにギリギリ収まるような畳み込みはどうなるかというと、mod 18446744073944432641で試してみたら、さっきのものからさらに倍以上の時間がかかるようになった。つまり10^9くらいのmod4回分以上、ということだ。こうなってくるとNTT3回のほうが速い。う~ん。

よくよく考えると、10^15以下の数値を復元するためにはmod2個でいい(これは前にも書いたような記憶がある)。結局定数倍的には全然変わりがないどころか、大きな数値ではむしろ悪化してしまう。まあ10^15くらいのところではギリギリ大きなmodのほうに軍配が上がるだろう。試してはいない。

Rubyのライブラリはこのくらいにしておいて、今日は僕のライブラリも整備する。modintを書くぞ!

と気合を入れてACLの実装を読んでいたが、enable_if_tをググったりTLに質問を投げたりしていたら数時間が経過してしまった。一応納得はできたが、ここに書くのはちょっと面倒すぎる。そもそも僕が実装して僕が使うんだから、そんな真面目にチェックを入れる気にもならない。痛い目を見たら考えることにする。いやでも怖くなってきたな……。

そんなことをしていたら、こどふぉのdiv.2があるらしい。直前まであんまり出る気がなかったのだが、div.2だし適当に出てもいいよな、ということでレジってしまった。

A~Dまでを爆速で解き、この時点で全体2位。Eも解いてFが解けなくて5完か~と思っていたら、システスでEが落ちた。意味不明。

真面目に出ていないのだから真面目にupsolveする気もない。放置する。

Fはnuipさんのツイートを見て何となくわかった気になっておいた。小さな素数はセグ木なりDSTなり使って計算すればよい。大きな素数が問題なのだが、平方分割することにして、バケット内では「次に同じ素数が出現する場所」の降順に並べ、累積積を取ればよいらしい。バケット内でLCMに寄与するものというのは、LCMを計算したい区間より右に行かないと同じ素数が再度出現しないものであるから、先頭のほうに固まる。よって適切な位置の累積積を見ればよくなる。

明日の1限はリアルタイムのMeetの講義で、スライドの穴埋め形式らしい。穴埋めってなんだよ、漢字ドリルじゃないんだぞ。げんなりしていたら、ホスフィンから講義録画の存在を知らされる。つまりリアルタイムで受講しなくてもよいということだ。いいね。