2022/5/7(土)

Rustの勉強を進めた。構造体になんかメソッドを実装しようと思ったらtraitを使うしかないのかと勘違いしていたが、普通にimpl単体で書けた。そりゃそうか。メソッド記法を使いたいだけなのにasync traitがどうのみたいな話が出てきて気が滅入っていたが、メソッド記法自体は単に記法の問題なので、メソッド記法を使うだけでなにか変な対応が必要になる訳はない。問題が一つ解決した。

メソッド記法(impl)自体はただの記法であり普通の関数と本質的に変わらないものだが、traitを使おうとするとそれは多態性を用いようとする意思表示になるわけなので、その場合だと単純にasyncに出来なかったりだとかいろいろな込み入った事情が出てくる。ちょっと回り道になってしまったが大体雰囲気がつかめた。

勉強の一環としてConoHa APIを叩くプログラムを作っているので、HTTPリクエストを送るやり方と、JSONのやり取りで必要になるシリアライズ・デシリアライズ周りの基本は覚えられた。NaiveTimeじゃないとデシリアライズが通らないのがちょっと良く分からないが、それ以外は何不自由なく書けるようになった。

ひたすら「とにかくこうなって欲しい」というのをコードにすれば動くのが本当に気持ちいい。動作を記述する、というよりは、真っ当な要求を書けばそれがそのまま動作してくれるという感覚に近い。

コンパイルが通るコードが書ければそれは正しいしそれは動く。反対に、コンパイルが通らないコードを書いてしまっているときはそもそも自分で何がしたいのか分かっていない。もしくはどこかで理屈の通らないおかしいことを考えている。ひたすらに「そんでお前は結局どうしたいんだ?」と聞かれているような気分になる。


今日解いた競プロの問題。

EDPC-Y: よく読んだらかなり簡単な問題だった。右か下にしか移動できないというのが最初目に入らなかった。

見た目から明らかに二項係数なので、まず壁マスさえなければ非常に簡単に解ける。前計算$O(H+W)$をやっておけば良い。

壁マスをどう扱うかだが、遮られた分そこから波及したはずのパターン数が減っているはずなので、これも二項係数で計算できる。マス(1,1)からのマンハッタン距離が小さいところから順に計算し、どの壁がどれだけのパターンを遮っているかをカウントすればよい。全体$O(H+W+N^2)$で解ける。


最近筋トレをサボっていたので今日はスクワットをやった。

Categories: