diff --git a/progress.png b/progress.png index e778539..48e5913 100644 Binary files a/progress.png and b/progress.png differ diff --git a/progress.yaml b/progress.yaml index dab82ee..6c28326 100644 --- a/progress.yaml +++ b/progress.yaml @@ -15,4 +15,6 @@ 8: stars: 2 9: - stars: 2 \ No newline at end of file + stars: 2 +10: + stars: 1 \ No newline at end of file diff --git a/res/examples/day10.txt b/res/examples/day10.txt new file mode 100644 index 0000000..7bb1248 --- /dev/null +++ b/res/examples/day10.txt @@ -0,0 +1,8 @@ +89010123 +78121874 +87430965 +96549874 +45678903 +32019012 +01329801 +10456732 \ No newline at end of file diff --git a/src/day10/puzzle1.typ b/src/day10/puzzle1.typ new file mode 100644 index 0000000..dd378b2 --- /dev/null +++ b/src/day10/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 count-paths(grid, w, h, ox, oy) = { + let tails = () + let in-grid = in-grid.with(w, h) + + let to-visit = ((ox, oy),) + while to-visit.len() != 0 { + let (x, y) = to-visit.remove(0) + let v = grid.at(y).at(x) + for (dx, dy) in offsets { + let (x2, y2) = (x + dx, y + dy) + if not in-grid(x2, y2) { + continue + } + let v2 = grid.at(y2).at(x2) + if v2 == v + 1 { + let pos2 = (x2, y2) + if v2 == 9 { + if pos2 not in tails { + tails.push(pos2) + } + } else { + to-visit.push(pos2) + } + } + } + } + + return tails.len() +} + +#let solve(input) = { + let grid = input.split("\n").map(l => l.clusters().map(int)) + + let w = grid.first().len() + let h = grid.len() + + let count-paths = count-paths.with(grid, w, h) + + let total = 0 + for y in range(h) { + for x in range(w) { + if grid.at(y).at(x) == 0 { + total += count-paths(x, y) + } + } + } + + return total +} + +#show-puzzle( + 10, 1, + solve, + example: 36 +) \ No newline at end of file diff --git a/src/day10/puzzle2.typ b/src/day10/puzzle2.typ new file mode 100644 index 0000000..837b232 --- /dev/null +++ b/src/day10/puzzle2.typ @@ -0,0 +1,11 @@ +#import "/src/utils.typ": * + +#let solve(input) = { + +} + +#show-puzzle( + 10, 2, + solve, + example: 0 +) \ No newline at end of file diff --git a/src/main.pdf b/src/main.pdf index a83c066..4559a90 100644 Binary files a/src/main.pdf and b/src/main.pdf differ diff --git a/src/utils.typ b/src/utils.typ index 80176f5..6546890 100644 --- a/src/utils.typ +++ b/src/utils.typ @@ -189,5 +189,10 @@ #let template(body) = { set text(font: "Source Sans 3") + set page( + footer: context { + align(center, counter(page).display("1 / 1", both: true)) + } + ) body } \ No newline at end of file