週記(2021/01/18-2021/01/24)

01/18(月)

午前6時、腹を壊して起床。トイレから帰ってきて布団に入ったが、うっかりTwitterハーメルンを開いてしまう。1作読了。

syosetu.org

面白かった。幻想入りしてからはシュッと終ってしまった感じだが、主人公を周りのキャラクターから見た話なども多くて満足。

次の月曜日が締め切りで最終課題が出ている講義がある。これについて、成績評価に関するコメントが出ていた。曰く、これまで出した課題5つ(次の月曜日締め切りのものを含む)のうち、未提出または0点の課題が2つ以下で、かつ点数の合計が50点以上の人には少なくとも単位は出します、とのこと。これに照らせば僕はすでに単位が出ることが確定している。

まあ単位が確定しているなら最終課題やらなくてもいいかな……という気分になる。課題を、教員を用いて自分の実力を試す場と考えているような人にとっては別だが、僕はそんな意識が高くないので、出さなくてもよい課題は出さない。

こういう単位取得に関するコメントを掲出する理由は何だろう、というようなツイートを目にして少し考えてみた。受講者のうちいくらかが最終課題の提出を止めると、僕らみたいな学部生の書いたレポートを読む量が減るはず。これはおそらく教員のメリットになる。

bashdcコマンドについて、僕のメイン機では1.3.95がインストールされている。AtCoderでは1.4.1で、この違いはかなり大きい。コードゴルフ関連でいろいろ便利になっており、週記で何度か言及したこともあるかもしれない。そういう関係で、これまでdcコードゴルフはいつもコードテストで行っていたが、さすがに手元に用意しておくべきだろうと考えて、インストールを試みる。

最初のmakeは失敗した。ダイイングメッセージを読むとmakeinfoがなくて落ちているらしい。ということで入れる。僕はCygwinを使っているので、こういうのを入れるにはyumとかapt-getではなく、setup.exeを経由するのがデフォルト。setup.exeは実行ごとにほかのファイルもアップデートする。久しぶりに実行したので、例えばPython3のバージョンが3.8に上がっていたりと時間の流れを感じる。

ともかくmakeinfoを入れることに成功し、再度makeしたところ成功。ただ以前からのdcも残っていて、ファイルの場所の関係で古いほうを優先的に使用しているようだったので、aliasで対処することにする。dcを実行すると、今入れたほうのファイルへのフルパスを直接叩く。古いほうを消せばいいのでは?と思われるかもしれないが、yukicoderはいまだに1.3.95なので、需要が皆無というわけではない。

さて、いろいろやった後にコードを書こうとVimを立ち上げると、表示が微妙に変わってしまっていることに気づいた。

以前のキャプチャ画像は録画からとってきたものなので、画像サイズが違って見にくいが、色がついた文字が全体的に太く表示されている。できれば元に戻したいので、いろいろ頑張ってみた。

「勝手に太字」みたいなキーワードで検索してみると、highlight設定からboldを全部消すとよい、みたいなのが見つかる。どうやら現在の表示はctermの値が効いているようなので、cterm=NONEとしてみたところ、確かに太字は解除されたが、色もより暗いものに変わってしまった。

次に、TERM変数を設定しつつVimを起動するとよい、みたいな話を見つけたので、$ TERM=xterm-256color vimとして起動してみる。文字が太くなるのは解消されたが、色設定が全く別物になっていて困る。

色設定を変えたらもとに戻るんじゃないかと思って、デフォルトで付属しているものからこれまで使っていた色設定(一度も変更していないので、何かがデフォルトになっているはずだと考えた)から探す。どうやらron.vimがそれに該当するようだが、:colorscheme ronとしても太字なのは変わらなかった。(ちなみにこのときTERM変数は設定していない。設定してみればよかったかもしれない。)

TERM変数を設定する関連で、t_Coというオプションの値を変えるとよいというのを見つけて、8から16に変えてみた。ほとんど元通りになったように思えたが、visualモード時の選択範囲の表示がやたら薄かったりして微妙な気分になる。t_Coはターミナルで使用できる色の種類数(?)を決めるオプションらしく、これが少ない状況下においては表示をよりくっきりさせようとして太字になっていたのではないだろうか。

もう少し調べていたが、さすがにもう面倒になってしまったので、大まかにはt_Coの値を変更することで対処し、残りの細かい部分は個別にhighlight設定を変えることにした。visualモードに関しては、以前のように白色を強くすると後ろの文字が見えなくなることに気づいたので、薄いままにしておく。highlight設定を個別に変えるのにも苦労した。.vimrcに書くだけだと効かない。:highlight verboseで確認したところ、.vimrcのあとにsyncolor.vimというファイルから書き換えられるらしい。これも調べたところ、~/.vim/after/syntax/syncolor.vimで変更することで、元のsyncolor.vimの設定を上書きできるようだ。

今日が期限のレポートが手つかずで残っている。しなければならない。今回はtexで書くことにする。今回の問題はかなり難しいと感じた。

大問を2つ終わらせた段階で眠気覚ましにシャワーを浴び、サークルの解説会に出る。今週の活動は先週できなかったぶんを発表するので、特にスライドの用意などを新しくする必要はなかった。滞りなく終了し、スライドの公開やサークルのwebサイトへのページ作成、サークルの公式Twitterでツイート、までパパッと終わらせる。

レポートに戻る。さらに1問解けて、これでレポート提出の最低限は達成できたようだ。もう1問解こうと頑張ってみたが、どうにもわからなかったので、その部分については少しだけ書いて提出することにする。いうなれば3完半か。半分も解けていないような気がする。

少しコードゴルフをした後、先週の週記の残りを書いて公開した。これまでは広義日曜日には投稿できていたが、生活リズムの乱れやレポート提出などでかなり遅れてしまった。本当は先週の日曜日は生活リズムの狭間に消し去るつもりだったのが、うっかりTROCに出てしまったせい。

投稿するといくつか言及してくれる人がいてうれしくなった。日記という体裁をとっているが、人に見られることを意識した文章を書いている。読まれているのがわかるとうれしい。

午前3時、就寝。

01/19(火)

午前11時起床。ゴミを出す。僕が住んでいるあたりは回収がやたら遅いので、この時間に出してもまだごみ収集車が来ていない。こういうのも住所バレにつながるんだなあ。

せっかく昼から活動できるような生活リズムになっているので、学食で昼ご飯を食べた後、市街地に出た。まず本屋に行って本を買う。

次に、ゲーセンに行く。チュウニズムの大型アップデートを2日後に控え、今日は削除される譜面に関係する称号を集める作業をした。チュウニズムにおいて一定の条件を満たす(例えばある譜面でSSSを出す、あるいはある譜面の全難易度をプレイする等)ことで得られる称号は、その譜面が消えても使えなくなったりはしないが、取得機会は消えてしまう。複数人でマッチングする必要のある称号は取れないが、それ以外をあらかた集めた。残りはAJ称号だけである。Elemental CreationをAJするのはさすがに難しいだろうが、Evansは1-0出したことがあるし行けるのではないか?と思い、粘着することに決めた。

出たのはいいが、5時間くらいかかった。エアーが多くてかなり疲れる。省エネのつもりでエアーを上げるのを適当にしていたところ、序盤のエアーでアタックを出し、そのまま残りをAJしてしまったことがあって、かなりつらかった。この週記が公開される頃には削除される譜面だが、一応何を考えてプレイしたか記録しておこう。

f:id:kotatsugame:20210123152017p:plain
55小節

この配置は頻出だが、僕はかなり苦手にしている。今回もだんだん癖がついて勝率が下がってきたので、擦りに切り替えた。周りはエアーの上げ下ろしなどもあってかなり忙しく手を動かしているが、その意識のまま擦ると折り返しでアタックが出る。めちゃくちゃ遅め意識。

f:id:kotatsugame:20210123151904p:plain
57-58小節

58小節の最初の赤タップのうち、左のほうを巻き込む。巻き込んでいることに気づくのにまず20プレイくらいかかった。スライド持ち替えによる非交差運指をお勧めされたので試してみたが、どうにも慣れない。スライドをとった左手で直後にもう一回タップするのが特に難しい。結局、交差はするが、手を途中で固定してスライドをなぞらないようにすることで対処した。

f:id:kotatsugame:20210123152821p:plain
75-76小節

これだけ見ると何てことない配置だが、この直後から右手8分連打が始まり、入りが非常に難しい。擦りを試してみたが、なんとも微妙な速さのため折り返しのあたりでアタックが出た。むしろ何も考えないほうが勝率が高いが、癖がつくとまずいのでそうも言っていられない。結局右手の赤タップ3つをガチガチに意識して、直後の黄タップから切り替えて連打するとそこそこうまくいくようになった。

f:id:kotatsugame:20210123153421p:plain
79小節

言わずと知れた最難関。ここで10回くらいAJを逃した。両手トリルは、ノーツがずれているとか以前にそもそも追いつかなくなってダメ。遅めの全押しで餡蜜してみたが、直前の配置から微妙に間が開くこともあってどうにもタイミングがつかめなかった。結局気合いで押した。左手トリル6回+右手8分3回、直後に手を入れ替えてもう一度。ここは逆に何も考えない状態では絶対に通らなくて、確固たる意志を持ってトリルに集中しなければならない。焦りすぎるとそのあとの黄タップも難しくなる。

休憩のため立ち食いそばを食べ、ゲーセンに戻ると、数学科の友人と会った。来年度のゼミ選択についてしばらく話した。別れた後さらに少しチュウニズムをして、帰宅。

何とか間に合ったのでこどふぉdiv.2に出る。5完8位。Eで2回もWAを生やしたのでかなり破滅した気がしていたが、そうではなかったようだ。

Aは上の桁から貪欲に決める。Bは難しいが、冷静になると素数pqがあってp^3またはpqのみ考えればよい。コンテスト後のTLによれば、さらにベルトランの定理を用いることでpqのみでよいことが証明できる(つまり、p>=d+1のもとでp+d<=q<=p^2なるqが存在することが分かればよくて、これを示せる)。

Cは最大のものを取っていけばよい。実装に悩んだ。TLは1secである。数の出現回数をカウントすると、毎ケースの初期化に時間がかかって間に合わなさそう。結局multisetlogをつけて提出したが、かなり時間に余裕をもって間に合った。また、出現回数のカウントでも、変更したところだけゼロクリアするようにすれば、毎ケースの初期化がO(N)で済むらしい。

Dは左と右から累積的に調べておいて、各スワップごとにそれを用いて定数時間で判定すればよい。Eは最初の提出で考慮できていたことが2回目の提出で考慮できておらず、2WA。置換とか入れ替えの話は頭が壊れがちで、正しくイメージしにくい。出力に関しても毎回紙に書いて計算しないと正しいかわからない。

布団に入ってしばらくハーメルンを読んでいた。午前5時就寝。

01/20(水)

午後6時起床。ここ最近の睡眠負債が一気に来て生活リズムが終了した。布団でラノベを読んでいたところ、サークルのバチャをブッチしてしまった。

まず1冊。「デスゲームから始めるMMOスローライフ」の4巻。2巻と3巻も、日記に書いてはいないだけで読んでいた。内容は1巻からずっと変わらず一生ヒロインとイチャイチャしていて、4巻のラストも特に何かあるわけではなかった。

次に「江戸の花魁と入れ替わったので、花街の頂点を目指してみる」。かなり面白かった。体ごと持ってきたらしく、現代で摂取したワクチンが有効らしい。ワクチンの江戸時代におけるチートっぷりを話し始めてびっくりした。天然痘ウイルスに対しては逆に無力なので、自力で種痘をしていた。多分この描写があって冒頭に注意書き「フィクションなので作中の医療行為を真似しないでください」が入ったのだろう。まあそれは本題ではない。

もう日付が変わってしまった。1/22提出のレポートがあるが、あんまりやる気はない。これはまた明日頑張ることにするが、じゃあ今日は動画編集でもするかというと、そううかうかもしていられなさそう。線形代数学Bという必修科目を履修していて、これは今セメスターで何が何でも取らなければならない単位だが、毎週出されている課題に期限が設けられていないこともあって、いまだに何一つやっていない。これのまずさがだんだん分かってきて自分の意識を占有しだしたので、進めることにした。

さすがに本来であれば1年生が取る講義だけあって、内容自体はかなり簡単。ほかの講義などでも触れた内容なので既知である気もするが、そんな自信があるわけではないので、念のため講義動画も見つつビシバシと手書きレポートを書いていく。

6時間くらいかけて9回ぶんのレポートを錬成し、今日はここまでとする。

布団に入ってハーメルンを読んでいたが、どうにも腹が減って眠れないのでパックご飯を食べた。世間はすでに木曜日で、チュウニズムの大型アップデートは完了している。新曲の譜面動画が回ってくるのでいろいろ見ていた。AttraqtiAという曲があって、ジャケ絵の特徴的な髪・目からEnjiさんの手になるものだとわかる。実際ArcaeaのWikiではEnjiさんと明記してあったので、どこかに公式情報があったのだろう。EnjiさんのTwitterやPixivには特にそういう投稿は見当たらなかったが。

正午、就寝。

01/21(木)

午後11時、起床。昨日は主観的には水曜日で、金曜日提出のレポートまではまだ2日あるという認識でいたが、起きてから冷静になってみると、木曜日はあってないようなものなので実質1日しかない。しかも山に登って数学科の事務室まで提出しに行かなければならない。レポート問題にはこの期限に関して一切書かれていないが、これまでの経験からどれだけ遅くても午後5時だろうとあたりがつく。残り18時間しかない。

取り掛かる気分になれないので、しばらくGoogle Classroomを眺めて時間をつぶしていた。よく見ると一切手を付けていない科目は昨日やり始めた線形代数学Bだけではない。非常にまずいようだ。

食事して、ようやっと取り掛かる。これに関してもTexで書くことにしよう。推敲が簡単なのがかなりうれしくて、図表を挿入する必要がないならTexで書くのは便利。内容自体は、演習のレポートをすでに2回こなしているので何とかわかる。最初の2問は結構簡単だったが、3問目からもう逃げたくなってくる。何とか5問くらい解いたところで完全に飽きて、布団に寝っ転がってハーメルンを読んでいた。

syosetu.org

これは過去編がメインで幻想入りしたあとすぐに完結を迎えてしまったが、どうやら続きの話、つまり幻想郷での出来事は別の作品で描かれているらしい。今すぐ読みたいが、さすがにレポートを書かないとまずいのでぐっとこらえる。

とりあえず全部で7問あるうちの6問を解いた。実は金曜2限は今日が最終回で、授業の後半は小テストがあるらしい。これまで週記で毎週「課題を当日の朝に投稿する」など愚痴を言っていた講義だ。最後の小テストもいっちょやってやるかと思ってGoogle Classroomを開こうとすると、読み込みが終わらない。かなり焦ったが、とりあえず自分だけの問題でないことを確認しておこうとTwitterで検索したところ、ほかにもGoogle Classroomが見られなくなった人がいる。親切な方からステータスダッシュボードのURLをもらったので見てみると、確かに障害が発生しているらしい。このことを教員にメールして、何らかの対処を願う。

結局僕の環境では午前11時頃から見られるようになったので、最後の講義資料も見れるし、小テストにも問題なく回答できた(ただし解けたとは言っていない)。これでこの講義ともおさらばか~と気を抜いていたところ、教員からメールが来た。障害の影響があった人は今日の小テストでは評価せず、別の課題を出すことにしたらしい。回答も提出したので正直これで評価してもらっていいのだが、何らかの措置を講じてもらうようお願いしたのはこちらなので、ありがとうございますとしか言えない。

レポートの作業に戻る。最後の1問はどうにもわからないが、諦めることにする。印刷の前に文章全体を読み直したところ、結構直すべき箇所が見つかったので直す。普段はこういう読み直しをしている時間もやる気もないので、いつも書きあがったら即座に提出している。直し終わったので印刷し、ホッチキスで止め、地下鉄に乗って提出しに行く。せっかく地下鉄に乗るのだから、と音ゲーのための軍手なども持って出た。

もし提出期限が正午とかだったらヤバいな~と思っていたが、期限は午後5時だった。提出に成功。山の上の学食は午後1時半で閉まったらしく、購買でお菓子を買って済ませる。また地下鉄に乗って今度は市街地のほうまで出る。

さすがにお菓子だけでは腹がふくれないので、立ち食いそば屋で食事する。そのあと本屋に行った。火曜日に行ってからそれほど日が開いていないが、20日あたり発売の富士見ファンタジア文庫などもあり、買うべき新刊があることは確認していた。しかし置いていなかったので、結局何も買わずに出た。よく行く本屋はなぜか富士見ファンタジア文庫を全然置かない(新刊が入っていても棚差しになっている)のだが、何か理由があるのだろうか。

ゲーセンに行く。木曜日が大型アップデートで、今は世間的には金曜日だが、人が全然いなかった。アップデート直前のプレイでずっとEvansをプレイしていて、その譜面が削除された影響でリセント枠がガタ落ちしたのか、レートが14.56になっていてかなりびっくりした。

新曲を埋めていく。最初のほうはかなり眠くて精度が全然取れなかったが、やっているうちに慣れてきていい感じになった。この日は4時間半くらいで帰宅。新曲を触るよりもスコア詰めに集中した。13のAJが4つ、13+のSSSが1つ増えた。Grievous Ladyで1-0を出してしまった。AJが出るとは思っていないので、最後のほうは実は譜面がよく見えていない。

夜ごはんも立ち食いそばにしようかと考えたが、以前から気になっていたラーメン屋に入れそうだったので入る。

おいしいとは思うが、卓上に一切調味料を置かなかったり、謎の水を使用していたりと意識の高さが肌に合わない。

家に帰って布団に倒れこむ。すぐにでも眠れそうな眠気だが、やはり汗をかいていることもあってシャワーくらい浴びておきたい気持ちになる。何とか浴びて、布団に入ってちょっとハーメルンを開いたところ、一瞬で寝落ちした。午後8時過ぎだった。

01/22(金)

生活リズムの狭間に消えた。

01/23(土)

午前6時、目を覚ます。もっと寝たいが、なんとなくハーメルンを読み始めてしまい、眠れなかった。木曜日に読了したやつの続編を読んでいたが、途中で同じ作者の別の作品に浮気して、そちらは16話で完結していたのでサッと読み終わった。

syosetu.org

これを読み終わったことを切っ掛けとして布団から身を起こす。正午だった。食事して日記を書く。今週もかなり溜めてしまっており、3時間くらい書いていた。生協から弁当の配達が来たので受け取り、日記を書くのも一段落し、眠気も結構すごいことになってきたので、ABCに備えていったん仮眠をとることにする。布団に入ってなぜか1時間くらいハーメルンを読み、午後6時くらいに就寝。

午後8時、目覚ましで起床に成功。相変わらずかなり眠いが、この上さらに寝るのはまずい。ハーメルンを読んで何とか耐える。1作読了。

syosetu.org

木曜日に読了したやつの続編である。未完のままエタっている。

ABC189に出る。23分全完で2位。スクリーンを録画していた。録画して出場したABCとしては最高の出来だったので、課題が一段落して動画編集するタイミングができたら、まずこれを編集するのもよさそうだ。

AはFA。こういうのはsedでやるのがよくて、他の言語も短くはならなさそう。BとCはやる。Dはかなり簡単な式になる。Eは難しい。最初、とりあえず回転だけ実装しようとして2x2行列を持っていたが、それではダメなことに気づいて3x3行列になった。配列ではなく、個々の係数をそれぞれ変数に持つ。さすがに9個持つのはまずいが、よく観察すると上の2x3の部分しか変化しないため、そこの値を6つの変数で管理すればよい。提出したところ600msかかってびっくりした。おそらく入出力だろう。Fは何回も見たことがある、期待値DPを1次式の形で行うやつ。

1位とは4分、3位とは6分差があって、集団から1歩抜けた結果でうれしい。2位を取れたのも今回は喜ばしくて、順位によるビンゴは8位を残すのみとなった。

F問題の誤差評価が難しいという話題を目にした。

コードゴルフに関する話。B問題はdcで解けるので、これが一番短くなる。30B。ただ、-1を出力する切り替えに余計な手間をかけている気がしてならない。縮みそうな気配はある。C問題はO(N^2)解法ではそもそもPyPyしか通らない。Pythonゴルフをチマチマやっていたところ、最大長方形のアルゴリズムRubyで実装したコードに一瞬で抜かされた。アルゴリズムをパクってPerlで書き直したところ90Bまで縮んで、今のところはこれが最短。DはRubyでもPerlでも25Bになって、まあこれで終わりかな……と思っていたらRubyの24Bコードに抜かされた。文字列を文字数で分類することで、直接数値として扱えるようになっている。EとFはゴルフしていない。

夜中FのコードゴルフをしていたらA問題を縮められていた。Vimは試して縮まないと判断したが、全然なってなかったらしい。

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

01/24(日)

正午、起床。今日はAtCoderもこどふぉもない週末。ToDoリストに入っているものを消化する。

まず、サークル紹介パンフレットの原稿を提出する。昨年のものをほとんどそのまま使うが、それもまた更に昔のもの(碧黴さん作成)をほとんど丸写しして作った覚えがある。昨年は文章の位置なども多少手直ししたはずだが、今年は活動実績と活動内容だけ書き換えるにとどまった。

今年はオンサイトもなければICPCアジア地区横浜大会も開催前で、活動実績に書くことがない。最初は昨年の実績をそのまま書いていたが、さすがにまずいだろうということでホスフィンと相談した結果、今年のICPC予選の結果も書いておくことにした。僕の印象として予選でn位と横浜大会でn位というのの間にあまり差があるとは思わないが、非競プロerから見たときには予選の実績は劣って見えるかもしれない。ほかにも、個人の実績について、順位だけ見るならば企業コンの1桁位が存在するが、ここにはオンサイトのことを書いておきたいだろうとこだわって昨年と同じく第二回全統プ王を書いている。

活動内容にはオンラインが主体であることを書いた。昨年の原稿提出はちょうど1年前の1月終わりで、まだ新型コロナウイルスが騒がれておらず、教室を借りて集まると書かれていた。結局今年度はICPC予選以外では一切集まらなかった。

次にレポートを書く。今週月曜日の日記に「次の月曜日が締め切りで最終課題が出ている講義がある」と書いていたが、この課題を終わらせた。月曜日の時点でこの講義の単位は確定しており、やる気がないなどと書いていたが、なんとなく興が乗ったのでレポートを書いた。謎。

なんとなく眠くなってきたので布団に入り、ずっとハーメルンを読んでいた。途中TechFULからアマギフが1000円届いた。午後7時前にいったん寝落ちし、次に起きたのが午後11時だった。

布団でゴロゴロしている間に昨日のB問題が縮められていた。28B。

atcoder.jp

出力する値を-2する必要がある。この-2を、特別な出力-1の場合にも使おうとしたとき、どうにかして1を用意する必要がある。ここで差がついたようだ。まず前提として、vして0が残るか消えるかで場合分けができる。

僕の30Bのコードでは、まずスタックにx+1 xを置いておく。x-2または-1が出力すべき値だ。vして0が残る場合はx-0-2を、消える場合は(x+1)-x-2を出力していた。上のコードでは、わざわざx+1を置いていない。0が残る場合は0Rxを持ってくる、消える場合はzR1を持ってくる、最後に2を引く、で答えを出力している。1をスタックの下のほうから持ってくるという発想に度肝を抜かれた。そこに1があることは、言われてみなければわからない。

別のレポートを書き進める。線形空間の基底を取って{v_1,...,v_n}などと書くとき、n==0となるのは許されるのか?どれくらい場合分けしておけばいいのかわからない。これに関しては許されるだろうと思って書いたが、ほかにも0本の一次独立なベクトルに適当にベクトルを付け加えて基底にする操作が必要になって、これはちょっと微妙そうだなと思って場合分けした。記述量が倍になってげんなり。もしかしたらいらなかったかもしれない。

解き進めているうちに問題を誤読したらしく、詰まってしまって嫌になったので布団に入る。ハーメルンを読んでいたら午前5時くらいに寝落ちした。