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 の長さを求めるものになって「すごい……」となった
今日のコミット。