Skip to content

Commit bf34416

Browse files
committed
2025 Day 12 (Thanks for the input Eric - Merry Christmas)
1 parent 8b00a0e commit bf34416

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

src/bin/2025_12/main.rs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
use aoc::{common, grid::Grid, io};
2+
3+
fn solve<const PART: usize>(input: &str) -> usize {
4+
let mut ans = 0;
5+
6+
let mut shape_lines = Vec::new();
7+
let mut cases: Vec<(usize, usize, Vec<usize>)> = Vec::new();
8+
for line in input.lines() {
9+
if line.is_empty() {
10+
continue;
11+
}
12+
if line.contains("x") {
13+
if let Some((dim, vals)) = line.split_once(": ") {
14+
let dims = io::tokenize_nums(dim, "x");
15+
let values = io::tokenize_nums(vals, " ");
16+
cases.push((dims[0], dims[1], values));
17+
}
18+
} else {
19+
shape_lines.push(line);
20+
}
21+
}
22+
23+
let total_shapes = shape_lines.iter().filter(|l| l.contains(":")).count();
24+
let mut shapes: Vec<Grid<char>> = vec![Grid::new(3, 3, '.'); total_shapes];
25+
26+
for i in 0..total_shapes {
27+
for r in 0..3 {
28+
shapes[i].set_row(r, shape_lines[4 * i + r + 1].chars().collect());
29+
}
30+
}
31+
32+
// LEt's figure out the clear YESes and clear NOs first..
33+
// Clear yes : Can fit all 3x3 shapes
34+
// Clear no : Total space too little to fit even all solid spaces
35+
36+
let solid_spaces: Vec<usize> = shapes.iter().map(|g| g.count(&'#')).collect();
37+
38+
for (d0, d1, number) in &cases {
39+
let x = d0 / 3;
40+
let y = d1 / 3;
41+
let n = number.iter().sum();
42+
if x * y >= n {
43+
println!("Trivial YES");
44+
ans += 1;
45+
continue;
46+
}
47+
48+
let min_solid_spaces_required: usize = number
49+
.iter()
50+
.zip(solid_spaces.iter())
51+
.map(|(x, y)| x * y)
52+
.sum();
53+
54+
if min_solid_spaces_required > d0 * d1 {
55+
println!("Trivial NO");
56+
continue;
57+
}
58+
59+
// Thanks for the input Eric!
60+
println!("Tough : {}x{} : {:?}", d0, d1, number);
61+
}
62+
63+
ans
64+
}
65+
66+
fn main() {
67+
if let Some(input) = common::get_input() {
68+
common::timed(&input, solve::<1>, true);
69+
}
70+
}

0 commit comments

Comments
 (0)