( mem: &mut HashMap<usize, usize>, mask: &[u8], v: usize, i: usize, addr: usize, )
| 30 | } |
| 31 | |
| 32 | fn write( |
| 33 | mem: &mut HashMap<usize, usize>, |
| 34 | mask: &[u8], |
| 35 | v: usize, |
| 36 | i: usize, |
| 37 | addr: usize, |
| 38 | ) { |
| 39 | let bit = 1 << (35 - i); |
| 40 | match mask.get(i) { |
| 41 | Some(b'0') => write(mem, mask, v, i+1, addr), |
| 42 | Some(b'1') => write(mem, mask, v, i+1, addr | bit), |
| 43 | Some(b'X') => { |
| 44 | write(mem, mask, v, i+1, addr); |
| 45 | write(mem, mask, v, i+1, addr ^ bit); |
| 46 | } |
| 47 | _ => { mem.insert(addr,v); } |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | fn part_two() -> usize { |
| 52 | let mut mem = HashMap::new(); |