From 77390e08f3b8ba741e41b5e6996bb0fab76b0d0d Mon Sep 17 00:00:00 2001 From: Tristan Date: Fri, 13 Dec 2024 12:19:42 +0000 Subject: [PATCH] 2024 day 13 in nix --- 2024/13/example.txt | 15 +++++++ 2024/13/graph.png | Bin 0 -> 68156 bytes 2024/13/solution.nix | 81 ++++++++++++++++++++++++++++++++++++++ 2024/13/solution.test.nix | 52 ++++++++++++++++++++++++ 2024/flake.lock | 4 +- 2024/flake.nix | 2 +- 6 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 2024/13/example.txt create mode 100644 2024/13/graph.png create mode 100644 2024/13/solution.nix create mode 100644 2024/13/solution.test.nix diff --git a/2024/13/example.txt b/2024/13/example.txt new file mode 100644 index 0000000..912f482 --- /dev/null +++ b/2024/13/example.txt @@ -0,0 +1,15 @@ +Button A: X+94, Y+34 +Button B: X+22, Y+67 +Prize: X=8400, Y=5400 + +Button A: X+26, Y+66 +Button B: X+67, Y+21 +Prize: X=12748, Y=12176 + +Button A: X+17, Y+86 +Button B: X+84, Y+37 +Prize: X=7870, Y=6450 + +Button A: X+69, Y+23 +Button B: X+27, Y+71 +Prize: X=18641, Y=10279 diff --git a/2024/13/graph.png b/2024/13/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..83e526ddfd1a1aa061773d4f4cc511c94b2e1f8b GIT binary patch literal 68156 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

iOfT(0|; znxV1RYTC7rY#sC7Lk3HrzQE2(-UW&ZoYvi7gU>E30Pdn=6P?9>yOd$@7Bv{!9y0@p zfd{tUDHY)Xr|m1<)}egrr&?Qc($iI-Q;K z%fVtn?)j?En`P)=Yc~S~WoQiEzlEUS42?yk8HPV`H!?P66TN-~{QddCIGMvbjn}bY z(XN@=laRDE5Qc`6())OLpcJgc{SC7@fZ9_6h4JIztD<6JGou|Q*=+Cas3rV>@PPsR z4a}>Bq316tsNr{}U*s6${K*9%#i6{;M+xs7;$%;(EO`zuF z8C*$)BTVzsisG|c(1n8BC1#O=5OZ1(z6%Qq#IRKm;us_dbOVI};2a{>$;o{HS8wMa z9U~qBW*zhb>PDVyU})$u`)xg<8=i*Hw?U#ES=}S}D}vi!A^923-)GN`M*A@Vvq3(! z!^14)NxNy3(%D#1C$;Cz4uE~iIAUHO_78RDeeHcOE9)8o{awC_u23p+4dx|DM>IrG zOfge8Kcz6de;}H0l+V!>un9$aju$mG-mTjX8Rlsfm58AXA9^HsX#3(#TYh;4YXUs7FzQ6Q3X znASuUyJHFrl=f#XT*x2%BPrPFPTa&EuH%8iJkdUpIFmg8Nps zXb&10Ln4~bn+p-dmnsoWrJ8Tsv1V}#Mcuz&ha_SJf_}nOSzWya7O#Lob0LQh*S#p~ ze6teE0_S?t?g;c{F`EE4p*Wddj2l9EJj+n9m0maU?2GU0-HhBgU7a$5={=g9^R~y40fqp^|hpao?Q3wx}CQ|ab z1K{JLZkvqAg>62@WMG5MOic;=7`S))8#oll(V?@hWYg8{#_d_PW%efcvcWsjy5S@u z1d6)CwHM9JpMfQ0WRzrmmNEl8DG*i%e{I2fhnsP@mbF=HS{ETjAFHLwmU#@}RteR= z4J%u%IYrsvz(5r{J39!}(73Q3Z0Q4-y;%ae@51bC_Hj9OfjxvW*0>;473d*Kgw(Q6 zI6jz13gCr+VFAFot(O>y$#AHSmhxb&ip!pT#6<3f%`_i_dZV>_5t+@@G2|StU%!SS zBOZYcdYHh2i414!n$oeTW!X=8B$BMmU%ZBf=|t&1SeS~5EumKpsvi;#igChD7cyeC zpu3Y>lknDCU&GBZx9QB5ojYwZK3EyTnU(lzIKHHkXT(8FMvWdqx%UPMKXjKw(LF@R zP_$}`L!iAr>EVgLjE0W;`rAQXnnccvd1C_zurLYf0d~1!jiQ##c_0B`l=x}&l%Zuo z;`|!z$fIJnE}k>adZ}x%g)nNEe}+H88CQT4sZDtIbF^Yw#6(4Scxoa2-b&3vRtsCW z`F~I#$y>FI!9%QQIwbq5>6W;6ebuI;qbm_-QZ7S48AP^?dqp!W!>Fg_H-K#2SJ$tC zJb)7OCo#-w_{xhzuvf_AA4e*k{D`r1jOoRqf%6s;%lg0FiQLNR0?mc7bG06r2^%m`2%dh@7Wzk0q-V5Y%(ZdZB zU$XOv6CNG-Ha5k}vFK`A3c0ad4y6Gj9gPNI+l_yKCesXU!=IGtD? zyC+94F*`Tc>}I*;D<#@=o`wJHcaPsy59s`F86+whm%0V<+(6>4f{$m}f zvH38%(^r(TImifVRL3Rqi;ROQ@?ZcVxMB^!^8n=!k|6{tAkmGDe7kn-;^u}4-p4r2 z`=yK2t4o!!ec|#adxJ{fRt|Y0zfOp-z&1AVU7Ww?psbg0?)rhla`Za z!z9u}f#5s3%mo`r0ssD-z`Gbvfrd5k54S4pApmQmAJBC_rt`adH%pzH#6tCVaip#V zy@*6I{fEDkx^|V%6B%qL7*BkYKzooT-5>DwvZC7KfAQ{re(3Yh<#?^az(apQS*Pa! zx$(JEe?i$-=h+G5*wa~FdgPa?``?yC(=&p$LE?bm1En`0ZUV11yb%UV1#AJ7LVxk< z6^?BgfdOe&_B)u9{jJ|ev2s01(+4JcDTPM*Ng=Msld(>jwwI{ zew#@06#s{w(0<>COp_Jr>}~#UP&jc@tbG{vm#z0|+xKH)xO>KbNK^--ls5^nAh;h= z($Y*LDhRuZiod6(Mq6LT7ZrV@o0*Ee{1rS26$J&bX0eqKl57?S0A9g{<{B74KqSY% zyuK&sf&FBHgUEg+Cg2ifP-v(fq>-pt-|4M@egumJUF1+W6j2yOFPj<%{r_y+_`Y^4 zYDiPyk#W3std*hcW(6?aqsxNN`}THsOsz<^PxC=4!7OgtWb*+Jw zFS45#9%Cp#k?HUmRDkai2!1$mtP|%Cl2xiPl{YXr2Kx;aUCKGULFJF-l z{C^072Kh_f+QB*%j^jqLn`-{UK6LO{=$W81UV73G*mrMDPv?odv>HxxM_J`b)Tl(E zxV?-kKpJmoX*q&4P=L7x!vT^Vi54>w;FWhfY_>{FqNxWTY*3}@#I>I{BTT~jIT3v; zy@WPg?sqf`fK_NbZw99pfQR#FPAj@u%JG-KBE^IeJBN%v+J{I=+`ixD0;EL@W1^5{ zkl@Ct0cXp>x&$xHR8*evuy;bA*M1!Hc0f!aCI;E7@NX)hN5cZxyAuv#`}Iha7Qvyw z104dp2h+14OU8&tI8{BXcO)lSN)l})Z{9yGF~p*6HBX+`9-5oUsGJD~w|@YagmZ>4 z1I!*A8fphR0(J`cmi@iGn6|;k&VI`AimU4)jy`j9b2}FtIzPUD$95aiA)+%Emuw#V z5ytxZ(8#zv|DuqgvZkiFd&{_O^r{vYIbf-q1|ZXzF4i z;M5_!Kfw$DssU}&la;CZ!0jYWt}Z?S<2}(?^ca*TAj+B&_O!C9(Y0{C?*5I77AGpZ zGVV1ykuiS59sl@|82nk1$ge|q2qrjpq;Bw)x+vP^rBKEM$RE7~33 zaCZGVl2%)A=>FGwW;*|LBy-iA<}yQFE2CBdUkJp@iD<9!lGv+qS)1{sG1~8Gx+T`% zJ#nkY1YYXz0&5cnu1(z`(b4V5t4m8u3Fj|0d;hUR`%i_0g>7SH?fM#q1R6B{KElEY znFQEU9r#!DXkwUk5Q$*q)PiZ&a9CXcy4H@D1FxRm!NIo3YpDKzp|l~YR;(p}d`o~a z;$X1y?!o7g58%UK@-iR`8*~@!z@#V$FD52>AFy^zI9S5w zEaJQ4O2V60)_0~*dUxY)>!%EX6$KJ{3`6%;u43eF+P zg0_o+iKzhB3I)a_kc!sUyp&)2w%$RSdJMckAt5J7$^ozggEQ+X0L}|)Qjl5-Vcm&X zbp)XR)-sB+Cs4*Al40--y8Qh><_E!b;80onAAa}8q>mBV9->Z`6R)vC>XY>@t??3- z4IIt6rt-d^R&GBd$j~2DAi~P3bpsm!xWcfDM#33x&Fp>rlRQ<9*!{17+G5|BV-|q* zljQ?kh1Yg$IeGbVF9f5+d}XL=00(v@mE13#Y4V$Lz}4EDmuXU0Bsb zS%L%LHAo_aUmKK4lP_VA3v!*!qAUf;;-3z4gA%9inp?EjHf%h4_3%aP61a7m7cQCL zxcKtri!qZ0;xMM1?BLbIy`oJ8-&G*4l&WfKj}(hQbCP@hMeuqK5^WqL^0%qky#dn^ z%LVpVsH6nl>0)oRrW2}#gy%A3uH=_^}D{QZc--JpOyVQAl z#4OEt&+nve79`dA+f@07) zKnbMf57n%Wo%*pihGh=@?kzqvbo+~OZguB=-Sn*_1(lRfX5W& zHpfQdrPAIcq5>nfs7I`oBS}4qzi#(D>iIFhFeMVm97x2;UkCwgV2A=PU6tn>*Ptr} zl&c?2K|Ba>+d!AO=-9(kvPh_1mZqHT5$uzE+BUwX1Se})DS}q zuSXDRFow(%TS04yoS^LDr!j2Wlvg{f@{mBOlmtUqK8dywkoaS61{@q1IwNS>8hliW zp#5|cbF~S(>H!T=bvB!SxB%27%YZ)_u`S;Lg%j@9l_kjnj`sT*2X8dKb{HG{)fSUT$u!fMU>qrVjOI3 zv9=ol3t@ z`4AWxDB%Y|-a-lhGII={NkDez%fT$rCc%_S?trX|D3t+5A>8%BY!Ft;;w39#H8J@C z^ajX+LHX{$MS&QGCv}S$L_QyT3KUpSv0_E?#qJ4T^=vWA|G?aM1)F%S|5 zhMc3HwFNEA&nw(zAwOxcDqw&VhcD8xErMcIZLwO6xm5QkhZVVL)!**vWbK%A)Z91s zNOHA|AgZSk=y8IjBizjBSL-zbOvrq%WF3uDe9qm%!9C9UN!!2wRd%(PkMD5vPb)a+ z{qxSf-#dc`;*VE<{Iy!d!0<>*3p@uaR!Yl<0Q^=mlu3H5zO~!rc!&}d8#CoF@~-D; zmyTSRep~rcyUtI9J8wi0>LF5UfUmDCq|ZRhQ^{}8AiAO2AoxVIvh!32h$>Szn`1Ci zXS&z+^5qLzaXIGTp?Rvm@9x%3tT)ZkM2UwZQp=b8AONfsKy%#O)KouKV*iy?*fv&1 zlyENu2kFPmE@Oe1+W$Wcr@s~Be;7`s8LL%V{|DT1Rq-qxYoGnu7gK+p2TJD6M{)z! zkiOEdW((I!qb?~FZ;h8btZ*W&ME8Ju#*L)Cx#6)s)?72~RUdeXg+!8CB zD)jd~lwL(ZWgX&qO43tdNn)*>j4nES>QpXOsu>;&1oMa2bK~KO7RUn5RacfuUG_7k{ljFeAB{CNW* zQ1TKeE7Acpk9fR6i9iU}vbIiBOCeI_`1sh#NP{WL6!hpw`x10TWf>!r=btX)B+J{5H&u-EmQsZ`F&e+@4{@HWX#cx2jeNVov$F& z^+?8uB5b@Qll9O`JaU~Ri*g=ImZ(JlC}Y*;7ZkMZmcXAyUTkPvRA2TIA(dvgbOspl z&+Y!N9pjMDrjw}Nk3udykYJs)q|a&8B;Pz*fK5pnGS3;6i&oLl&@TA?p{khw=@)K) z$VQNM0|duFFp#ByMcRV}*7iI#6&HHXte@Yd)dUhB5IgYCY76#`xIkYg;W8le{p*_z z>`3(pe+Iz^==7y}EP&-bIx)Qz`C$KRKdKiwRdoBl6{)mv*e)1}J#ycsr{(*LZP`cH+NeZn_q;>p5zA3^$iov&n~8>$+Kt z4TZazRZFvsPJ=p!BCIR(vLet~j3okO0lfjx-5CN#2Q3AyqC}Z{nZ|x-AfW*ZRsy)k z3=-%~KgJsSPBxKnM~82;1* z_CIm-Ov-M5hhbhgSt-WhRNJzhoy>ED=v)4O^U}DLXO!-pI#T@SBXgaFgF{{Sp9s1X z>UzmT9Isy<3uPUNpLqFe)~o@!CrLSlU#4WY40`XcuB(c#`_b3eQtalk<1JO`jh}V| z$8ET_XRmOeTroc(t4sF-kcD~Cz#+}fDpUZ0$5Y?G4s67SBA=n#K=z1#a_=&DO3qqr zaskzojKm)$&=K@+dYWkml$PMXDO|ad4q;B}T^*2w;^Mx59)lIObbt|DvKKO|5U%6v z##1WJJ5Ly$w_U8oULP=Q}8=#OJOmF!zQaZEt zCYOcWF{Zb<0TiS($YslEH%u60{jS(P_Z zc-ntnjAABvZqKY!(g}4Hb$maKi04fo=P|}PXTZLyaQt6bV;4f)MS@ceajU*gCbo%H z#peoKq`nBOJ2-MbRlhrWwUhySn4<|J%x2sMUBIG^ZfJz4f0Z6zp%a6dQ;AjmI?-kQSkjrA;7!QvM0gR+| zJ8j*(`BAeucvZWt0ItTP1Bqn^uE+LSei94o>SLk#)Fac{xlQ8w+jnzx@{=ko#$mkm zyqUbYGZ<(9Pivt2qlg|*qQMRb@+{(u><+!~*^haAa%D~0KF1JJ63z@9Fo4VroLvyn z^a6g8edSrb1->I87ALf|?Rz&?6@OTFk#WZY@FD_tLq7+;K?*cf$fEJ0v+XZ=Ch}>I zHs~Glhf+f`H9YRL75_SpBTxMRi5`(1A^l{KH~DQw9Dg5+9WEQT=UwJ%o@?h1bCIhJ z$SBOaFfIM~L;2^=7B625Uin&z4(;IdtH}mM!F!aRrs?g;Wtxm(3V=7av8YL#fCrOOvXnx|c0#vxi1gReWd2#vInv<_rk85YAjvW*(nRnA(&6h9T zHnFgCS@fm-UARB|vaXRgw?DjA?Bs#utzG+Bn4Wa2dcq&%U?HOZew_JIyYg_Mn&V1a z?j0!{^?Z0O5FH-$#zeF{;OW%O1PyNkDRn#XD$g=B2JYz6{rY$y=UQO%n;UKE8($nk zK0&~$&`2n#sJwjo^fQQ<&?w;~vtnf+nd_52Z%AR?f8yh+=*{P2RfIr%+6jK6ugww5 zR+FB70~Zn(*cqDeV1auGVf+iYUcg7uz9jT}2eutsm;O5ZCAtHtH<|+Yg-WaijZs9mfqdS%gQ71YRgzrKS4pD?wc5$;fBOQav3G(4`^P@V6&c1XpY{@PeB*uH zM6s>6flt3|U7~fshUty351cemml^(G9d9Os$f>M*xf)7!M8RA(QkiXqxlk=hN6D6|sJc z!Fx{ci^tS1+_B8$mGHx76B!ly*Y1G4VHh$Cz#tH2vqAj;W{GhCj|0(4)=t;EA+&ql zE*Er`2ul7M&z3i<(d4a&;HQIvp9U^g_c+L(z8Hyg2wiCy;SmR_O?NS2I{%|KmKOxe z4O_UGSV=`hAF3w+7nv@!rK)(qk*!%ay0XaEnKz_ki_m3#Z+f^$MFJlOYy*OfMQ_6B z*NDS|fpaA0#MLlIGWCH3fKYqKeE5?Z4&ngjtm*MGa6Pnz!%`Agfi@w4rH?f=qd?4* z#qxTG%kP(yST>?tWu&Z8apGV`2yq6iZ)m!#t5jFh(d$H1xYHR&_FH=y`67lq-%zjl-{PXyzHw z?iy4+-4oJqfjns8s5~ve;{dRDXL1ay1=eB9=z9YUe^q=i{V?jk1T4xI zdtz%CBz~TxA*Jt2v>4mS{>tFTqA%w>7p+C*+o`x~8Xe!|>hFBupyC5+0bY!m&=<&y z(9rS#vP+DCLPkh$0EAM)4;_yVVI|V^8@n7TJOWKZSW()*AD@<1Xq)U)RUG+n#V%?1 zZNZ_EU7B=EM*6V%F9DMnhFQ9KCg_t8*66UQ2Lg*x^H$8Pqy;14N{NjWC_k}hF8G~W z47LiulZ5CZDM~c)^Cb=G=exYPl>pe#sK1LPh;U4NmJFLn3xuR{m5|TNqsYBr5Zx3| zp=2EqnoE1qeeBim(>@ZAdfBW_fj}4Hy;%X<&e#vfTcZyt;4-QG&gSKtX4GfZ{+

aLwU&=JP9TCwA<3^05hXy!&f%Pv$K+8i}P1H5| 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 MVU lib.trim + |> lib.splitString "\n\n" + |> map (text: let + parts = text |> lib.splitString "\n"; + buttona = elemAt parts 0; + buttonb = elemAt parts 1; + prize = elemAt parts 2; + in { + a = buttonToVec buttona; + b = buttonToVec buttonb; + prize = prizeToVec prize; + } + ) + ; + + buttonToVec = text: text + |> match ''Button .: X\+([0-9]+), Y\+([0-9]+)'' + |> map toIntBase10 + |> (nums: { + x = elemAt nums 0; + y = elemAt nums 1; + }) + ; + prizeToVec = text: text + |> match ''Prize: X=([0-9]+), Y=([0-9]+)'' + |> map toIntBase10 + |> (nums: { + x = elemAt nums 0; + y = elemAt nums 1; + }) + ; + + getPresses = {a, b, prize}: + let + # see https://www.desmos.com/calculator/qfzdjjffso + # ma = 1.0 * a.y / a.x; + # mb = 1.0 * b.y / b.x; + # c = prize.y - prize.x * mb; + # x = c / (ma - mb); + + # rearranged to avoid precision errors + x = (b.x * prize.y - prize.x * b.y) * a.x / (b.x * a.y - a.x * b.y); + + apresses = x / a.x; + bpresses = (prize.x - x) / b.x; + in { + a = apresses; + b = bpresses; + doable = a.x * apresses + b.x * bpresses == prize.x && + a.y * apresses + b.y * bpresses == prize.y; + }; + +in { + inherit machines buttonToVec prizeToVec getPresses; + + part1result = machines + |> map getPresses + |> filter ({doable, ...}: doable) + |> foldl' (cost: {a,b,...}: cost + a * acost + b * bcost) 0 + ; + + part2result = machines + |> map (machine: machine // {prize = { + x = machine.prize.x + part2offset; + y = machine.prize.y + part2offset; + };}) + |> map getPresses + |> filter ({doable, ...}: doable) + |> foldl' (cost: {a,b,...}: cost + a * acost + b * bcost) 0 + ; + +} diff --git a/2024/13/solution.test.nix b/2024/13/solution.test.nix new file mode 100644 index 0000000..bd09665 --- /dev/null +++ b/2024/13/solution.test.nix @@ -0,0 +1,52 @@ +{it, describe}: let + pkgs = import {}; + solution = import ./solution.nix pkgs; + exampleIn = builtins.readFile ./example.txt; +in [ + (describe "part 1" [ + + (it "parses buttons" { + actual = (solution "").buttonToVec "Button A: X+94, Y+34"; + expected = { + x = 94; + y = 34; + }; + }) + + (it "parses prize" { + actual = (solution "").prizeToVec "Prize: X=8400, Y=5400"; + expected = { + x = 8400; + y = 5400; + }; + }) + + (it "gets the machines" { + actual = (solution '' + Button A: X+94, Y+34 + Button B: X+22, Y+67 + Prize: X=8400, Y=5400 + '').machines; + expected = [{ + a = {x = 94; y = 34;}; + b = {x = 22; y = 67;}; + prize = {x = 8400; y = 5400;}; + }]; + }) + + (it "gets the answer for a machine" { + actual = (solution "").getPresses { + a = {x = 94; y = 34;}; + b = {x = 22; y = 67;}; + prize = {x = 8400; y = 5400;}; + }; + expected = {a = 80; b = 40;}; + }) + + (it "gets the cost" { + actual = (solution exampleIn).part1result; + expected = 480; + }) + + ]) +] diff --git a/2024/flake.lock b/2024/flake.lock index fb55822..6a78e02 100644 --- a/2024/flake.lock +++ b/2024/flake.lock @@ -3,8 +3,8 @@ "aoc-inputs": { "flake": false, "locked": { - "lastModified": 1733919427, - "narHash": "sha256-9QvGJVeFT1BfuoGcFUWSr6iq4VHiaEd9SKUrl6k2tzw=", + "lastModified": 1734085033, + "narHash": "sha256-UlLhIP9NbAywjOGRkrULOa0e+AtY2Eb7Vgem/o/pN7Y=", "path": "/tmp/aoc-inputs", "type": "path" }, diff --git a/2024/flake.nix b/2024/flake.nix index e1b9153..0cc8d51 100644 --- a/2024/flake.nix +++ b/2024/flake.nix @@ -25,7 +25,7 @@ inherit (pkgs) lib; - in (lib.range 1 11 + in (lib.range 1 13 |> map (i: let id = lib.fixedWidthNumber 2 i; in { name = "day-${id}"; value = let