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) }