def min_count.go
unified-nsga-iii@0.2.2.0 · survival.bend:370
import unified-nsga-iii@0.2.2.0/survival.bend as Survival
import Base
import unified-nsga-iii@0.2.2.0/util.bend as Util
370def min_count.go(+counts: List<&2, Nat>, +fuel: Nat, refs: List<&2, Nat>) -> Nat:
371 match fuel refs:
372 case 0n Nil{}:
373 4294967295n
374 case 0n +r <> rs:
375 Util.nat_min(Util.get_nat(counts, r), min_count.go(counts, 0n, rs))
376 case 1n+p Nil{}:
377 4294967295n
378 case 1n+p +r <> Nil{}:
379 Util.get_nat(counts, r)
380 case 1n+p h <> t:
381 +all = {h <> t : List<&2, Nat>}
382 +mid = Nat.div(Util.list_len(Nat, all), 2n)
383 lo hi = min_count.go(counts, p, List.take(&2, Nat, all, mid)) min_count.go(counts, p, List.drop(&2, Nat, all, mid))
384 Util.nat_min(lo, hi)