From b45cc17e0dc9ae2e6c7cbb7067dfbf72c9d6dd2a Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Wed, 4 Dec 2024 11:22:32 +0100 Subject: [PATCH] added visualization for day 4 puzzle 2 --- src/day4/puzzle2.typ | 57 ++++++++++++++++++++++++++++++++++++++++++- src/main.pdf | Bin 70670 -> 73436 bytes 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/day4/puzzle2.typ b/src/day4/puzzle2.typ index 8278cec..815c284 100644 --- a/src/day4/puzzle2.typ +++ b/src/day4/puzzle2.typ @@ -1,4 +1,5 @@ #import "/src/utils.typ": * +#import "@preview/cetz:0.3.1": canvas, draw #let solve(input) = { let lines = input.split("\n") @@ -26,8 +27,62 @@ return total } +#let visualize(input) = { + let lines = input.split("\n") + let w = lines.first().len() + let h = lines.len() + + let perms = (("M", "S"), ("S", "M")) + let positions = () + for y in range(1, h - 1) { + for x in range(1, w - 1) { + if lines.at(y).at(x) == "A" { + let tl = lines.at(y - 1).at(x - 1) + let tr = lines.at(y - 1).at(x + 1) + let bl = lines.at(y + 1).at(x - 1) + let br = lines.at(y + 1).at(x + 1) + let tlbr = (tl, br) + let bltr = (bl, tr) + if tlbr in perms and bltr in perms { + positions.push((x, y)) + } + } + } + } + + canvas({ + for y in range(h) { + for x in range(w) { + let valid = (x, y) in positions + if valid { + draw.circle( + (x, y), + radius: 0.3, + stroke: red, + name: str(x) + "-" + str(y) + ) + for dy in (-1, 1) { + for dx in (-1, 1) { + draw.line( + str(x) + "-" + str(y), + (x + dx * 0.75, y + dy * 0.75), + stroke: red + ) + } + } + } + draw.content( + (x, y), + lines.at(y).at(x) + ) + } + } + }) +} + #show-puzzle( 4, 2, solve, - example: 9 + example: 9, + visualize: visualize ) \ No newline at end of file diff --git a/src/main.pdf b/src/main.pdf index 8acfd2eebbd6136a9f9545eae4fdfb35c6718233..78acb5e463c7e14201c1f662c2e3524b66e633be 100644 GIT binary patch delta 11825 zcmZu%1z1(x(w3B#kW{(^MNS7T(kR_ZgMbK#NJzL9q(LO41d)>N5~LfEQjru173mTr z<==ky-v8>^m*+eWhheQXv)-9`XJ()CIG1#?fwVM$lUz?nP34kdY`r*JY%5G8_6?`q zAEF9Pt{$RuJSh0@7Z!o#K_Py>&`1;y3i;_*mN= zF0H^!m-g*nE@JK0UKaTnCOYh-U^6$obXomuZ~e52z<7sLpDJ{9A4+~~d(bx(pQ`z3 zV)mUQ^2=e|rcHnL(G?1g3riEl#ena6=JLh+cl;??q{|w1W^Fxf5BqZt;l*N(2hERy zi-wI&$=p`X@zTcE-x~^Gm40do zE8mniSC6YxUze+*Ji03Jyqk-auG!KRJr+Ca>x0<74$|0&E@Nx=!>jTe;`absBYCpV zH}cekWO8JRBhzVPng*)4r4DJ8hY0WutLp1pm*Rlh%ij<>YE^CSRB6P_+3O`4dEs_q1?F^h zk-e<9Xshp!{3W`chekwt&b635BZuUjp+nqzE zp%*EoPLib|miaDM@QGbA5}q;9p)nKa@MjhA8=B#H7fP*+n5>`RJm)>nd&n8eD$ccg zyH4HF8T%^lS*hs#*$3(a;nf=%hK2aicER0+Th%}A6B7vn+W$cTiFz$HuD{ z`HLnxccyt}09XT7Hm#c;CcUQ+F*h=~J~}V462`A5OYRmbn3$`rSJblW2y-?wnZlX* zHh5EX&RZUq1RMUmxcuu)3PXBO8|=Bc8SXymN;_!;aKifFP3xxBKxi%SaD(>Iy0Wst z2o`bbs4ap1rZ4wLO-|!$Qsn{%}QQ;L2 z}kn{HmJ=z2^UWqO=M z-y(a+-b!K9Db9F`muxWHO;qT)%6dxJd%B~qL9#AyQZG!`%t`*Bt!XrT5ZO&>eyrik zoYe8jn2!r^gVQBVrmEc5PSq%g?)ftKweoqbxMw!_8l>exE!?i1tk>vLWRjceXwM97U)zXwEPB+v zN{;=Izhz8rV&d~j_b8B8IgF&Z&`lyKC8V-r(%9|}U}m|=#`w|V+T^g+z}Vblt&A~7 zYvSVPMvf&x`8)Gt@eC|BS`T@S$y880l`p~sy~r!0-l zyLF~2HGEz-lX;j{w@s0P@h2~7ap*GTxTRYBvMS<`?uzU@`89Vgb>Lm9+xCqWOX`A- z+GnDEgFvfh7xJe_1ea;+S$pSGUwqIvk>Bc?inR7$N=UM1@R?XnyR#2c@qSpK@MkV3 zrT^G#$|s&=P|>k(wq&7bkNdiQTBxn8@#PB%2U;4^h3W^96^T|{6B@~t%niP9`e$0N z$UmO^)+F`K^%~Akceds7<=}fl^IJFUU9vtgS$S3gc028Ij4bVYGWJEJKzEE3XHJ!x z&abn!GU+AqBIB6ZvKW|W!q`n(YTs`J3=cnEl7}VLv_f4E^y-P`)Bta>}hRsCEDS7PUmz^J~;unccucV94qI}q0$v{RZq8Hw5B1@ z)g`azifqO1@an3rPuBtYj&kO~$^DSNUtJ0D&)F_~!E}b55qZ)2@D}U3a<{+KHG{7K zkG}ZF00E1YqMfwbWaXQ#f+w;LigP|y-Qy@Qswo+<8p(b=nJ4p-M>xsS&+V~D|6T@_ zL>o(&-p8!Aml_|heTZI&SobLCxK=vRXk<-2E=@D4tW7nuHn+rlMRaH8UX1S2U2nSU z>V45_R&^~I_Jz)qGvOm6zb1Cg0@LI3hYd98nsNau*82jP<0=Sd`%YPgUjrZKZr`17 z{ZtgyN|F(fx$~}MNZp=RtBHE+ByC?Gd1hO>Me+q2YX>VWvR;#B9oJLw5o-GV_7A@H zHk==OduL$gKuAeg_(tf}c_YnvJ-J=6)gDieExxY%&6`&TRdm1Q&gyZf3V&CjZ(7RlQS6&OQnZR5*5wqZB@s^G2k2hK-NUvkY|Fcwtf zIH7t>QrI6-Yk%H9`z-AkkB7@63%`T(TN8~o9x*^i*1G5D6NmJP`d?=8J#0lgyo%p` zMWiyL(5s=YPFkpPart6SHU*3+~?15M#`RGTrDou4qyco&n_q#+hpEPAV7_2Im z`c}<7+BCYAccs45F?*$Yy6uN?ucurec*X0dQfsP1 zHS5?~?-8Df&$>1N@o|~mLA!Lm4ZRGH_x&bYBi2clSKi`GTiG|pgi{#&a*bx!T^>X! zDY)MW*By&)ZrL{3u0AXtUJwvx+p!fM{UD{u3Y=|+YZi~i(U?pmb0%R!!c{ATE5^;G zlB<$C(^|@>Z6stEUo6BJpE5~m@i!-RZd@7S7c?%b6j;?`8H(7yWAIDc_p!&AB*_en z6ONs4(7pWdQbljvi-7yO-HVGqe1cDFNZdl4yrpDfuG`fvoyYr(_e1VRk~@oOWXz1Q z=4;?&{zEqL9kqJ4W21J97(>mbp|UtNF?Xp_gw_SRLW>o*m4uM1H?p3jty4EO>(*9R z?-qq8+6LMwHlgC2XPsvmvPu-_nNBW+)46q30q`d)3ndFu_hNR2lb%K{-rl}@s<_7> zRpt|~?^~sUFGa&)I(cW0cBPZfteR4ADq}W~rb}`yU$B5iWpAcR1Jmu63Pru1~2{olV6R+VrIS z$HsS5Z(`>&&O~0xoN9|yLiM@Zv7XtUnX%7Q&(@OUub7)#7?yGCPT4tl|LuwJ=)yO7 zz*?;?UG?+N#-d?6$02R4gj+2VYP#!PC;c|_&kobSwDy}?#;X@C1Cr~^7_^5m)sv{v!7|mO8K>N%g_*rcXV=akZ$tY{?g-kK;vdO^0D}B_^@1k ztlV;2()Me$=H7v*wY=dG9duB#H2-l(2{kq`mFCbo(!xKNTK=r>iSm!(Nn6ja@Azyp zkL1vOxpPuy;iz` z<*zs6yvp^)>a+fUWXF&#zK>6wB`BK?u%z0JQ;oog%^|dp!yI5Mif3Ad& zx}HxBVZVMcutX_)aL~XPzN~rGcrwTUcn%aySt1e(yi-wJ!Zd9F5?U#z2cjjz4DJK0XJ}1!4>xYB7XOyCs&X+lW zMEy7nC)Vh6cPe$`jmX+milM6at8~WzS~zvt4wrg6#&N)F7P;_4M!ET8?dB)=`ABLzv|9)+@Z4xV2 zQ``Xm^|~uR_?~-RDy-(8xZ+ScMl%>e66Eo2ubgjWrNo*qZqP{DHpJLT{i>t z%HDT8zV5egtq>y{$o}L0T5Ur6JPT*=IzWP{ylUYQPG57G~{5gTMm+ZTAOQ-6r z^)o7u#1*81Uakk*QzSDbQzla-GnlY(Q1?;y@$ZC^*mE4q&aOxCN?!MWpO)dl_wXg9 zze9NepJFK)ylqOK|tQaPEmpVlQlA@C%}= ztzpv{=Oay<2Z(&Gz4#j9`5>5XkD?T9$uuNls)QA+H2Uz+V2JETno-cfI$!-!jKUK( z-d`zRWHK%cSXF*@frB39ZsDG_m^3Y-McDS~ZKp+qd*Ht6@M=DjzNVgO?moBiQ{b(T zwe96{^jM9JY{Jr4u}$7RXUZaa#)3tv4>_;PG8ORC*gyv_E2?}}MxgE7&zY-dmA=Xl z)#SS9?+euD9l2#|wp^VFP-~)EX?>|?PF`1%UeWzH;~Y(7fSKg@Nt3Bymh`nt>h>fu z%39~US>(I2H0i}|tx#q(3|MGG;$q8zyzvbz-hK$zrC z+t#ag5vl@8hpsds;X2N1+1Qz7?)?B_vb}5JcW>Jv0D+ zr3*yYR+ZYCoru4rJ;KU}FDf_KpS{y@dYzM~>44drsDa|0pj^O>-LFfWd-Dc#LA9`B z#*5P4&%J4m=y2CQk5Jh<+qm7mV;k!&F7@wc4i)v{MztgeJS-MYE(ok#zZx~!$T6V4h={5}b|acBw}&Im!=K@9%+gF*YrE zT^BYyEYMfDv8EniK6d7*ThG=e>c|eU#Qip<@(rBhGu`?;Ri!k3)yO zd)`}U4Z1f2Yuq_a4WEImksFb^{p~u-hrb;5cf`3XKXO-wCukPbtSxNj)o3ztH$M9e zAdiluGiPHE)m~=0ES0Dz#@m$>iep;xUh_%*svGIPP zdBB^zFJHcm$B|XwT+}X_$1m`C?CrSTRJ#~*W957P#^?8$_N?Kqb=7ZfiX6U)*3>)0 zb;Iu4(KTPWiHVvnfOg_#;l#^w_lca(Ih(&cyZ6m@tTuLPdvR`UZ@7-cE!{eA*czz@ zeh))O)1>y)HI2XOITxGJ<67ksCOVP3ppHp|4c(?TwCCP9Kg~~)?{_nn^*!1z?fr*u zhR?>0Z(P3-w(@$RZ)uVwd3+@=RhG0EYc7fNZZuepeP`3^xDD)QOds?w0FCfdh{tMd z91moqrl$2`-tZoAJ-i>z(A}PUmpq3(L7MqW-J=&C{*BjD&#Vhxj85QYiWyih9}9Xx zQ%=ht_MB5pTG)0^MH<$bQqh;_GZc(6aSah=xi(E1z&xM(B>78Gn-E}D1^6iyz;B1z zZ#C2%EaDrc@-qNx{Gw3<#k~-go+wO-h~mA3)vqcgX z6&=C$_PBLFgxu+zleZ|+7Ob!yUrCZk%2QE1n zUgzLkG1|Y)+A)xGDp9C^T&ljUa(%n|Rq!Lv=Q4xkLJ>_VRfm@Lz>LkC>r!{JxY;jk zt=N`Q(*@bsyJx$xRt<>XwJ90|=8gCgUmf8Lt-kaQm8yQNbi6{5BHD09AEu!-={q?Fu*CgU!YMnk;W^LS} z=1>%;G^dbj*KklKL}?!2`<{qEi*(PeGLr0;j8>4Ys%PgT2Lmm0J=#uBUOz+X=%);|(U5&Zdz zO}n_1(Ku_X;TJ(0 zChvOfWcV8r3P(eIEDOpkwKByX%=28Vi*lSRJJo2BrC2_R|DJ#IhK~04LbrOp;bsHB z3>3+kJ{1zd!UB~I3|XmuT5|m(_oqlE*P+LB(!jkKxlYPh3d3=}OVa8eGfp6sUcWja zZHRuY`Qeo@`V3>CR$LDHNrjX>o3%s!Qzy#m4Dyl22p*I1);_W7%0@?W&cS%IG_!?XQdJksntlmA`}uyJ*X? z=QI!z)v0Z1O}h$eKeV%_NcUTQL?09Uh4Y=v&a{GKUyh**=eT*i)+vn(+9B1id_SqK zRXn|Hd(J&`pSO7QUWkT4Xk++Pg4)o*_VL9qbKrBK;)ujbuGJ5gf*_9s{micM1S$uk zBq3QZ`I@TZLDw5)HtjlGN zrJBo&#nfLG^~B+q!8Wiy86>a&D5v~|7$4M3r1E4t%8N-k}=FSzNG<{w~PzMlndv($4@t>YB9^4@M8cN z9T`~>Pqk)Vi`dlFI=5%P`1Hn;yTMPdKk(bRd?6_tn~0=SmHZ=G%iSk~bJ@p8UD!Oy zz^HS7_qquqFD!_5GEMmvvS*YU*WQ=L=&e`&C_c^6no9-db7*x-A!;;{JF-HB zMe?L6v7(0>KSj=HZRH~!N?A+wyxMhufj1$&h}_)w^NSN4-h34n?yYnEMBszZx7lQ+ zn|T*~6(oWRYxzHRmnOPB*ynkekx56M*FMVD@^Ry*wr|740?E~Wy*k*XK#|BIIF}HN zg(_SNr~Pb{V(RJ?$f}@A+j||Ne2g!SXI`6ltYT5Yau^w(|^xtR3*w*ey%<= zRE~)nY&AwG%UVThx&7e(;P!=KU=D|7RB@K^AdiT^?<|WP4`WtrKUmW@f@wVBozk_1^czo3-2tiyG$dey4$^#-ooBWt`5Z z8Xph$zFQbdo_K~_&Dd>!h9viVC9^Lvny}b8YTvQ_mEC%qYDWEig)y0|<>V5w+UdwA z@4h?o5$zgEjhKb9Wml#~GI}+8Z@cdtrhWkZn6}2PuT?3^V?xGJ#!L#seTBU`s(MNR z-#O}{SrhOEA20QA>U*?(>29?O`(7_u+fHp$xRa0F#MdhSiXY!vj;frzfw^hsU$tg5 zHI0XB;pe@NuASoc+1uYSIC!v9V=C-Zo8s{)X~~E5SfT0H;pS_SfXj;S-&^BJr5pXOPDnmk| z0s%+iAd2A_#Gg0*ePILw2m6=Nz<^J@hBpd-b5Q#uS6eE#X$W2gas7p{ts7sJ|s7p|AH~>+MLO@-DMnd67Bf!u1e}nl4 zf+#R`ATm7o{Q!b>Xc+e2K@I#rYalRS$Pq5Yz#y!FKx6*Lfmk#|F&YPr1uP8wqQalX zfcPUYILzO|-!c>i5(^kK)SnnE9HJPDLqkx-VjvuVz#{Ny;4f=H#aI*^f&v!&0tMkZ z92N;#heQ7d*8if4gG198hrs>EXy8AjjliMckbuLZp;m(g2e};{28|g!n0JImLkUR^ zh6MK#9*Bg2DFNAxhZ6=85(Z0fr66Jg;21(MkZ>fL(5px|$SnlNBEdQWJr=AkgzMli zNZ27kuKLIHKUo}Pc8F(?AQpt-gaqpXXWWFwKFy9oCpv1mdkAdyHk1ZgA+z(6-+AlZyWVbKr+QD{h(B2gd=gvOx2 zn1IMo$bYT-gT=vekAy&o{vRO*auDQpXgChK7YQjJNDTV#Q2dQQ5(D0k&_XmG8iW`a zgiMhj_d#xlMMBCE5(|ekI7kc@2S9FufmUTC77PbM191pQu|?uwkp2gW#XvX`iN*eh z5C6;JNHCiqD1g}n2^t(828kIQ8V1P-90(1>Xpj*9l7aYx^$nV{cr1iCk$5n?{@VO| zFAC}=koySNppp&O%NH9V1NMeN5jz&2+`muM0h(i92|TJ4@4lKMkB!NCR_*ln9y}#-e52igbVQq z1Yz2N-h?##;QXGz!1TK(LlD{t&f zaQK1B;E=fl^ZOA8WG_kvLVloAArCA-5rm0BX2HS}Jei1W{`Z5QgmosO(^TL?2o#l| JprWSI{{e+$a%2Di delta 8986 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 Hndtuy@?*VW