Skip to content

Commit 8471605

Browse files
committed
feat(07/2024): solve first part
1 parent df95202 commit 8471605

File tree

2 files changed

+52
-4
lines changed

2 files changed

+52
-4
lines changed

readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
| [Day 4: Ceres Search](src/solutions/year2024/day04.rs) | ⭐⭐ | 8.620 | 6.918 |
1818
| [Day 5: Print Queue](src/solutions/year2024/day05.rs) | ⭐⭐ | 3.151 | 11.874 |
1919
| [Day 6: Guard Gallivant](src/solutions/year2024/day06.rs) || 8.738 | |
20+
| [Day 7: Bridge Repair](src/solutions/year2024/day07.rs) || 18.503 | |
2021

2122
# 2023
2223

src/solutions/year2024/day07.rs

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,72 @@
11
use crate::solutions::Solution;
2+
use itertools::Itertools;
23
pub struct Day07;
34

45
impl Solution for Day07 {
5-
fn part_one(&self, _input: &str) -> String {
6-
String::from('0')
6+
fn part_one(&self, input: &str) -> String {
7+
input
8+
.lines()
9+
.map(|l| {
10+
let (left, right) = l.split(": ").collect_tuple().unwrap();
11+
let test_value: usize = left.parse().unwrap();
12+
let mut numbers: Vec<usize> = right
13+
.split_whitespace()
14+
.map(|s| s.parse().unwrap())
15+
.collect();
16+
17+
let current = numbers.remove(0);
18+
let value = Self::solve(test_value, current, numbers.clone());
19+
20+
if value {
21+
return test_value;
22+
}
23+
24+
0
25+
})
26+
.sum::<usize>()
27+
.to_string()
728
}
829

930
fn part_two(&self, _input: &str) -> String {
1031
String::from('0')
1132
}
1233
}
1334

35+
impl Day07 {
36+
fn solve(expected: usize, current: usize, number_lefts: Vec<usize>) -> bool {
37+
let mut numbers = number_lefts.clone();
38+
39+
if numbers.is_empty() {
40+
return expected == current;
41+
}
42+
43+
let next = numbers.remove(0);
44+
45+
let current_add = current + next;
46+
let current_multiply = current * next;
47+
48+
Self::solve(expected, current_add, numbers.clone())
49+
|| Self::solve(expected, current_multiply, numbers)
50+
}
51+
}
52+
1453
#[cfg(test)]
1554
mod tests {
1655
use crate::solutions::year2024::day07::Day07;
1756
use crate::solutions::Solution;
1857

19-
const EXAMPLE: &str = r#""#;
58+
const EXAMPLE: &str = r#"190: 10 19
59+
3267: 81 40 27
60+
83: 17 5
61+
156: 15 6
62+
7290: 6 8 6 15
63+
161011: 16 10 13
64+
192: 17 8 14
65+
21037: 9 7 18 13
66+
292: 11 6 16 20"#;
2067

2168
#[test]
2269
fn part_one_example_test() {
23-
assert_eq!("0", Day07.part_one(EXAMPLE));
70+
assert_eq!("3749", Day07.part_one(EXAMPLE));
2471
}
2572
}

0 commit comments

Comments
 (0)