blog.bouzuya.net

2019-03-25 bouzuya/purescript-npm-bin-google-tasks 0.2.0

bouzuya/purescript-npm-bin-google-tasks 0.2.0 をつくった。

google-tasks は Google Tasks の CLI 。 2019-03-17 に 0.1.0 をつくったもの。

0.2.0 では google-tasks task list とそのオプションを追加した。

w010 のものは 1.0.0 にしているけどこれはすこし刻んでみる。


bouzuya/purescript-at-coder 。 ABC121 をひととおり解いた。

C 問題で詰まった。アルゴリズムによるものではなくて PureScript への慣れによるもの。 Array (Tuple Int Int) として解釈したあとソートして先頭から要求数まで取るだけ……なんだけど TLE になってしまう。

こうなるとあらゆる処理が遅いんじゃないかと疑ってしまう。 Data.String.CodePoints が遅いんじゃないかとか。厳密に計測したわけじゃないけどおそらく purescript-precise の HugeInt まわりが致命的だったのだと思う。

Int の範囲を超えてしまう箇所があった。 precise の HugeInt で良いと思って使ったのだけどまずかったようだ。最終的には purescript-bigints の BigInt を選んだ。 precise (HugeInt) → longs (Long) → bigints (BigInt) と移った。ちなみに Longnpm:long を使い BigIntnpm:big-integer を使う。 long は内部で WebAssembly を使っているため Node.js v5 になっている AtCoder では動かない。 long および bigints 採用時には node_modules を含めた bundle をつくらないといけないため bundler が必要になる。 parcel を使って bundle した。

いろいろ準備が足りてない。過去問題を解いていくうちにある程度は慣れると思う。

テストでテキストファイルを読む形に変更した。毎回テストファイルをつくらなくてもデータを置くだけにするのも良いかもしれない。

明日は ABC122 から何問か解く。