mirror of
https://gitlab.com/MisterBiggs/aoc-2023-rust.git
synced 2025-06-16 06:56:50 +00:00
part 2
This commit is contained in:
parent
e5203321eb
commit
37da94a246
68
src/day3.rs
68
src/day3.rs
@ -8,7 +8,7 @@ pub fn run() {
|
|||||||
let input = fs::read_to_string("./inputs/day3.txt").expect("Could not read file");
|
let input = fs::read_to_string("./inputs/day3.txt").expect("Could not read file");
|
||||||
|
|
||||||
println!("\tPart 1: {}", part1(&input));
|
println!("\tPart 1: {}", part1(&input));
|
||||||
// println!("\tPart 2: {}", part2(&input));
|
println!("\tPart 2: {}", part2(&input));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part1(schematic: &str) -> usize {
|
fn part1(schematic: &str) -> usize {
|
||||||
@ -46,7 +46,46 @@ fn part1(schematic: &str) -> usize {
|
|||||||
sum_of_parts
|
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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
@ -68,16 +107,19 @@ mod tests {
|
|||||||
assert_eq!(part1(input), 4361);
|
assert_eq!(part1(input), 4361);
|
||||||
}
|
}
|
||||||
|
|
||||||
// #[test]
|
#[test]
|
||||||
// fn test_2() {
|
fn test_2() {
|
||||||
// let input = "two1nine
|
let input = "467..114..
|
||||||
// eightwothree
|
...*......
|
||||||
// abcone2threexyz
|
..35..633.
|
||||||
// xtwone3four
|
......#...
|
||||||
// 4nineeightseven2
|
617*......
|
||||||
// zoneight234
|
.....+.58.
|
||||||
// 7pqrstsixteen";
|
..592.....
|
||||||
|
......755.
|
||||||
|
...$.*....
|
||||||
|
.664.598..";
|
||||||
|
|
||||||
// assert_eq!(part2(input), 281);
|
assert_eq!(part2(input), 467835);
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user