From 11277f06775b11d920613905a17b3d0a1b395803 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Wed, 4 Dec 2024 11:31:59 +0100 Subject: [PATCH] added visualization for day 4 puzzle 1 --- src/day4/puzzle1.typ | 44 ++++++++++++++++++++++++++++++++++++++----- src/main.pdf | Bin 73436 -> 76193 bytes 2 files changed, 39 insertions(+), 5 deletions(-) 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 78acb5e463c7e14201c1f662c2e3524b66e633be..3de424eb05eec29f6587b133c557e1dad1e3471f 100644 GIT binary patch delta 13455 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

g-P{Fs!Zphh zB5mgf`g_kJJ>sbMTF7q*NgW)4yrlFs5DhTgPKnBaQzwKusg2mc?)j{ZkQNepoCyJb zYbNu|;VdD!W05>!@KKU^Oeqc@amqsn;UFj#uY-(3_|zdC#7Km5>0wQOIALmR$qy38 z=~oB`26LH6=> zxpdCZA5mXi7!Rdi_0XRIHZDE04Yt7<7bdifjZeQWm9Yu&?E#OaG*8AlRoB4fk(gd9Pf5Xce4 zQF>7xjEBSim)by*v(fBuGq7LIRh|Qy2%mNsy_F3gqiz^qM`;PsGJYg8s|J zKqIta^jbXFMhNATkmT}vBk2o-?r(?F)QTbas-7~?>O#PP>9QSlaP>`7jUj*$V&9@tBi9A`hE5w zGB_8N8^<`8CpTB%TwHEmz~Sp%*`W<>{C>4W(%Bs2%1MahI9Imsa1>63vIOBiQ;sxB zaAk7_M@eCS!%Vxl2#yjtBach}M_{lDaO)=9O*jvi>pC2|$tEV$MQ-APQ-DMnTK|6e zVIZjxM9SWP2M0!SPD0dat%WpeH0vA7n5I6NjN-Z zCn>nNVrnBFdpo9=~~ji|AX5AxvdmQz^O~F zGA@_>Bq2Y z*yf0-F`qs}x`v0tlP(T>m3a~D5Ec{;pK;309GQUq_Zer}G;_(NPgJyDWORIFU=W)W Oz?~Y~%*=Ma-TwjgO@Cwn