Spaces:
Running
Running
File size: 1,404 Bytes
88d4171 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
pub fn process_hearts(pool: &mut [u32; 7], need: &[u32; 7]) -> (u32, u32) {
let mut satisfied = 0;
let mut wildcards = pool[6] as i32;
let mut total_req = 0;
// 1. Specific colors
for i in 0..6 {
let n = need[i] as i32;
let h = pool[i] as i32;
total_req += n;
if h >= n {
satisfied += n;
pool[i] -= n as u32;
} else {
satisfied += h;
pool[i] = 0;
let deficit = n - h;
let used_wild = wildcards.min(deficit);
satisfied += used_wild;
wildcards -= used_wild;
}
}
// 2. ANY (STAR) requirements
let mut any_need = need[6] as i32;
total_req += any_need;
// Use remaining wildcards
let used_wild = wildcards.min(any_need);
satisfied += used_wild;
wildcards -= used_wild;
any_need -= used_wild;
// Use specific surpluses
if any_need > 0 {
for i in 0..6 {
let surplus = pool[i] as i32;
let used_surplus = surplus.min(any_need);
satisfied += used_surplus;
pool[i] -= used_surplus as u32;
any_need -= used_surplus;
if any_need <= 0 { break; }
}
}
// Update wildcard pool
pool[6] = wildcards.max(0) as u32;
(satisfied as u32, total_req as u32)
}
|