Spaces:
Running
Running
| 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) | |
| } | |