diff --git a/progress.png b/progress.png index 19c60e9..3be3cde 100644 Binary files a/progress.png and b/progress.png differ diff --git a/progress.yaml b/progress.yaml index 5674dee..759734f 100644 --- a/progress.yaml +++ b/progress.yaml @@ -19,4 +19,6 @@ 10: stars: 2 11: - stars: 2 \ No newline at end of file + stars: 2 +12: + stars: 1 \ No newline at end of file diff --git a/res/examples/day12_1.txt b/res/examples/day12_1.txt new file mode 100644 index 0000000..cc5f968 --- /dev/null +++ b/res/examples/day12_1.txt @@ -0,0 +1,4 @@ +AAAA +BBCD +BBCC +EEEC \ No newline at end of file diff --git a/res/examples/day12_2.txt b/res/examples/day12_2.txt new file mode 100644 index 0000000..cc213c5 --- /dev/null +++ b/res/examples/day12_2.txt @@ -0,0 +1,5 @@ +OOOOO +OXOXO +OOOOO +OXOXO +OOOOO \ No newline at end of file diff --git a/res/examples/day12_3.txt b/res/examples/day12_3.txt new file mode 100644 index 0000000..0b328f1 --- /dev/null +++ b/res/examples/day12_3.txt @@ -0,0 +1,10 @@ +RRRRIICCFF +RRRRIICCCF +VVRRRCCFFF +VVRCCCJFFF +VVVVCJJCFE +VVIVCCJJEE +VVIIICJJEE +MIIIIIJJEE +MIIISIJEEE +MMMISSJEEE \ No newline at end of file diff --git a/src/day12/puzzle1.typ b/src/day12/puzzle1.typ new file mode 100644 index 0000000..8e4c0b2 --- /dev/null +++ b/src/day12/puzzle1.typ @@ -0,0 +1,68 @@ +#import "/src/utils.typ": * + +#let offsets = ( + (-1, 0), + (0, -1), + (1, 0), + (0, 1) +) + +#let in-grid(w, h, x, y) = { + return 0 <= x and x < w and 0 <= y and y < h +} + +#let solve(input) = { + let grid = input.split("\n").map(l => l.clusters()) + let w = grid.first().len() + let h = grid.len() + let in-grid = in-grid.with(w, h) + + let visited = ((false,) * w,) * h + let total = 0 + + for y in range(h) { + for x in range(w) { + if visited.at(y).at(x) { + continue + } + let char = grid.at(y).at(x) + let cells = () + let borders = 0 + let next-cells = ((x, y),) + while next-cells.len() != 0 { + let (cx, cy) = next-cells.remove(0) + cells.push((cx, cy)) + visited.at(cy).at(cx) = true + for (dx, dy) in offsets { + let (x2, y2) = (cx + dx, cy + dy) + if (x2, y2) in cells or (x2, y2) in next-cells { + continue + } + if in-grid(x2, y2) { + let char2 = grid.at(y2).at(x2) + if char2 == char { + next-cells.push((x2, y2)) + } else { + borders += 1 + } + } else { + borders += 1 + } + } + } + total += borders * cells.len() + } + } + + return total +} + +#show-puzzle( + 12, 1, + solve, + example: ( + "1": 140, + "2": 772, + "3": 1930 + ) +) \ No newline at end of file diff --git a/src/day12/puzzle2.typ b/src/day12/puzzle2.typ new file mode 100644 index 0000000..e69de29 diff --git a/src/main.pdf b/src/main.pdf index dad93e2..94d7527 100644 Binary files a/src/main.pdf and b/src/main.pdf differ