週記(2021/07/26-2021/08/01)

07/26(月)

先週は週記を投稿してから午前9時半くらいに寝た。

午後1時半起床。今日はコロナウイルスのワクチン接種、1回目の予定だ。

朝方メールが届いていた東北大学のワクチンを予約した。

週記(2021/07/12-2021/07/18) - kotatsugameの日記

予約した後すぐ、富山の実家のほうにワクチン接種券が届いたので、郵送してもらっていた。ワクチンを接種するにあたり、「予診票」と「接種記録書」に記入して持っていかなければならない。このうち「予診票」はワクチン接種券の封筒に2枚同梱されていたので、そちらに記入。「接種記録書」はプリントアウトして持っていく。家に体温計がないので体温がわからなかったが、それ以外の記入は済ませた。そのような準備をしていたらけっこういい時間になったので、接種場所である仙台駅前のヨドバシカメラに行くことにした。

本当は学食で昼食を摂り、購買で買い物していったん家に荷物を置きに帰るような予定を立てていたが、そのような時間はなさそう。体温計などの買い物だけして、荷物を持ったまま地下鉄で仙台駅に行った。駅前につくと予定時間の10分くらい前だったので、丸亀製麺で急いで昼食を摂った。

ワクチン接種の時間は結構あいまいらしい。僕が行ったときは、確か午前9時から午後3時45分までの予約の人が受け入れられていた。東北大学が用意した摂取会場というような話を聞いていたが、実際は市民の方に紛れる形で受け付けから摂取までが進む。受付のところがボトルネックになっているのか、それ以外で作業を待つような時間はなかった。

朝家で書いた「予診票」について、実は東北大生専用の書式があったらしい。一見すると同じだが、上の余白に記入欄が増えているのと、下の項目がいくつか埋まっている。受付で知らされた。予診票を書かずに来る人も多いのか、そのために用意された場所があり、そこに座って書き写す作業が発生した。それ以外はスムーズに進み、15分の待機時間も何事もなく終了。最後に、受付で渡された接種手続きのスタンプラリーのような用紙を回収されるコーナーがあり、そこだけは東北大生専用の窓口があった。

富山県から送られてきたワクチン接種の書類には、県外で摂取するときは「住所地外接種届」だのが必要と書かれていた。これ以上ほかに何かするべきことがあるのかと質問してみたが、これは「仙台市に対して」提出すべき書類で、しかも東北大生は全員必要ないとのこと。心配していたのでスッキリした。

仙台駅前には謎のアンパンマンの石像がある。

せっかく駅前まで出てきたので、ゲーセンで遊ぶ。ちょっと手元動画を撮ったりしたが、あまり良いものは取れなかった。せっかく1発AJが出たのになぜか録画データが壊れてしまったり、緊張でアタックを出すのを何回かやったら癖がついて下手くそになったり。そのうちに微妙にワクチンを打った腕が痛くなってきたので、13をプレイするのを控え、12+最後の未AJ譜面と向き合うことにした。

まだSSSすら3回くらいしか出していない気がする。特に前触れなくシュッと出た。意識していたのは、フリックと小粒が絡むところは全押し端フリックで処理すること、52小節の右手3鍵左手16分は右手を少し早めて3鍵の終わりと16分の2ノーツ目、4ノーツ目の終わりを一緒にすること、くらいか。後者は昔は全押しで通していた気もするが、今やってみたら全然通らなかった。

午後9時くらいにゲーセンを出ると、周り中の飲食店がちょうど閉店したところだった。サイゼすらも閉まっていて、この先どうすればいいんだという感じ。仙台駅をふらふらしていたら、営業している本屋さんを見つけたので、うっかり吸い込まれて5000円使ってしまった。この本屋は午後9時半閉店だったらしい。手持ちのお金が心もとないので、夕食は立ち食いそばになった。

帰宅して購入した本を撮り、ツイート。

撮影した手元動画もいくつかツイートした。HalcyonもAJ時の運指を撮ろうとしたが、1か所どのように擦っていたか忘れた個所があり、事故った。そこ以外はAJだったので、自分としてはいい感じだと思う。

買ってきた本を読みたいが、目がシバシバして眠い。午前1時半くらいに就寝。

07/27(火)

午後2時前に目を覚ます。ワクチンを打った左腕がめちゃくちゃ痛む。どのような大勢で寝ていても痛いので、本当につらい。そのまま眠れずに午後4時になってしまったので、泣く泣く身を起こすことにした。

富山県出身の大関・朝乃山が新型コロナウイルスに感染してしまったらしい。地元に帰るたびに朝乃山のニュースが流れているので、四股名に見覚えがあった。

Nキチさんから赤達成お祝いのお酒が届いた。これは先週木曜日(07/22)の酒盛りのときに購入するか迷っていたお酒だったので、ギリギリ被らなくてよかった。購入しようと思っていただけあり、かなり気になっていたので、送られてきたのは非常にタイムリー。

学食に行って夕食を摂り、帰宅。人の週記を読み漁る。よこの週記には、よこが先週のABC・ARCに出た様子が綴られていた。そこに書かれていたARC124-Bの解法は、実は嘘解法のように思われるが、それで通ったのならコードゴルフとしてかなり革命的。いそいそと実装して投げたらWAだったが、テストケースの内訳を見るといつの間にか追加されていたafter_contestでしか落ちていなかった。いつ追加されたのか調べると、なんと今日の昼間らしい。昨日のうちによこの週記を読んでおけばよかったとひとしきり後悔していた。

aとbのxorテーブルがあるとすると全ての列に登場する数字が「よい数」である

よこ週記 2021/7/19-25 - よこのブログ

atcoder.jp

昨日買ってきたラノベを読んだり、院試ゼミの担当の問題の解答を作成したり、YouTubeを見ていたりしたら午後9時になった。左腕が痛いと、そこをかばうように変な姿勢になるため、結局全身が痛くなる。全身の痛みというのは風邪の症状なので、頭も痛いしなんとなく熱がある気がしてくる……実際に熱があるのではないか?昨日買ってきた体温計で測ってみると、37度3分だった。立派な微熱であった。

どうしようもないので、さっきまでやっていたことを同様に続けていた。真夜中になって、明日の院試ゼミで担当する問題の解答に(今回もホスフィンの助けを貰いながら)一段落つけられたので、Nキチさんから送られてきたお酒を飲むことにした。アルコール度7%だし割るものもないのでロックで飲む。飲み比べセットということだったので、3種類を順に飲んでみた。僕は梨が一番好きかな。

yukicoderの問題を解く。先週木曜日のコンテストの問題は全然解いていなかった。Bは場合分けで、空文字列が回文ではないというのはかなりよくわからない定義であった。C問題は累積輪の累積和っぽい感じで、引き算する部分は適当にサンプルを合わせる。

問題文一行コンテスト - yukicoder

Bを解いた段階ですでに酔っぱらっており、かなり気持ち悪くなったので、体調が悪い時に飲酒するものではないなという気持ちになった。しばらく横になっていたら収まったのでCを解き、Dは面倒だったので諦め、日記を書いて布団に移動。ちょっとだけなろうを読もうと思ったら、スマホを握りしめて寝落ちしてしまった。午前4時過ぎだった。

07/28(水)

午前11時、目覚ましで起床。ちょうどこの時間から院試ゼミの予定だったが、かなり眠いのでもうちょっと寝ようかな……という気持ちが芽生えてくる。

布団の上でコロコロしていたら、ゼミのメンバーからLINE通話がかかってきた。どうやら、僕がちょっと前にSlackで「起床頑張ります」という内容の投稿をしていたのを見て、気を使ってくれたのだろう。人に気にかけてもらえると、かなり嬉しい。起き上がらないわけにはいくまい。顔を洗ってトイレを済ませ、Zoomに接続した。

今日のゼミもかなり有意義だった。毎回、一度覚えていたけれど忘れてしまったものを拾い集めるような気持ちで参加している。有理数の稠密性とかもウッとなってしまったのでWikipediaで定義を再確認しておいた。ある位相空間上で定義された関数が「全点で不連続であること」を示す問題があった。位相の文脈で1つの点における連続性というのはほとんど扱った覚えのない話なので、定義が出てこない。休憩時間などを利用してチマチマ調べていたところ、どうにもネット上の資料や教科書に書かれたことが一致していないように思える。この話を少し振ってみたところ、僕が「近傍」の定義を間違えていたことが分かった。勝手に開であると思っていたが、そのような注釈はない。

そういえば、ゼミの最中に体温を測っていたが、もう熱は下がってしまったようだった。左腕も痛みはだいぶ取れている。喉元過ぎれば熱さを忘れると言うが、昨日辛かったことは現実なので、2回目はもうちょっと準備を整えてから望みたい。冷えピタはあったほうがよいだろう。

午後2時半くらいにゼミが終了。院試ゼミの面々で金曜日の昼間に街で食事をすることになった。楽しみ~。

僕は東北大学競プロサークルの代表をすでに2年務めているが、実は任期が1年なので、更新のタイミングでメンバーの同意を得なければならなかったようだ。ほかにもサークルの規約はいろいろ策定されているが、あまり守れていない。面倒さは感じるものの、おろそかにするとすぐサークルが崩壊するはずなので、気を付けたい。今は僕の方針で全ての活動を参加自由としており、幽霊部員がかなり多いため、すでに崩壊しているのかもしれない。

ともかく、代表を2年やってしまったわけだが、さすがにそろそろ引継ぎをしなければならない。多分もうしばらく僕ができないことはないが、それは健全ではないだろう。いまだに碧黴さんが契約しているサービスもいくつかあり、碧黴さんが大学にいる間に何とかしておく必要がある。ということで、とりあえず次のサークル代表の立候補を募ることにした。自薦で決まってくれればいいが……。

Slackに投稿してから布団に転がり、ラノベを読んだ。午後5時から午後8時半くらいまで寝落ちしていた。起きてからまたラノベを読み続け、この日は3冊を読了した。

「公女殿下の家庭教師」9巻。面白かった。主人公が認知されてきてそうで、目立つのは好みの展開なので好き。しかし文章について、毎巻のように読みにくいということを言っている。今巻はセリフからキャラを判別するのが難しかった。ヒロイン全員に1言ずつ喋らせるのは無茶だろうと思う。

「嘘と詐欺と異能学園」。買ってしばらく寝かせてあったが、Twitterでお勧めされていたのを見て読むことにした。かなり面白かった。中盤、ヒロインが主人公のことを考えて勝手な行動を取り始めたあたりがかなり辛く、相棒なら報連相をちゃんとしてほしい……!という気持ちになったが、それらもすべて終盤で回収されてスッキリ終わった。ラストで衝撃の事実が発覚したけど、シリーズ1巻でもうそれをオープンにして大丈夫なのだろうか、という気持ちになる。

イラストはkakaoさんが担当している。最近ラノベでよく見るイラストレーターだが、だいたいお色気シーンが挟まっていて、「そういう」印象があった。しかしこのラノベではそういうシーンがなく、びっくり。正直微妙なお色気シーンならばないほうが好みだ。「新妹魔王の契約者」くらい吹っ切れてくれるといい(?)んだけど。

「推しが俺を好きかもしれない」。よかった。中盤の特定のシーンから目に見えてヒロインの態度が変わるのが非常にわかりやすくて安心する。微妙な描かれ方をするとわからないからね。ひと悶着あった後、とりあえず友人関係となるのもいい感じ。

列車の窓から黒い羊が見えたとき、その羊の少なくともこちら側半分が黒いことしか保証されず、他の羊に関しては何も言えないのと同様に、作中で明言されない限り、ヒロインは主人公が好きなのではなく、今でもただ主人公とお友達になりたいだけである、という可能性を否定しきれない。

週記(2021/03/29-2021/04/04) - kotatsugameの日記

夜にこういう投稿を見かけたのだった。レビュー自体は読んでいて気分が悪くなる類のものだったが、noteのほうはかなり気持ちの良い書き方というか、むしろ楽しむための前向きさを感じて、非常に感触が良かった。自分がどういう考えを抱いているのかわからない。飲食店としては失格だろうと思うが、最後に掲載されていたDMのスクショ(すでに削除されている)を読んで、店にも事情があることは考慮する必要があると感じた。特に関係ない自分が何を言っているんだとも思う。とにかく、いくつか考え事をしたということを記録しておきたかった。

何かに悪感情を抱くのは自由だが、それを外に出すにはそれなりの覚悟と理由が必要であるということも考えていた。これは、レビューを読んで悪印象を抱いたのに、次にnoteを読んですぐその印象がぼやけた自分に対する戒め。

朝方、コップ半分くらいのお酒を飲んで寝ようとするが、TLに流れてきた問題が気になる。しばらく考えていたが、もうN+O\left(\sqrt N\right)解でお腹一杯という気持ちになった。最終的にN+O(1)で解けるということだけツイートされたのを見届け、何もかも諦めて就寝。午前9時半だった。

07/29(木)

午後1時、目覚ましで起床。ゼミが始まる。パソコンを起動してZoomに繋いだら、午後1時1分ですでに僕以外勢ぞろいしていて正直怖かった。ちょっと待たせてしまったようで申し訳ない。

今日のゼミはアルゴリズムの話が持ち上がったが、そもそも言葉の定義をよく知らなかったため、特に何も言及できずに終わった。正直アルゴリズム自体もそこそこ難しい(というか、文字列の頭いいアルゴリズムの1種)気がする。結局、発表者の説明を聞いてもよくわからず、ネットで調べたものを読んでいた。与えられた文字列を適切なLyndon wordに分解する問題で、そもそもLyndon wordの定義からあやふやだったが、以下の資料にある定義ならばアルゴリズムが動作することはわかる。これが講義で扱っているものと同じかは……知らない。

Lyndon factorization - Competitive Programming Algorithms

あとは生協の弁当を注文したり、前回の内容を再確認したりしていた。午後4時半くらいに終了。眠すぎて購買や学食に行く気力もないし、YouTubeを見ながらうだうだしているうちに雨も降ってきてしまった。

サボったCF div.3を解いた。

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

Abはよい。Bは、queueを使うのが面倒だからとvectorstackのように使って解いたが、これはミス。FIFOである必要があった。Cもよい。

dは難しかった。適当に投げて4WAしてしまった。しかもテストケースも見ているので、本番で通せたかどうかは定かではない。場合分けなのにあまり真剣に考えていなかったのも問題だろう。Dはカス。こんな構築させるwriterは二度と作問しないでほしい……と思いつつTutorialを見たら、idea:Mikeとあって絶望した。ナマ言ってすいません……。EFは明らか(と言って、Eでサンプルが合っていないことに気づかず提出してしまったが)。

昨日、明日の昼間に食事する予定だ……と書いた。天気予報によれば明日は昼だけピンポイントで雨らしく、夜にしないか?という話が持ち上がっていた。冷静になると金曜日の夜はサークルがある。AtCoderのコンテストに気を取られて、その時間も予定があることを伝え忘れていた!結局、昼に雨が降っていたら延期ということになってしまい、かなり申し訳なさがある。

布団に移動し、昔読んでいたなろうを少し読み返した後、今日もラノベ積読を減らした。

「きみは本当に僕の天使なのか」。よかった。特に主人公の言動がずっと一貫していて、非常に好ましい。ヒロインは主人公の推しのアイドルであり、アイドルを応援することを常に念頭に置いていたという感じ。しかしそのように一線を引いた状態ではこの先どう仲が深まるのだろう、と思っていたが、ラストではオフのヒロインを別枠として捉えることで次巻以降の進展を予感させる形になった。このラノベは「ひげを剃る。そして女子高生を拾う。」の作者さんの新作で、僕はそちらは読んでいないのだが、最近TLでよくおすすめされている。

「日本語が話せないロシア人美少女転入生が頼れるのは、多言語マスターの俺1人」。なろう書籍化。ロシア語要素に反応したふぁぼん氏が言及していたが、「時々ボソッとロシア語でデレる隣のアーリャさん」とは異なり、こちらはテンプレートなざまぁ系で受け入れられなかった様子。ロシア語要素もあってないようなもの(とにかく言葉が通じなければなんでもよい様子)だった。しかし僕としては、ざまぁの前振りが重かったりしたものの、主人公無双と同じ感じでかなり面白く読めた。

日記を書いてから院試ゼミの担当の問題を読む。今回はかなり簡単な問題にあたっているようで、1問を残しすぐ方針は浮かんだ。午前5時に就寝。

07/30(金)

午前11時前に起床。いい感じに晴れているようなので、予定通り昼に集まることにする。

地下鉄で行こうとしたが、僕の家も集合場所も地下鉄の駅から微妙に離れているため、実は歩いたほうが早いのでは?と考え、今日は歩いてみた。結果としては、地下鉄のダイヤによっては歩いたほうが早くなることも十分ありうると感じた。歩いている間は昨日解き残した院試の問題を考えていた。

集合時間になると天気予報の通りに雨が降り出してしまったが、アーケード街なので集まってしまえばこちらのもの。北京餃子という店で昼食を摂ることになった。僕も行くのは久しぶりな気がする。食事を終えた後もしばらくテーブルで喋っていた。マスクはつけていたものの、声が大きくなってしまっていたらしく、途中で別のお客さんに注意されるということがあった。

店を出ると、すでに雨は止み、日差しが強くなっていた。2時間かそこらで雨が止むというのも天気予報通りであった。本屋を2件ほどめぐった後、話の流れで僕の部屋に行くことになった。溜めに溜めた積読を見せたり、パソコンの環境を紹介したりした後は、みんなで院試ゼミの問題に取り組んでいた。僕の担当の問題で最後に残ったものについて、実は昼食の後喋っている間に着想が得られており、それを紹介していくらか検証してもらったが、どうやら合っていそうで一安心。最後の詰めの部分はぼんやり考えていたものより良い方法を紹介してもらい、非常に参考になった。

僕は途中でサークル解説会の準備・ホストのため少しパソコンに向かっていた。ゼミの友人と喋るのが楽しすぎて解説会の準備が少しおろそかになってしまった感じがある。解説会の最後で、次のABCからは8問体制だが特に変わりなく行うと宣言したものの、よく考えると来週から8月なので普通は夏休みなのかもしれない。さらに言えば僕は院試2週間前なのかもしれない。とりあえず次々週からしばらくはお休みにしよう。

さらにサークル解説会から間を置かずyukicoderがあったので、それにも参加した。みんなにも1問紹介して一緒に考えたり(ちゃんと考察を言わないようにお願いしていた)したが、そろそろいい時間だということで、みんなは午後9時過ぎに帰っていった。このご時世にこういうことをするのは何となく危ない感じもするが、みんなずっとマスクをつけっぱなしでいてくれたこともあり、楽しい思いのほうが強い。

さて、yukicoder 307の話に戻る。結局7完だった。面白かった。作問者はサークルメンバー。東北大学の次世代が順調に育っており未来は明るい。

yukicoder contest 307 - yukicoder

Aはソート。Bは数字ごとの寄与に分解する。複数ある同じ数字もすべて区別することにしておくと考えやすかった。Cは上の桁から再帰関数で決めていく。Dはmodと使った数字を持つdp。Eがみんなで考えた問題だが、実のところかなり見覚えがある。2つの数字のswapをいくらか実験してみると、9掛ける何かという形になっていそう。ということで、(すべて同じ数字である場合を除き)最大公約数の候補は少なく、すべてチェックできる。チェックの際は適当に1つ整数を構築して割り切れるか調べれば十分で、これはmodを持つ行列累乗で可能。

ここで詰まったが、何とかさらに2問解けた。Fは下の桁から決めていくと枝刈りできて、かなり高速になった。Gは無理やり半分全列挙し、定数倍高速化を頑張ったら通ったものの、想定解も半分全列挙だったので、どこで定数倍的に差がついたのかわからない。Hはあまり考えていない。

ちょっと時間をおいて、ECR112に出た。5完。

Dashboard - Educational Codeforces Round 112 (Rated for Div. 2) - Codeforces

Aは、どのようにピザを買っても1切れ当たりの値段が同じなので、結局6と8と10を組み合わせてちょうどの値を作れるかという話になる。2で割れば3と4と5になって、3以上は常に作れるとわかる。Bは見るからに嫌だが、縦と横を独立に考えてよくて、高さを足して収まるならば並べる順序2通りを考える、横についても同様、ということで4通りしか考えなくてよい。CはAliceの行動を全探索する。Dは3文字しかないのでabcabc...というふうに長さ3の周期になるしかない。6通りについてどれだけコストがかかるか累積和で計算しておく。Eは尺取り法+遅延セグメント木。

Fが解けない。木である間はよくて、初めてループを作る時も重み付きUFと同じ感じでXORを管理しておけるので判定可能。2回目以降のループが曲者で、すでにループに使った辺を含むようなループは作ってはいけない。この判定ができず、結局解けないままコンテストが終了した。

コンテスト後のTLでFがHLDというような話を聞き、非常にEducationalであることだなあと思っていたが、それがなくてもオイラーツアーで解けるらしい。というのも、ループを作らないような辺の追加についてはループと関係がないため、先にすべて処理できる。これで最終的なグラフの形が木として得られるので、オイラーツアーをしてから改めてループを作るような辺の追加について考えればよかったらしい。非常に頭がいい。

解法に感動したものの、異常に眠いため、upsolveを諦めて布団に入る。布団に入ったらすぐ眠れるはずだったが、何となく眠れなくなり、ラノベを読んでいた。午前6時半就寝。

07/31(土)

午後7時起床。食事したりシャワーを浴びたりした後、ABC212に出た。今回から8問体制。

AtCoder Beginner Contest 212 - AtCoder

7完。今回は速度重視で、コードゴルフをせずに駆け抜けたつもりだったが、純粋にHが解けなかった。

AはAWK。Bは言語選定から非常に迷い、Rubyを使った。CからはC++。ソートして要素ごとに二分探索。Dはpriority_queue。Eは最初包除原理のつもりで書いていたが、普通に遷移が計算できることに気づき、書き直しの手間が発生した。Fは非常に面倒。あるバスに乗っている状態からスタートし、2k本先に乗るバスをダブリングで計算しておく。クエリに答えるときは、まず最初に乗るバスを計算し、次にダブリング配列を見ながらBIT上のような二分探索を行う。ダブリング配列の計算で余計なことをしており1WA。

Gは位数の総和を求めたくなる。P=7で表を作ってしばらく眺めていると、原始根というものの存在を思い出した。原始根で言い換えると、指数とP-1との最大公約数が気になるということになり、指数は1\dots P-1のすべてを渡るため、結局1+\sum_{r=1}^{P-1}\frac{P-1}{\gcd(r,P-1)}が答え。\gcdが同じ数をまとめたくなってLCM Rushの解説を見たりしていたが、結局1012以下の高度合成数が約数を高々7000個弱しか持たないということから、2乗かけて計算することにした。

Hはアダマール変換までたどり着いたが、f+f^2+\dots+f^Nを求める方法がわからず解けなかった。普通の畳み込みと同じ感じで乗法逆元が計算できるのではないかと思ったが、そんなことはないどころかXOR畳み込みは一般には乗法逆元を持たないらしい。

Cは要素を混ぜてソートし、隣接する2要素が別の列から来ているか確認する方法がある。Fは乗るバスが時間が進むにしたがって合流していって、最終的に根付き木になるので、UFなりマージテクなりで答える方法もあるらしい。

コードゴルフ。Aはdcだが、0=などするより割り算して0割りで場合分けするほうが短くなる。Bは、最初AWK1234567890123~$1をチェックする方針で書いたが、テストケースに入っているのが01233456789089019012だけのようなので、うまいことまとめてsedで判定すると短くなった。CはOctavelookup関数が強い。DはPythonで、場合分けがインデントありのif-else三項演算子orによる短絡評価、と短くなってきている。EはCrystalでないと通らないらしい。Fは手つかず。

Gは、まずコンテスト中の解法で縮めていた。約数列挙はこれまで\sqrt Nまで見てから重複を削除していたが、i\rightarrow\left\lfloor\frac{N}{\lfloor \frac N i\rfloor+1}\right\rfloorとすることで約数の候補を降順に列挙できる。あとは実際に約数かを確かめれば、簡単に降順・重複なしの約数リストが得られる。リストを作らずにその場で計算をするとさらに短くなる。が、今回の問題では素因数分解と数論的関数を利用したさらに短い解法があるようだ。これを実装し、さらにVimに移植するとかなり縮んだ。

Hのupsolveをする前にTCO21 R4に出た。

TopCoder Statistics - Match Overview

Easyの1完で52位、レートは2575→2535(-40)。

Easyの問題文がTCO21 R2Aと同じ感じでカスだった。これ本当にオンサイト前最後の予選に出す問題か?

Easyはカス。問題文が5400文字くらいある英文で、題意を把握するのにかなり苦労した。

週記(2021/05/17-2021/-5/23) - kotatsugameの日記

問題文を自分なりに要約してみた。

52枚のトランプがあり、最初はすべて裏向きになっている。大まかに3等分し、真ん中の山の上からX番目を確認してもらった。真ん中の山の上下をひっくり返し、そのまま3つの山をもとの順に積み上げる。

リフルシャッフル(大まかに2等分し、両手に持ってだいたい同じペースでテーブルに落としておおよそ交互に積み上げる)し、全体をひっくり返し、上から任意の枚数選んでそのままの順序で下に重ねる操作を1回行う。

トランプをテーブルに広げる。このときの裏表入り混じった状態と値Xが与えられるので、確認してもらったカードがどれかを90%以上の確率で当てよ。

ここで、「大まか」とか「だいたい」という言葉を使った部分は、テストケースを作るときに正規分布に従う乱数を発生させてシミュレートされる。このことは問題文にあるリンク先に飛ばないとよくわからなかった、というのも辛いポイント。Xがかなり小さいことに注意すれば解法は簡単で、表向きのカードがたくさん連続している部分を検出すればうまく判別できる。乱数は正規分布に従うので、そうひどいことにはならない。

Medは「Nの倍数であってB進数として見たときに同じ数字が表れないような数」のうち2番目に大きいものを答える問題。B\le 10くらいまでは全探索できるが、B=11,12が困った。昨日のyukicoder Gみたいな半分全列挙だと思ったが、計算量がよくわからないし、実装する時間もなかったため、結局解けず。

ABC212-Hのupsolveをした。アダマール変換に限らず、フーリエ変換でも数論変換でも、和や積に線形性があるらしい。なので、f+f^2+\dots+f^Nが知りたいなら、アダマール変換した後に各点でa+a^2+\dots a^Nを計算し、逆変換すればよいらしい。ここで変換には係数がつく。この扱いに納得いかずしばらく考えていた。係数を逆変換に全部押し付けることで、変換後の世界で線形性が成り立つようにできるという仕組みとして理解した。コードゴルフとしてすでにRubyコードがあったので、縮めておいた。

過去のRubyコードに適用できる更新がいくつか見つかっていたので、探して縮めたりしていたら、朝になってしまった。布団に移動して眠気が来るまでラノベでも読んでいよう、と思ったら、面白すぎて最後まで読んでしまった。

「時々ボソッとロシア語でデレる隣のアーリャさん」2巻。非常に良かった。最初のほうはこのシリーズ1巻がどういう文章のノリだったかを忘れており、ちょっとついていけない部分もあったが、読むうちにストーリーに引き込まれた。最後のシーンに向けての流れが生まれたあたりで、あまりに気になりすぎるため寝る前に読み切ることを決意。実際、期待以上に盛り上がってとても面白かった。主人公の妹は、今巻でも1人深く関係するキャラクターが出たものの、特に掘り下げられていない感じなので、次巻以降が楽しみ。

このラノベ、1巻が売れに売れたらしい。確かに最近ラノベの何らかのランキングを見るといつも名前が挙がっていた気がする。ロシア語要素はともかく、素直に面白いラノベであることは文句なく認められる。

午後1時半就寝。

08/01(日)

午後3時半起床。院試ゼミが午後3時から予定されていて、1時間半なのでいい感じに1周期で起きられないかと思ったものの、あまりの眠さにしばらく布団に突っ伏して動けなかった。しかし自分から参加したゼミを自分で休んでいては世話がないため、気合で布団から這い出した。

ゼミ自体は特に何事もなく終了。土曜日にワクチン2回目を接種した人が2人いて、ちょっとばかり辛そうな感じもあったが、思ったより元気らしい。まあ本人の自己申告であるため、実際のところはわからない。

昨日のコードゴルフに更新があった。DはPythonの場合分けをどのように行うかで縮んでいったが、比較演算子のチェインを短絡評価目的で使うのがさらに短いらしい。それと、1行目もクエリとして処理してしまうことで結構縮んでいた。

EのCrystalはまた知らないメソッドが出てきて縮んでいた。単項-.-でできるらしい、というのはともかくとして、.upto.downtoをまとめた.toというメソッドがあるらしい。しかも、そういうメソッドの引数として括弧をつけなくても動く場合があるようだ。

atcoder.jp

HIKAKIN TVに「ウ”ィ”エ”」を再現した動画が投稿されていた。7月でHIKAKIN TVが10周年なので8月はすごい動画をたくさん予定しています、ということが告知されていて、これはその1本目らしい。HIKAKINが何を思ってこれを投稿したのか知らないが、おふざけ一切なしの異常なまでの完成度で感動した。確かに信じられないくらい力が入っている。

7月の読書記録をツイートした。ちょっとは本を読んだが、それ以上に買っていて積読はかなり増えた月だった。

信じられないくらい眠いが、寝る気にもなれないので、YouTubeを見たりしながら頑張って日記を書いた。そういえば先週ホスフィンに「日記のうちコンテストの感想だけ隠しておけばどうだ」という提案をされており、一理あると考えていたのだが、改めて文章を見返すとコンテストの感想とそうでない部分とがちょっとばかりあいまいなように思えたので、うまく区切ることができなかった。

AtCoderをクロールして最短コードを一覧にして保存している。気が向いたらクローラを起動して、3000問以上の問題をクロールし終わるまで見守っていたものだが、前回のクロールから1か月くらい経ってしまうと情報が古く感じられてしまうため、以前から定期的に実行するようセットアップしたいと考えていた。今日はその一歩として、atgolferを動かしているサーバでクロールできるように環境を整えた。

クローラはRubyで書いたので、Rubyの環境を構築する。yumで入れると2.0.0という信じられないくらい古いバージョンが入るどころか、必要なライブラリも入れられなかったので、rbenvを使って再チャレンジ。無事2.7.4とNokogiriを入れることができた。NokogiriはPythonでいうBeautifulSoupで、つまりHTMLパーサ。なぜそんな感じの名前がついているのだろう……。ともかく、これで実行できるようになった。

次にクローラを手直しする。atgolferと同じサーバからAtCoderにアクセスする以上、連続したアクセスは避けたい。そのような場合、リクエストを送るためのメソッドを定義して、そこで適当にsleepさせるのが簡単だと思われる。これはatgolferのコードを読んで学んだこと。timeoutも設定しておいてコードは完成。さらにシェルスクリプトを書いて、ファイルのバックアップを取ったり自動でGitHubのほうに上げたりするところまで一発で済ませられるようにしておいた。

あとは相対パス絶対パスに直すかcdを挟むかしてcronに登録しておけばよさそう。ただ、今は1回クロールが完了できるかチェックするという意味で、素のまま動かしてみている。実行ログをteeでファイルに取りつつ眺めるつもりだったが、なかなか表示されずにやきもきしていた。出力バッファをflushすることで解消され、今のところちゃんと動いているように見える。ネットワークの遅延のほかにも、以前Zlib圧縮されたコードを読もうとしてエラー落ちしたことがあって、再発しないか不安。

atcoder.jp

自作の最短コードクローラがこのコードをcsvファイルに書き込もうとして、落ちた。

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