diff --git a/src/day4/puzzle1.typ b/src/day4/puzzle1.typ index eefd500..3eb83f4 100644 --- a/src/day4/puzzle1.typ +++ b/src/day4/puzzle1.typ @@ -1,10 +1,11 @@ #import "/src/utils.typ": * +#import "@preview/cetz:0.3.1": canvas, draw #let check-xmas(lines, ox, oy) = { let w = lines.first().len() let h = lines.len() - let total = 0 + let dirs = () for dy in (-1, 0, 1) { for dx in (-1, 0, 1) { if dx == 0 and dy == 0 { @@ -26,11 +27,11 @@ } } if buffer == "XMAS" { - total += 1 + dirs.push((dx, dy)) } } } - return total + return dirs } #let solve(input) = { @@ -42,7 +43,7 @@ for y in range(h) { for x in range(w) { if lines.at(y).at(x) == "X" { - total += check-xmas(lines, x, y) + total += check-xmas(lines, x, y).len() } } } @@ -50,8 +51,41 @@ return total } +#let visualize(input) = { + let lines = input.split("\n") + let w = lines.first().len() + let h = lines.len() + + canvas({ + for y in range(h) { + for x in range(w) { + if lines.at(y).at(x) == "X" { + let key = str(x) + "-" + str(y) + let dirs = check-xmas(lines, x, y) + draw.on-layer(2, { + for (dx, dy) in dirs { + draw.line( + (x + dx * 0.2, y + dy * 0.2), + (x + dx * 2.8, y + dy * 2.8), + stroke: red, + fill: red, + mark: (end: ">") + ) + } + }) + } + draw.content( + (x, y), + lines.at(y).at(x) + ) + } + } + }) +} + #show-puzzle( 4, 1, solve, - example: 18 + example: 18, + visualize: visualize ) \ No newline at end of file diff --git a/src/main.pdf b/src/main.pdf index 78acb5e..3de424e 100644 Binary files a/src/main.pdf and b/src/main.pdf differ