Skip to content

Commit 27db8f7

Browse files
committed
Revert "2024: Add more elegant concat implementation for Day 7"
This reverts commit 184805a.
1 parent 0534c82 commit 27db8f7

File tree

1 file changed

+25
-37
lines changed

1 file changed

+25
-37
lines changed

2024/day07/src/main.rs

Lines changed: 25 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,43 +16,26 @@ fn main() {
1616
println!("Part 2: {}", part2(&input));
1717
}
1818

19-
#[derive(Debug, Copy, Clone)]
20-
enum Op {
21-
Add,
22-
Mul,
23-
Concat,
24-
}
25-
26-
impl Op {
27-
fn apply(&self, left: u64, right: u64) -> u64 {
28-
match self {
29-
Op::Add => left + right,
30-
Op::Mul => left * right,
31-
Op::Concat => left * right.next_multiple_of(10) + right,
32-
}
33-
}
34-
}
35-
3619
fn part1(input: &Input) -> u64 {
3720
let mut sum = 0;
3821

3922
for (result, values) in input.values.iter() {
40-
let result = *result;
41-
4223
let mut edge = vec![(1, values[0])];
4324
while let Some((n, x)) = edge.pop() {
4425
if n == values.len() {
45-
if x == result {
46-
// solved!
47-
sum += result;
26+
if x == *result {
27+
sum += *result;
4828
break;
4929
}
5030
} else {
51-
for op in [Op::Add, Op::Mul] {
52-
let val = op.apply(x, values[n]);
53-
if val <= result {
54-
edge.push((n + 1, val));
55-
}
31+
let add = x + values[n];
32+
if add <= *result {
33+
edge.push((n + 1, add));
34+
}
35+
36+
let mul = x * values[n];
37+
if mul <= *result {
38+
edge.push((n + 1, mul));
5639
}
5740
}
5841
}
@@ -65,22 +48,27 @@ fn part2(input: &Input) -> u64 {
6548
let mut sum = 0;
6649

6750
for (result, values) in input.values.iter() {
68-
let result = *result;
69-
7051
let mut edge = vec![(1, values[0])];
7152
while let Some((n, x)) = edge.pop() {
7253
if n == values.len() {
73-
// solved!
74-
if x == result {
75-
sum += result;
54+
if x == *result {
55+
sum += *result;
7656
break;
7757
}
7858
} else {
79-
for op in [Op::Add, Op::Mul, Op::Concat] {
80-
let val = op.apply(x, values[n]);
81-
if val <= result {
82-
edge.push((n + 1, val));
83-
}
59+
let add = x + values[n];
60+
if add <= *result {
61+
edge.push((n + 1, add));
62+
}
63+
64+
let mul = x * values[n];
65+
if mul <= *result {
66+
edge.push((n + 1, mul));
67+
}
68+
69+
let concat = format!("{}{}", x, values[n]).parse().unwrap();
70+
if concat <= *result {
71+
edge.push((n + 1, concat));
8472
}
8573
}
8674
}

0 commit comments

Comments
 (0)