1
0
mirror of https://gitlab.com/MisterBiggs/aoc-2023-rust.git synced 2025-06-15 14:36:50 +00:00
This commit is contained in:
Anson Biggs 2023-12-03 15:01:40 -07:00
parent e5203321eb
commit 37da94a246

View File

@ -8,7 +8,7 @@ pub fn run() {
let input = fs::read_to_string("./inputs/day3.txt").expect("Could not read file");
println!("\tPart 1: {}", part1(&input));
// println!("\tPart 2: {}", part2(&input));
println!("\tPart 2: {}", part2(&input));
}
fn part1(schematic: &str) -> usize {
@ -46,7 +46,46 @@ fn part1(schematic: &str) -> usize {
sum_of_parts
}
// fn part2(calibration_input: &str) -> usize {}
fn part2(schematic: &str) -> usize {
let mut sum_of_parts = 0;
let padded_schematic = format!(".\n{schematic}\n.");
let number_re = Regex::new(r"\d+").unwrap();
let gear_re = Regex::new(r"\*").unwrap();
let windows = padded_schematic
.lines()
.tuple_windows::<(_, _, _)>()
.collect::<Vec<_>>();
for (top, middle, bottom) in windows {
for gear in gear_re.find_iter(middle) {
let search_range = std::ops::Range {
start: gear.range().end.saturating_sub(1),
end: gear.range().end + 1,
};
let mut numbers = vec![];
for row in [top, middle, bottom] {
for num_match in number_re.find_iter(row) {
numbers.push(num_match);
}
}
let mut geared_numbers = vec![];
for number in numbers {
if std::cmp::max(number.range().start + 1, search_range.start)
<= std::cmp::min(number.range().end, search_range.end)
{
geared_numbers.push(number.as_str().parse::<usize>().unwrap())
}
}
if geared_numbers.len() == 2 {
sum_of_parts += geared_numbers[0] * geared_numbers[1];
}
}
}
sum_of_parts
}
#[cfg(test)]
mod tests {
@ -68,16 +107,19 @@ mod tests {
assert_eq!(part1(input), 4361);
}
// #[test]
// fn test_2() {
// let input = "two1nine
// eightwothree
// abcone2threexyz
// xtwone3four
// 4nineeightseven2
// zoneight234
// 7pqrstsixteen";
#[test]
fn test_2() {
let input = "467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..";
// assert_eq!(part2(input), 281);
// }
assert_eq!(part2(input), 467835);
}
}