From 1ed3f6d981bbbfcccee715a9c55179a326d7a3f0 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Sun, 8 Dec 2024 10:15:31 +0100 Subject: [PATCH] added visualization for day 8 puzzle 1 --- src/day8/puzzle1.typ | 53 ++++++++++++++++++++++++++++++++++++++++--- src/main.pdf | Bin 116990 -> 131860 bytes 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/day8/puzzle1.typ b/src/day8/puzzle1.typ index 822e1a2..0c8cc2b 100644 --- a/src/day8/puzzle1.typ +++ b/src/day8/puzzle1.typ @@ -1,10 +1,11 @@ #import "/src/utils.typ": * +#import "@preview/cetz:0.3.1": canvas, draw #let in-grid(w, h, x, y) = { return 0 <= x and x < w and 0 <= y and y < h } -#let solve(input) = { +#let solve(input, return-data: false) = { let by-freq = (:) let antinodes = () @@ -41,11 +42,57 @@ } } - return antinodes.len() + return if return-data { + (grid, by-freq, antinodes) + } else { + antinodes.len() + } +} + +#let visualize(input) = { + let (grid, by-freq, antinodes) = solve(input, return-data: true) + let w = grid.first().len() + let h = grid.len() + + let freqs = by-freq.keys() + let n-freqs = freqs.len() + let colors = gradient.linear(red, orange, yellow, green, aqua, blue, purple) + + canvas(length: 1.75em, { + for y in range(h) { + for x in range(w) { + draw.circle( + (x, y), + radius: 0.1, + fill: gray, + stroke: none + ) + + for (i, freq) in freqs.enumerate() { + let col = colors.sample(i * 100% / n-freqs) + for (ax, ay) in by-freq.at(freq) { + draw.circle( + (ax, ay), + radius: 0.3, + fill: col + ) + } + } + } + } + + for (anx, any) in antinodes { + draw.rect( + (anx - 0.3, any - 0.3), + (anx + 0.3, any + 0.3), + ) + } + }) } #show-puzzle( 8, 1, solve, - example: 14 + example: 14, + visualize: visualize ) \ No newline at end of file diff --git a/src/main.pdf b/src/main.pdf index a80607f4557cc25b0df27ee023c8cdf3f46966cb..297e8fb581ade9497bac8d2666e9eac8144d471f 100644 GIT binary patch delta 16826 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 CFM+QB delta 1825 zcmZuxZBP|e7;gCpxWGgqn9Y^BOaekSp0i(PPb6u94kF4&crPLppm@bF1V%uNMJR=` zL4@HtB`{MVT9gUY3aDX&0sEiJ*PUaZJZiSU+LfSna^qew+3u{tFBEN zGoOFKz1iI&uV5wNd-(5kwtu`{tk*ZP5UqaoTs+xz(zmuy|FeA{c+Cwk_vb(*Q`)nlV;pznbM z=Ui94ryCghE^g2z4rP6@B5%xYu%_A=P|&fn{g}AVs(R6q7Y+S=Tkm}}{L}hdMHOFz z9K)ldhKZ2Hdy88(M&0n-d#~=fm#zTkGLQ1h1q1x)+RT#H8kY*~30tp>$1}L7@a)M- zuQj>HmtK;ijKf{;eS7wdM@aKCzq@Dmr3449^wW)c6raO9ykMjKvZ3k8x)^njJ{WskX9}BO2>@*T?O4w8ORK_dc5AIo!$d&wM>%F@3O8;-a z`rQ1WG|9|ncz8U$Gc`Z?QNiH{VVQLq)3@q9D#uIXt)?u^+H~5%!r<$UN^l#q%!wq# z&SdOj?3Mg}#@WJoU2NK}H`f~X?Tk$d+>nsGIc!_v_MlXyevq*?Ujlf5p$^Pmy507g z**gTh0439nyNtUm;)U-3;&?%%F%e)yV+aG5#xToD6ee-3M4y$gB=Y~%1Bq#!05aj6upf51BGcnc^TK1x$SlAd$y_ zY92|%DjLHaq6`HR$8+>qOq~AD40+CZB9fQ5g@i;ThbY&GAb_bU5DY@9=~**a6(6Bn z$S0GLbCUQ3*8ruC)M0vrBrZT)NJ#i39;oUu-XL)imJd#s@0vHJ62gOiGpfOSd!*3)B9#- mTlpvdrdF-;jMVt}Xp&Q+lTy->w#R88*$9X