Skip to content

Commit fae87b3

Browse files
committed
Day 24 part 1 cleanup
1 parent a3c6531 commit fae87b3

File tree

1 file changed

+36
-28
lines changed

1 file changed

+36
-28
lines changed

src/bin/day24.rs

+36-28
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,39 @@ struct Rule {
1717
op: Op,
1818
}
1919

20+
fn part1(rules: &HashMap<String, Rule>, values: &mut HashMap<String, bool>) {
21+
let mut todo = rules.clone();
22+
23+
while !todo.is_empty() {
24+
let dup = todo.clone();
25+
let (k, r) = dup
26+
.into_iter()
27+
.filter(|(_, v)| values.contains_key(&v.a) && values.contains_key(&v.b))
28+
.next()
29+
.unwrap();
30+
todo.remove(&k);
31+
values.insert(
32+
k,
33+
match r.op {
34+
Op::AND => *values.get(&r.a).unwrap() && *values.get(&r.b).unwrap(),
35+
Op::OR => *values.get(&r.a).unwrap() || *values.get(&r.b).unwrap(),
36+
Op::XOR => *values.get(&r.a).unwrap() != *values.get(&r.b).unwrap(),
37+
},
38+
);
39+
}
40+
41+
let mut i = 0u32;
42+
let mut res = 0i64;
43+
while let Some((_, v)) = values.get_key_value(&format!("z{:02}", i)) {
44+
if *v {
45+
res += 2i64.pow(i);
46+
}
47+
i += 1;
48+
}
49+
50+
println!("Part 1: {}", res);
51+
}
52+
2053
fn main() {
2154
let start = Instant::now();
2255
let mut input = AocInput::new("inputs/day24.txt");
@@ -40,39 +73,14 @@ fn main() {
4073
"AND" => Op::AND,
4174
"OR" => Op::OR,
4275
"XOR" => Op::XOR,
43-
_ => panic!("Unknown operation")
76+
_ => panic!("Unknown operation"),
4477
};
4578
rules.insert(out, Rule { a, b, op });
4679
}
4780
}
4881

49-
let mut todo = rules.clone();
50-
51-
while !todo.is_empty() {
52-
let dup = todo.clone();
53-
let (k, r) = dup.into_iter().filter(
54-
|(_, v)| values.contains_key(&v.a) && values.contains_key(&v.b)
55-
).next().unwrap();
56-
todo.remove(&k);
57-
values.insert(k, match r.op {
58-
Op::AND => *values.get(&r.a).unwrap() && *values.get(&r.b).unwrap(),
59-
Op::OR => *values.get(&r.a).unwrap() || *values.get(&r.b).unwrap(),
60-
Op::XOR => *values.get(&r.a).unwrap() != *values.get(&r.b).unwrap()
61-
});
62-
}
63-
64-
let mut i = 0u32;
65-
let mut res = 0i64;
66-
while let Some((_, v)) = values.get_key_value(&format!("z{:02}", i)) {
67-
if *v {
68-
res += 2i64.pow(i);
69-
}
70-
i += 1;
71-
}
72-
73-
println!("Part 1: {}", res);
74-
75-
82+
part1(&rules, &mut values);
83+
7684
let duration = start.elapsed();
7785
println!("Time: {:?}", duration);
7886
}

0 commit comments

Comments
 (0)