bouzuya.hatenablog.com

ぼうずやのにっき

ARC132 の C を解いた

ARC132 : AtCoder Regular Contest 132 の C を解いた。

  • C - Almost Sorted https://atcoder.jp/contests/arc132/tasks/arc132_c
    • 提出: https://atcoder.jp/contests/arc132/submissions/33248180
    • 解説 AC
    • 全体を並び替えると到底間に合わない
    • d が小さいので前後 d 個くらいなら並びをすべて試しても間に合いそう
    • それをどう数えていいか分からず断念して解説を見た
    • bitDP
    • 使用済みの数字を bit で持つが全体は持てないので i の前後 d 個分を持つ
    • DP の更新の部分で次の bit 分を参照するところが新鮮だった
    • dp[i+1][(set>>1)|...] += dp[i][set];

bouzuya/rust-sandbox の its の domain crate では module を↓のように切っていた。

domain/
  aggregate/
    aggregate1.rs
  entity/
  value_object/

これは DDD の戦術的パターンの技術的な分類による分割だ。

良い点:

  • 分類先が明確であること
    • たとえばエンティティと値オブジェクトの両方になることはない
    • 配置に悩まなくて済む

悪い点:

  • エンティティと集約の関連が見えにくい
    • 「エンティティは特定の集約からしか参照されない」という前提がある
    • どの集約から利用されるエンティティなのかが見えにくい
  • 「 (このプロジェクトにおける) 値オブジェクト」には集約間で共有する「値」と集約固有の「属性」が混じっている
  • 他の集約からのみ使用されるエンティティや値オブジェクトが混じって見える

次の分割への変更を考えている。

domain/
  aggregate1/
    entity/
    attribute/
    aggregate1.rs
  aggregate2/
  value/

集約という範囲におさめられるものはおさめておくことを試してみようと思っている。


今日のコミット。