2022-09-26 ABC123 の A, B, C, D を解いた / twiq 実装メモ (6)
ABC123 : AtCoder Beginner Contest 123 の A, B, C, D を解いた。
- A - Five Antennas
https://atcoder.jp/contests/abc123/tasks/abc123_a
- 提出: https://atcoder.jp/contests/abc123/submissions/35177665
- 組み合わせをすべて試したけど、
a < b < c < d < e
の制約からe - a > k
で十分だった……
- B - Five Dishes
https://atcoder.jp/contests/abc123/tasks/abc123_b
- 提出: https://atcoder.jp/contests/abc123/submissions/35177727
next_permutation
ですべての注文順を試した
- C - Five Transportations
https://atcoder.jp/contests/abc123/tasks/abc123_c
- 提出: https://atcoder.jp/contests/abc123/submissions/35177917
- ボトルネックになるところ (A, B, C, D, E のうち乗車人数の最も小さいもの) ですべての区間のうち最も回数の必要な箇所における回数が分かる
- あとはボトルネックの箇所 i の前後に 5 - 1 回の移動があるので 4 を足す
- D - Cake 123
https://atcoder.jp/contests/abc123/tasks/abc123_d
- 提出: https://atcoder.jp/contests/abc123/submissions/35178592
K <= 3000
と小さいことに気づくX * Y * Z
個の組み合わせを列挙すると 10^9 なのでできないA
とB
の組み合わせはX * Y
個で 10^6 なので全部列挙できるし、降順にソートできる- 最大で
K
個しか要らないのでA
とB
の組み合わせの降順での先頭MIN(K, X * Y)
個を残して捨てる - これはどんなに多くても 3000 個を超えない
Z <= 1000
なので 3000 個と 1000 個の組み合わせを列挙して降順にソートして、先頭 K 個を取れば良い
twiq 実装メモ (6)
作業のスタックの把握。
user
を解決するところまで動作させたい- repository などの実装が提供されていない
EventStore
trait を実装したいFirestoreEventStore
は一意性検査などで時間がかかってしまうInMemoryEventStore
を使うInMemoryUserRepository
をつくりたい
InMemoryEventStore
を使う InMemoryUserRepository
。
- 2022-09-21 にようやく戻ってきた
EventStore
trait にEventStream
を反映させるEventStore
trait の変更にInMemoryEventStore
を対応させるEventStore
trait の変更にFirestoreEventStore
を対応させるInMemoryUserRepository::store
でUser::version
が必要User::version
を実装する代わりにimpl From<User> for EventStream
にする- どうもバグっている
User
とEventStream
の変換がおかしそう- 直したけどまだダメ
EventStore
に二重でイベントが入っていたInMemoryUserRepository
が動くようになった
User::request
までの動作確認。
- 同一
TwitterUserId
で何度もEvent
が作られてしまう InMemoryUserRepository
の unique index の更新が漏れていたweb::router::users_show
のエラーハンドリングがないので重複時にエラーレスポンスを返せていない- エンキュー自体は伏せておいて良いものなのでエラーは潰してしまおう (ロギングは別途必要そう)
今日のコミット。
- rust-atcoder 1 commit
- rust-sandbox 8 commits
- twiq: Fix web::router::users_show to ignore errors
- twiq: Fix InMemoryUserRepository::store
- twiq: Add domain::aggregate::user::Error::AlreadyRequested
- twiq: Add User::twitter_user_id
- twiq: Remove unused UserUpdated::name
- twiq: Fix InMemoryEventStore::store
- twiq: Fix impl TryFrom
for User - twiq: Fix InMemoryUserRepository to use InMemoryEventStore