From d2efdef91f95037fc76d3c6b93de6853a96792cd Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Mon, 3 Nov 2025 22:11:31 +0000 Subject: [PATCH] 2024 D2P2 (I hate this) --- 2024/aoc | Bin 254592 -> 251120 bytes 2024/aoc.hpp | 18 +++++++--- 2024/day2.hpp | 94 +++++++++++++++++++++++++++++++++----------------- 3 files changed, 75 insertions(+), 37 deletions(-) diff --git a/2024/aoc b/2024/aoc index fb8ca8a270c7634c988d430f1ac2dc4940646085..7e07e3aa3f828484056e70327ea05f2038f312ae 100755 GIT binary patch delta 42945 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�L z6-df&k{f46WGYjUt zA&8h?1{A&iUK}zRIQ!@*8$4a?27Vl$7f$Jhj=Cm3ES}-gavPQkrRou8PWTFeq3lR? zkrTk;A~cr(CE`IT&=lj4bCZ=4sXTtyIiq$|^Ix}pRFpDdco`^)@QLM@feNhG>6d}F z2A`@~pU5VpJtr31apf1jLwD5=L5Rt?Mn#A+ZBJza9JTR4TQvlKke~kvpOgL8$7pTH( zSnmqdi0JD;nrutG4%8;VI)zgao)JJN@bBUowf_HHIH+#Mm*~G&=vaYR1L}mKD(K$| z)ru-qYvLVDoIF5X#vY)f@6mraKudCO0%D(4j&HMJ zmo(o8`mS@5c%kyt zqt5h{)^k}UoiqDB+OICX{HVo|xkPs3HIc4;-_LqrEIp(xt>1KNN?83(6|lWsCC&I# zSFHYybk3#k>bw~B11^5~_4yh$9swJ=Yf}U&ag38fBi7OdM%qqhX~7@LH&rCOylWb5 zoqoXhdh1EWD64*f49ihN>{&5S(@v)JwlHmTQFdVJs}$jbYR6-5s$RI5WGAcK`pc_( z&x+`So^IO5LfN(~KTls@XPw_>%(n9R6nJ&=kD3>9t>wDB)?~GZWbHk8>P4k_fWr?x zX4?e58uKd7Y`7HgAbW2{pIoj6W0zNWcVn*kVX!RqNP%fB|9ry}Zyvkrto^t62r1hi zW1MVf`KKSR>@@Ouc5B^ccET5S`R`KJKik!<{_5*6@!6ccvA;}WFS^neYp>$Azv)Be zPt9L`JE%1nzdmuv(tB zp2)BIpBua9)<10hdMGu-_jO9O-Im;>YxQ@o4f5Kzuulda_@UBcVFur)Y@6|CwZ5+v zE^dLR^pDJVcB?Loqw3bXGx^;5!a{?jNohq_4iBU;)Mlmky;$QfU*t16omCSk*Z)96 z<)QQ^yRz`zD+Ci4hyLO^Co*k*yJ>Ka;h82;ZO^3Qb!IaoYI`bmXIdmYu6|fTJkmba zR=?@OiiRQSwTgE4wr`Tr-9B6Bpus(0>ieX(aq&8#S{U2m^}e>NZ4w>nRiP&)H@M_) zSAXVm{bjncD6=W&ruS1x_bMT~{#f7DcV`6!zj;Pgb_AD;J|v8qfP$t*zeH$m*3^#g zogz$KLYLn#srcRMUC-Rutju?8|MH4YgkKYA79_rCIddy5d$xR)&+9|8j8;ytyXn#P z{_dA+Rd!RSthje$XeiMnfRM?FPVDrzoq9I#U9+|v$7B~LQz!0hX!4>}p&~^ugir58 z7-vL1{aD7Ha?$Hi=UX3+t-4`{ll{}!i00)Jg+p5sQ}SA0fo(DG#H#~sHZEPQw#9k3Ylj`D&Y;G> z=sah_iEeTECmwU;CIt4z+&dcOc<8No-+`~NZyuTYNigq6iL-g z$(Rtg&%Yp2!E$A*yLVJes_NF{*OF!H>OOzEYHt~ThJSa5&D;EKOJ-CL=IZ1hbq=h3 zTyu5H+JmRN23PI;bD7k{y@yR+{L&O(F~>Z8-?BR#*IfffJqyof+&A>|YMc7uTk@QF zs#~WmYP?|lgZ3P|dx9`)4Zh+0Fl&yV`1%a9irnI|5GUbewN|~EyQQZGBxU$?cV$1D zER=0CN#fjC;37JvKkH84z>$K&6oDp&FfhsSUvT=#3a4v2d1T{ z%&iqsUO#=iwxjKOrS${x2JC4o4VYo~tfLh;aau|j)nj>^BzqHNK|qk!jo=Vg*XH?N zDUUk}I_F=r_gA|ZXK%+pFI{XnrFm;!ftV^oZEknI81qr@ee2$M`EG6Xm}8gTACV0a zAKVcn>V@~HZKd&62 z$bs1cmbvc)&8tbuyLPM+t%M!2Zt6#-b5Lk%^ zn(D265>>DoVz+((xiRwlr_Y5 zE%cLEqTXY3dpbwQbdmmIrJ|iLGarkkbZw5x8n7)@+q}-dm~mss!; z5`XGit(E=KVR7)<2C;+RI=f4J88s+KwM>98< qoXHGirPe7rw<`zLZmbdsEBiK-m~~s$A)!31JLkD|RpX8&8vg-zx3@X~ delta 43607 zcmbsS3tUyj_y3R2?6W~oP!N#&O;ABlK~Pap@s5g$x6(pEk;Fnp#Y=fPcuO)ZPNN>{ zjfIyA%M8O3OA}K|%SuX(5)I9IW13-_L2=~wnmvmm>+|`39{<0O4zr&#Yu2n;bKSG| zIo0lNlXs#`L8X?US-u(S+Tg$$XN;w^z#sf;5YfDU+hi9NtE)(s>>^h2ejX_loo%n; zC2L~4y|1X{L2VDUQ<HHGUg?@y~cu3znobbtIpx972;Cxk^deusn1MYe}QXDw3{fgceIO}p|Me7 zwq1Pt!K3DPEA#7~kbmW+eS7t{Yr8`-2p{Q6#(Z!gKDHai`-`^rQ#(!y(AXKM2}hD) z3W}Eh{E1V(F|jBID{s#`i*kD}E!$t*^X<&v5_T<;v|1lArbU33>MQ0VxZx|FZ821< z^A%sU=&tF0qLsr~{-c=U5Txb%3A2O8un!X1rfMszhb8XS*2MaijFkje`&kxgY?F+W zpQ6>g!icZ&v%HUZnBD7d@pt^h1&8jMi@#{&*jbD67x9ig_$@Kd(Op~OFV;Esae>At z(pVItRg4oAj-G>(QFdN){ippcIgl#9Uw^f~<%^R+w&sq_}C=ilmvI&VOHk^Oz~ zcl<0*O09PH#iI^+h!46y9(8y^>eug+Z}7L|BHpveLg)sWz0XnB zV^o93D0xqi*x9NBKPyhP>cl@5w_17fMB(VP!7nb@vQ%bxm@+(^SYK?KSjTzd!S}>I zC-;QxV9Q(x$ePLohJ@msrV1-s#E2VYswe`ll)Yg|u;m0SG`xbiCk1y-?7AV?k|IkO zPbG{`tlw_ZD;#Ba8bfho$jp*pG1vJStvpyXI(s}ky+1_ylSqFOK@Bk-s4}DjHcu%Ib`6$u~J7bitF{K4l%d2KMxTbTX(YahQv*A(KSeX-FlE~V?Va( zEb98P>}|)Ulr0ur+HBAq+Kczvcz5{)iPa&bEQFN7L9Z}nP)%cEy>w8GsfFb;!Cl;4 z;E@Khwi=O#MF$tdBkPc(I*>F4!qlDimPBc)FU9#9+6#i=5#jPo*YaS?B$=fRCAUGA zv;ha7mj<<>xK@;<+E0veZI=v(43k+}P;v`od3eCVe3`{Wai%}BSQ4lX)vN6+E@;GR zSaexBG^2&(A+gW36HgIeyUyf2#elZ``AcGD+X&YNFShA2bX+m9*Q%l4EVjFM66qi4 zqNZ(vS9e#LiWEq+k)=Yy1)(VVB~+xlxohvliP13~MY*>V4;8!JBD~*%zNYHbpgJ|M zy~vbS*IxYO7SA6L;qJY7n3(1s;{Qu4NTL?ikgCUZb1Up&MTF+rPkiRyQ#bcTf$5%M zBFZDN?-rDfc{)~hP)sMaY|p^@YEM=liF#i4MBB*@RS<5u(%4u#5VP|N$QyD&1M1g{ zH$1wvU3$NU5^>WbpkqdpVCaDQxw!tbfRcgrK2WX-6W!ZA$V5hwHJ!#Ib11M7=d2iDm&@f%>_9~L4KJsn(U#7l>=`pa-?Q3$IT zAc8$Rx$e;a9vg#LcQM=3m-i5sw?gc`K>A{_&oe|{*b;uJwhz+gwS=F1#l~b8clc7O zdnMtoc5@TGy+%4ufUs=6?W?EOO%)cehc!Jx-1O?q?+S142(42q@kC%pk$&1Pf*Nco zGSp-+OAY$w06lNqs#ba9dK(s_2o&>}Y?bm|exf|wox6xnq2%dya&6LH?<3y#dw~0k zqu1TVPxfxwYnqrkIY2}W)J5I^-9sAqrPPGRmyIs#K2}`z>E!r_33D%eeMh+Z4(r;^ z4i+4P1sE}MQ2B#p6=dn(Vf3tmhX>vmP=ECZv+Rr)dk+TKorQwO#ctmatyN#~neUTP zt{4(ED1!}P7H>I}aNVB5Kqpq;nXZ{j*8mp84wn}AC73#Nm9Z$b7|xO%xEiGmk#Wt& zX`Hwf=;r)KAJtQķ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 diff --git a/2024/aoc.hpp b/2024/aoc.hpp index 372e484..1f578a3 100644 --- a/2024/aoc.hpp +++ b/2024/aoc.hpp @@ -96,16 +96,24 @@ public: // Access a chunk of tokens for a given line // E.g. Iterate [1,2], [2,3], [3,4] - std::vector> ChunkView(int line, size_t n, size_t gap) { - std::vector v = _tokens[line]; + std::vector> ChunkView(int line, size_t size, size_t stride) + { + const auto& v = _tokens[line]; std::vector> chunks; - for (size_t i = 0; i < v.size() - 1; i += gap) { - chunks.emplace_back(v.begin() + i, - v.begin() + std::min(v.size(), i + n)); + + if (v.empty() || stride == 0) + return chunks; + + for (size_t i = 0; i + size <= v.size(); i += stride) + { + std::cout << "max " << i + size << " tokens " << v.size() << " index " << i << " size " << size << " stride " << stride << std::endl; + chunks.emplace_back(v.begin() + i, v.begin() + i + size); } + return chunks; } + /// Iterate through all lines and their tokens auto begin() const { return _tokens.begin(); } auto end() const { return _tokens.end(); } diff --git a/2024/day2.hpp b/2024/day2.hpp index 16288b1..71c7796 100644 --- a/2024/day2.hpp +++ b/2024/day2.hpp @@ -7,50 +7,80 @@ public: ~Day02() {} int Day() override {return 2;} + bool isSafe(const std::vector& levels) + { + if (levels.size() < 2) + return true; + + int dir = (levels[1] - levels[0] > 0) ? 1 : -1; + + for (size_t i = 1; i < levels.size(); ++i) + { + int diff = levels[i] - levels[i - 1]; + + if (diff == 0) + return false; + if (std::abs(diff) > 3) + return false; + if ((diff > 0 ? 1 : -1) != dir) + return false; + } + + return true; + } + + bool isSafeWithDampener(const std::vector& levels) + { + // Already safe + if (isSafe(levels)) + return true; + + // BRUTE FORCE + for (size_t i = 0; i < levels.size(); ++i) + { + std::vector copy = levels; + copy.erase(copy.begin() + i); + if (isSafe(copy)) + return true; + } + + return false; + } + int PartOne(File& f) override { f.SplitBy(" "); - int result_bad = 0; + int safe = 0; - for (int i = 0; i < f.Lines().size(); i++) + for (int i = 0; i < f.Lines().size(); ++i) { - bool lastDirection; - bool first = true; - for (const auto& tokenPair : f.ChunkView(i, 2, 1)) - { - int token = std::atoi(tokenPair[0].Data.c_str()); - int nextToken = std::atoi(tokenPair[1].Data.c_str()); + std::vector nums; + for (auto& token : f.TokensForLine(i)) + nums.push_back(std::atoi(token.Data.c_str())); - int diff = token - nextToken; - bool direction = diff > 0; - - if (first) - { - lastDirection = direction; - first = false; - } - - if (std::abs(diff) > 3 - || token == nextToken - || direction != lastDirection) - { - result_bad++; - break; - } - - lastDirection = direction; - first = false; - } + if (isSafe(nums)) + safe++; } - int result = f.Lines().size() - result_bad; - - return result; + return safe; } - int PartTwo(File&) override + int PartTwo(File& f) override { + int safe = 0; + + for (int i = 0; i < f.Lines().size(); ++i) + { + std::vector nums; + for (auto& token : f.TokensForLine(i)) + nums.push_back(std::atoi(token.Data.c_str())); + + if (isSafeWithDampener(nums)) + safe++; + } + + return safe; } };