day 14 part 1

This commit is contained in:
Andy Teijelo 2023-12-16 01:44:16 -05:00
parent df59ba47a8
commit f91c30e11d
3 changed files with 133 additions and 1442 deletions

View file

@ -1,15 +1,10 @@
#.##..##. O....#....
..#.##.#. O.OO#....#
##......# .....##...
##......# OO.#O....O
..#.##.#. .O.....O#.
..##..##. O.#..O.#.#
#.#.##.#. ..O..#O..O
.......O..
#...##..# #....###..
#....#..# #OO..#....
..##..###
#####.##.
#####.##.
..##..###
#....#..#

1467
input.txt

File diff suppressed because it is too large Load diff

View file

@ -1,72 +1,35 @@
use anyhow::Result; use anyhow::Result;
use std::{collections::HashSet, io::stdin, vec}; use std::io::stdin;
type Grid = Vec<Vec<char>>; type Grid = Vec<Vec<char>>;
fn vertical_mirror_points(grid: &Grid) -> HashSet<usize> {
let mut s = HashSet::new();
for x in 1..grid[0].len() {
let mut differences = 0;
for row in grid {
for i in 0..x {
if x + i >= row.len() {
continue;
}
if row[x - i - 1] != row[x + i] {
differences += 1;
}
}
}
if differences == 1 {
s.insert(x);
}
}
s
}
fn horizontal_mirror_points(grid: &Grid) -> HashSet<usize> {
let mut s = HashSet::new();
for y in 1..grid.len() {
let mut differences = 0;
for x in 0..grid[0].len() {
for i in 0..y {
if y + i >= grid.len() {
continue;
}
if grid[y - i - 1][x] != grid[y + i][x] {
differences += 1;
}
}
}
if differences == 1 {
s.insert(y);
}
}
s
}
fn main() -> Result<()> { fn main() -> Result<()> {
let mut grids: Vec<Grid> = vec![]; let mut grid: Grid = vec![];
grids.push(vec![]);
for line in stdin().lines().map_while(Result::ok) { for line in stdin().lines().map_while(Result::ok) {
if line.is_empty() { grid.push(line.chars().collect());
grids.push(vec![]);
continue;
} }
grids.last_mut().unwrap().push(line.chars().collect());
let height = grid.len();
let width = grid[0].len();
let mut total_load = 0;
for x in 0..width {
let mut column_load = 0;
let mut load = height;
for (y, row) in grid.iter().enumerate() {
match row[x] {
'O' => {
column_load += load;
load -= 1;
} }
let mut sum = 0; '#' => {
for (i, grid) in grids.iter().enumerate() { load = height - y - 1;
for v in vertical_mirror_points(grid) {
println!("grid {i}: v = {v}");
sum += v;
} }
for h in horizontal_mirror_points(grid) { _ => {}
println!("grid {i}: h = {h}");
sum += 100 * h;
} }
} }
println!("{sum}"); total_load += column_load;
}
println!("{total_load}");
Ok(()) Ok(())
} }