2022-08-31 googleapis/google-cloud-rust を試している / ABC134 の A, B, C, D, E を解いた
https://github.com/bouzuya/rust-sandbox/commit/8b358eb7e56a01011d0312677bdf88ff61d2dae8 で https://github.com/googleapis/google-cloud-rust を使うようにしてみた。これで bouzuya/rust-sandbox の twiq の firestore との認証まわりが解決した。
google-cloud-rust の google-cloud-auth は Google Cloud 用の認証を担う crate 。 https://google.aip.dev/auth/4110 にある ADC : Application Default Credentials を実装してある。ドキュメントを参照しながら自身で実装しても良いのだけど各環境での取得やリフレッシュの考慮などが面倒なのでこれを使うことにした。
ローカルでは Service Account Credential ファイルを用意して GOOGLE_APPLICATION_CREDENTIALS 環境変数にそのパスを書く。 Cloud Run などの環境では特に何も指定しなくても既定の Credential を取得してくれる……はず (未検証) 。
ABC134 : AtCoder Beginner Contest 134 の A, B, C, D, E を解いた。
- A - Dodecagon
https://atcoder.jp/contests/abc134/tasks/abc134_a
- 提出: https://atcoder.jp/contests/abc134/submissions/34474734
3 * r.pow(2)
- B - Golden Apple
https://atcoder.jp/contests/abc134/tasks/abc134_b
- 提出: https://atcoder.jp/contests/abc134/submissions/34474817
(n + (2 * d + 1) - 1) / (2 * d + 1)
- C - Exception Handling
https://atcoder.jp/contests/abc134/tasks/abc134_c
- 提出: https://atcoder.jp/contests/abc134/submissions/34474948
A_iの最大値XがAに 2 個あればすべてXを出力すれば良いA_iの最大値XがAに 1 個の場合はXのとき 2 番目に大きい数をそうでないときXを出力すれば良い
- D - Preparing Boxes
https://atcoder.jp/contests/abc134/tasks/abc134_d
- 提出: https://atcoder.jp/contests/abc134/submissions/34475127
- まず後ろから決めると良さそう
- たとえば一番後ろの数にはそれ以外の倍数がないので
a_iをそのまま採用できる - 仮に↑が
1のときa_iの約数の結果 (倍数の箱の和を 2 で割った余り) に、それぞれ1ずつ影響する - ↑で影響するとされた値と
a_iが一致するなら何もせず、一致しないなら1を追加し、その約数の箱に1ずつ影響させる - これを繰り返す
1を追加した箇所が答えになる- 証明はしていないけど、前で帳尻合わせできるので、たぶん入れ方は常に存在する
- E - Sequence Decomposing
https://atcoder.jp/contests/abc134/tasks/abc134_e
- 提出: https://atcoder.jp/contests/abc134/submissions/34475682
- 解説 AC
- 解けそうで解けず
- まず LIS を繰り返せるなら解けると考えた
- ただ、これだと降順に並んでいるときおそらく間に合わない
- 色ごとに最大値を持っておき、 A_i より小さいもののうち最大のところを埋めていけば良さそう
- と思って実装したが WA
- 解説を読むとちょっとした工夫で実装はほぼ LIS の長さを求めるものになって「すごい……」となった
今日のコミット。