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