Advent 2025 Day 6 Part 2
This commit is contained in:
parent
99cde16ca6
commit
569e7de087
2 changed files with 38 additions and 22 deletions
|
|
@ -1,34 +1,50 @@
|
||||||
pub fn solve(input: &str) {
|
pub fn solve(input: &str) {
|
||||||
let lines = input.lines().collect::<Vec<_>>();
|
let transposed = input.lines().map(|line| line.as_bytes()).collect::<Vec<_>>();
|
||||||
|
let mut lines = Vec::new();
|
||||||
|
|
||||||
let rows = lines[..(lines.len() - 1)].iter().map(|line| {
|
for idx in 0..transposed[0].len() {
|
||||||
line.split(" ").filter(|str| !str.is_empty()).map(|num| { num.parse::<u64>().unwrap() }).collect::<Vec<_>>()
|
let mut line = Vec::with_capacity(transposed.len());
|
||||||
|
for row in transposed.iter() {
|
||||||
|
line.push(row[idx]);
|
||||||
|
}
|
||||||
|
lines.push(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
let problems = lines.split(|line| {
|
||||||
|
line[..] == [32].repeat(line.len())
|
||||||
}).collect::<Vec<_>>();
|
}).collect::<Vec<_>>();
|
||||||
|
|
||||||
let operators = lines.last().unwrap().bytes().filter(|b| *b != b' ').collect::<Vec<_>>();
|
let mut sum_of_results = 0;
|
||||||
|
|
||||||
// println!("rows: {rows:?}");
|
for problem in problems {
|
||||||
// println!("operators: {operators:?}");
|
let op = problem.first().unwrap().last().unwrap();
|
||||||
|
|
||||||
let mut sum_of_operations = 0;
|
if *op == b'*' {
|
||||||
|
|
||||||
for (idx, operator) in operators.iter().enumerate() {
|
|
||||||
if *operator == b'*' {
|
|
||||||
let mut result = 1;
|
let mut result = 1;
|
||||||
for row in rows.iter() {
|
|
||||||
result *= row[idx];
|
for line in problem.iter() {
|
||||||
|
let cleaned = line[..(line.len() - 1)].iter().filter(|byte| **byte != b' ').copied().collect::<Vec<_>>();
|
||||||
|
// println!("cleaned: {cleaned:?}");
|
||||||
|
let parsed = unsafe { str::from_utf8_unchecked(&cleaned) }.parse::<u64>().unwrap();
|
||||||
|
// println!("parsed: {}", parsed);
|
||||||
|
result *= parsed;
|
||||||
}
|
}
|
||||||
// println!("row {idx} (*): {result}");
|
sum_of_results += result;
|
||||||
sum_of_operations += result;
|
// println!("result: {}", result);
|
||||||
} else {
|
} else {
|
||||||
let mut result = 0;
|
let mut result = 0;
|
||||||
for row in rows.iter() {
|
|
||||||
result += row[idx];
|
for line in problem.iter() {
|
||||||
|
let cleaned = line[..(line.len() - 1)].iter().filter(|byte| **byte != b' ').copied().collect::<Vec<_>>();
|
||||||
|
// println!("cleaned: {cleaned:?}");
|
||||||
|
let parsed = unsafe { str::from_utf8_unchecked(&cleaned) }.parse::<u64>().unwrap();
|
||||||
|
// println!("parsed: {}", parsed);
|
||||||
|
result += parsed;
|
||||||
}
|
}
|
||||||
// println!("row {idx} (+): {result}");
|
sum_of_results += result;
|
||||||
sum_of_operations += result;
|
// println!("result: {}", result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("sum of operations: {sum_of_operations}");
|
println!("sum of operations: {sum_of_results}");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
use paste::paste;
|
use paste::paste;
|
||||||
mod utility;
|
mod utility;
|
||||||
|
|
||||||
solve_day!{2}
|
solve_day!{6}
|
||||||
// test_day!{2}
|
// test_day!{6}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue