tangled
alpha
login
or
join now
nove.dev
/
aoc-2025
1
fork
atom
:)
1
fork
atom
overview
issues
pulls
pipelines
day6 part2
nove.dev
3 months ago
e43f7c5d
b88975d9
+53
-22
3 changed files
expand all
collapse all
unified
split
src
day6.rs
lib.rs
spatial.rs
+35
-15
src/day6.rs
···
1
1
use itertools::Itertools;
2
2
3
3
+
use crate::spatial;
4
4
+
3
5
pub fn day6_part1(input: &str) -> String {
4
4
-
let problems = parse(input);
5
5
-
let answers = problems.iter().map(|(operands, operator)| evaluate(operands, *operator)).collect_vec();
6
6
+
let problems = parse(input, false);
7
7
+
let answers = problems
8
8
+
.iter()
9
9
+
.map(|(operands, operator)| evaluate(operands, *operator))
10
10
+
.collect_vec();
6
11
dbg!(answers).iter().sum::<u64>().to_string()
7
12
}
8
13
9
14
pub fn day6_part2(input: &str) -> String {
10
10
-
todo!()
15
15
+
let problems = parse(input, true);
16
16
+
let answers = problems
17
17
+
.iter()
18
18
+
.map(|(operands, operator)| evaluate(operands, *operator))
19
19
+
.collect_vec();
20
20
+
dbg!(answers).iter().sum::<u64>().to_string()
11
21
}
12
22
13
23
fn evaluate(operands: &[u64], operator: Operator) -> u64 {
···
23
33
Times,
24
34
}
25
35
26
26
-
fn parse(input: &str) -> Vec<(Vec<u64>, Operator)> {
36
36
+
fn parse(input: &str, cephalopod_style: bool) -> Vec<(Vec<u64>, Operator)> {
27
37
let rows: Vec<Vec<char>> = input.lines().map(|line| line.chars().collect()).collect();
28
38
let mut problems = vec![];
29
39
let mut beginning_of_last_problem = 0;
···
43
53
let mut parsed_problems = vec![];
44
54
45
55
for problem in problems {
46
46
-
let operands = problem[..problem.len() - 1]
47
47
-
.iter()
48
48
-
.map(|chars| {
49
49
-
chars
50
50
-
.iter()
51
51
-
.collect::<String>()
52
52
-
.trim_ascii()
53
53
-
.parse()
54
54
-
.unwrap()
55
55
-
})
56
56
-
.collect_vec();
56
56
+
let operands = if !cephalopod_style {
57
57
+
problem[..problem.len() - 1]
58
58
+
.iter()
59
59
+
.map(|chars| {
60
60
+
chars
61
61
+
.iter()
62
62
+
.collect::<String>()
63
63
+
.trim_ascii()
64
64
+
.parse()
65
65
+
.unwrap()
66
66
+
})
67
67
+
.collect_vec()
68
68
+
} else {
69
69
+
let transposed = spatial::transpose(&problem[..problem.len() - 1]);
70
70
+
71
71
+
transposed
72
72
+
.into_iter()
73
73
+
.map(|line| line.iter().collect::<String>().trim().parse().unwrap())
74
74
+
.collect_vec()
75
75
+
};
76
76
+
57
77
let operator = problem[problem.len() - 1]
58
78
.iter()
59
79
.collect::<String>()
+7
-7
src/lib.rs
···
132
132
let result = day6::day6_part1(include_str!("../input/day6.txt"));
133
133
assert_eq!(result, "4951502530386");
134
134
}
135
135
-
// #[test]
136
136
-
// fn day6_part2_test() {
137
137
-
// let test_result = day6::day6_part2(include_str!("../input/day6.test.txt"));
138
138
-
// assert_eq!(test_result, "14");
139
139
-
// // let result = day6::day6_part2(include_str!("../input/day6.txt"));
140
140
-
// // assert_eq!(result, "348115621205535");
141
141
-
// }
135
135
+
#[test]
136
136
+
fn day6_part2_test() {
137
137
+
let test_result = day6::day6_part2(include_str!("../input/day6.test.txt"));
138
138
+
assert_eq!(test_result, "3263827");
139
139
+
let result = day6::day6_part2(include_str!("../input/day6.txt"));
140
140
+
assert_eq!(result, "8486156119946");
141
141
+
}
142
142
143
143
#[test]
144
144
fn day5_part1_test() {
+11
src/spatial.rs
···
70
70
71
71
retval
72
72
}
73
73
+
74
74
+
pub fn transpose<T: Copy + Default>(input: &[&[T]]) -> Vec<Vec<T>> {
75
75
+
let mut output = vec![vec![Default::default(); input.len()]; input[0].len()];
76
76
+
77
77
+
for col in 0..input[0].len() {
78
78
+
for row in 0..input.len() {
79
79
+
output[col][row] = input[row][col]
80
80
+
}
81
81
+
}
82
82
+
output
83
83
+
}