From ea97c808e5ac385e82a664db6fb10bbe8f85b793 Mon Sep 17 00:00:00 2001 From: Ben Kyd Date: Mon, 1 Dec 2025 14:05:54 +0000 Subject: [PATCH] 2025 day 1, splitbyindex & day timings --- 2024/3.txt | 6 + 2024/aoc | Bin 251120 -> 254032 bytes 2024/aoc.cpp | 1 + 2024/day3.hpp | 104 ++ 2025/1.txt | 4392 +++++++++++++++++++++++++++++++++++++++++++++++++ 2025/Makefile | 15 + 2025/aoc | Bin 0 -> 197280 bytes 2025/aoc.cpp | 118 ++ 2025/aoc.hpp | 221 +++ 2025/day1.hpp | 74 + 10 files changed, 4931 insertions(+) create mode 100644 2024/3.txt create mode 100644 2024/day3.hpp create mode 100644 2025/1.txt create mode 100644 2025/Makefile create mode 100755 2025/aoc create mode 100644 2025/aoc.cpp create mode 100644 2025/aoc.hpp create mode 100644 2025/day1.hpp diff --git a/2024/3.txt b/2024/3.txt new file mode 100644 index 0000000..b004787 --- /dev/null +++ b/2024/3.txt @@ -0,0 +1,6 @@ +]select(23,564)/$!where()>%mul(747,16)*why()mul(354,748)how()$(when()<:mul(428,793) where()from()how()/how()]*?mul(156,996))what()!,what()~@((mul(976,569)]-,>$-~%;mul(426,703)/mul(948,128)>+?+>?%select()*mul(477,567)why()%select()?!(@~how(){mul(182,79),mul(203,707)?[mul(186,170)select(283,626)*/*when()mul(130,392)')^&when(),[;mul(563,902)where()}*}<$/)how()mul(953,129)!!what()#what()!who()mul(852,652)~)+mul(973,163)$?why()]where()mul(158,596)when()@}what(29,454)mul(968,252)<'^'how()when()<*^mul(617,885)when()) +&;'mul(264,456)/mul(713,804),-mul(803,862)mul(575,310)[ why(527,60) )from()mul(475,876)from()when()*^$@:do()mul(557,2)'{^:-*what()mul(611,157) >- when()mul(894,415)!mul(856,397)from(),where()mul(13,373),!where(),do() {how()select()^:(#select(622,699)[mul(395,375)-##>+[what()?mul(535,15)/(];)mul(115,296)mul(201,604)^+[>+do()&:}how()/:mul(34,586)?where(375,645)?:-who()select()'why()>mul(389,101)don't()<^}who()mul(501,691)'select()mul(551,120),]?from(545,381)?*%~mul(492,926),:(who() {$ when()mul(348,721)'?/)?!what(784,670)mul(811,483): where()why()why()>$[when()do(),~*# {/mul(312,382),}*what(944,486)?^{+%mul(224,412)~why();?<]who()*^mul(199,783)what()from()@why()where()what()?select()(}mul(267,247) mul(126,337)select()mul(534,156)($%%}+*@mul(103,848):;'%mul(237,35)<&-where()mul(423,484),!]where()#!mul(281,866)select(750,996)(( *{<^%who()mul(437,982)}:mul(357,682)@< mul(124,834)}~mul(668,671)mul(787,282)from():where()'[mul(985,702)*{: -&where()how()mul(180,738)(from()@mul(240,76),[:'#!:select() mul(822,179)*#how()~!%!who()who()how()where(184,532)#from() [mul(771,388)how()'~!^!@+mul(646,938)+,(({-mul(486,708)^%^from()-(;what()]mul(144,833)~why()%select()&<~how())mul(439,873)mul(677[[;{:?{>[ (mul(25,577))@:mul(727,412)why();?select()?what()};from()*mul(826,116)#*)/where()who();<@!where()~when()where(597,883)-mul(835,616)'((where(808,96)',mul(649,224)&/ mul(35,958)who(871,394) :!-who()where()where()(mul(322,104^what()%,}[why()what()**who()mul(983,838)mul(614,657)what()&,mul(238,871)-{},select()>who()#>mul(943,599)select()select(558,572)?^who() <:mul(572,265))who()[why()!$,-mul(454,326)mul(300,416)what()who()what()[;when()mul(786,381!&who()when()where(381,479) from()!?$,what(),who()mul(429,727)}from(401,661)>{?%mul(518,766)-@who()!mul(276,326),select()%{mul(211,710)/mul(414,532)@!-,>mul(494,611)?%((@)[&who()mul(547/why()]who()*% $'who(675,908)mul(90,974)}mul(427,683)how()[:;mul(443,135)*^+~^{when()who()}[mul(579,135)@:who()mul(267,452)[&!;;where()$}who()mul(662,85)~>what()mul(724,771)$!mul(206,909)@^%mul)when()select(567,468)mul(260,632)who()what()<}what()}@do()mul(866,137why()~)mul(13,816)^!*(mul(351,795)from()(?^ ;;,~'mul(313,157)?mul(222,186)!> &how()$mul(558,129)how()[select()from()'/&when()[^mul(927,606)@?<+how()-}(mul(749,285)!![%~>mul(919,804)+&-->where()!&$/mul(889,472):why() <]++from():)mul(597,828)!*~@mul(61,536)(why()what(): >why()*mul(50,308)mul(980,618){-! ?*why() *mul(506,77)#/where()^~';who()%who():mul(11,806)mul(226,600)?how()% /{//mul(601[><<&mul(70,238)select(176,735)mul(447,978)(^#mul(583,880)@[mul(722,873)>mul(110,728)/+mul(948,566)where(760,139)[ -*why()-mul(92*,:-$how(),where()select(),+mul(954,569)&?#+(mul(482,680)]mul how()&what()%-mul(455,447)-from()+>?[/where()!:mul(502,951)?~mul(953,617)[/]&>^when()mul(234,738who(134,419))&$-${)when()#why()/mul(266,78)&- ;mul(336,100)?$'#{'~:^mul(963,726)/&@mul(738,99){where(903,414)how()>)mul(249,770)$&@ ]from()$how()!select(521,465)mul(617,783)}<>):[,select(333,996)mul(416,179)[[don't()$]>why()@:mul(148,463)from()-do()when()-/how()when()&from(930,269)[mul(10,173)#mul(613,997)(>when(); *'@mul(724,407)don't()-when()why(533,992),')(:mul(472,652)?mul(350,214)!>where(401,417)/from()$where()mul(108,897)*where()<%select();,$mul(177,623)mul(674,586);mul(188,601)where()&/]mul(892,181)$from()?mul(904,15)why()(from()select()?@{?mul(832,651)<)mul(485,621)?%from()^);from();-who()mul(964,655);((select()mul(950,896)mul(103,475)when())/mul(165,476)(*},)where()!(@mul(417,206)&]?why()%-{[select(),mul(162,447)don't()why()!(/# from()~!mul(794,412)':&?why()mul(419,168);&who()%]who()mul(689,382)who(754,484)select())@)#[('mul/#/,select() why()??&mul(868,352)!from()!who(201,267)what(971,755)mul(245,790):!(^~&^where()--mul(334,775),why()why() when()'@?mulwhen()$?!]- '~@)mul(874,152)when()mul(771,202)(>@~;who()/]@mul(331,997)] select()%&mul(230,638)<%/mul(729,194)when()why()-@-select()select()'!&mul(669,652)/@%where()*;mul(799,156)from(){%why()mul(666,169)-#mul(381,557)&'??>+/>[what()mul(534,338)(mul(631,275),#[{when()~select()mul(847,310)when()]~}where()what(661,551)from()!mul(321,129);$where()@ why()where(616,873)-~(mul(888,479)who(),mul(229,502)])when()don't() mul(246,553)why()?select()',*?mul(242,385)}}where()mul(522/why();mul(445,61)mul(746)$why()from()don't()+mulfrom()#mul(521,245)]%?]}mul),[who()where()mul(784,56)!why(): when(893,294)&[mul(373,342)<$ *! {[why()mul(513,340)how()}where()'[^)^mul(967,981)^from(740,8)^{what()')mul(244,532)+ who()/*mul(686,40)>mul(178,177),][)-<([mul(595,777)<-how()>(,)}mul(210,328)?why() )$why()where()/['*%mul(654,641)select()$[select()mul(620,43)$from()!mul(573,638)<,#/>why(451,392)/how()mul(450,634) ,%@&,don't()select()~~}%select()when()@%@+!^%mul(621,328){@{)when()#)who(685,504)mul(179,100)select(){from()why()]>-mul(94,187);mul(509,291)-how()when()do()why()@) how()select()+mul(379,538)mul(830,641), /&+-@mul(180,491)how():why()!!'%%where()mul(266,732)when();select():+how()(;%mul+who()}{+do()mul(575,752))how()mul:&from()>who(854,820)mul(850,918)&select()(}+}mul(782,495))<'?(>){where(),mul(957,190)/when()what()who()mul(352,79)why()'mul(652,626)mul(973,815)>[)-];@'mul(327,736)$@mul(221,196)~;>,[what()mul(170,288)what()~:$what()'from(468,557)%&>~who()how()mul(847,27){where()?'mul(736,195)mul(663,417)%mul(301,538)don't()what()select();+[how()?+}/mul(271,885)[when()] select()mul(251,286)],{-why()how()-% what()mul(664,742)from()>^!&mul(583,557)%#{}where()why()))don't()[^[mul(636,736)mul(733,889)mul(415,907)#what()what()from()where()mul(746,170)what()how()%who()/mulhow()don't()*'why()[select(769,463)$'/from()mul(520,584)*who()from()~]>who(862,907)why()mul(423,117)why();mul(100,371)!@<{from()mul(434,31) +*why(816,889)& &:!#!/usr/bin/perl/<$!{ (mul(142,115)where()[}/'when()mul(444,725 ~*:why()& from()when(493,415)&mul(863,234)<@?$/when()'+,mul(722,893),%'don't()~where()why()^,;%;%mul(823,490})$<*$#mul(101,716)&from()%@who() what()mul(881,570)who()@+(/@mul(676select()when()*;@@]why()#mul(315,278)[%'select()[{[mul(237,596)mul(782%^<^+:/:~how()when()mul(565,260))~where()??mul(4,427)'where()(when()?-}select(314,151)mul(361,206)-what()!!mul(575,211)!@}select()% ;mul(996,776) how()!#'+)what(861,201)who()]when()how()what()#mul(862,926)when()*;#:['mul(189,238) :[how()who(971,4)~+<(mul(481,269)%mul(632,943)from(){{}'why()who(); select()mul(364,748){;,mul(214,990)from(){>$?:why())mul(206,633)where()what()]*@<$who()}+mul(14,141))mul(822,373)]? how()[from(){mul(978,657{,%]{^mul(688,489)##![why(){}do()#why(),];)when()who()mul(305,206)<]<~ ]don't()?mul(304,632) [mul(291,282)+}{when(),from()#mul(662,53)}mul(5,779)#mul(111,303)where()+!<*'%how(960,285);>mul>mul(852,693)%;)*$':;]who()mul(249,548)@)select()]mul(387,459):/'when()$-[>!mul(112,988)from()@~> $mul(191,655);mul(79,498)~)<@/$@;when()#mul(513,202)][*how()$[from()mul(224,73)&'-&,why()@#from()mul(737,275)who()-[from()mul(816,564)mul(66,866)'from(239,497)how()>>%/<%who()mul(846,687)how()how(854,968)don't()@@[*>where()!mul(268,28)+[#(? -mul(398,631)&?}}^-$&~mul(283,82)@what()don't() what()mul(720,734),? who()mul(380,889)%+select())*how()how();%[mul(48,988)$;mul(968,247)* mul(884,462)*#from()>mul(366}what()]((<+mul(133,244)*'{-where()mul(729,105)how(619,497);from()+from()when()when()when()from()mul(900,829)$mul(83,600)*how()why()mul(434,610)don't())(?@^,mul(691,992)}^:why(784,454)don't()$&#mul(892,279);':what(){~when()what(361,846)']mul(720,864),why()where()mul(303,491)&;[what()mul(720,732)$~,who();/!mul(407,549)-select()!mul(127,272)-%['???select()what(412,125)]don't()&where()]mul(322,71)@/+select()why()$?mul(650,186)&@>@[:![mul(887,229)why()]select(298,963)where()when()?where(992,533):mul(753,118)[what()what()$@(what()]mul(683,687)@[mul(471,355)why()who()$>^?how()mul(271,372)mul(68,707)#when(358,219)'&who()mul(811,52)who()<-:#(from()~mul(160,946)!'@>?[;what()mul(206,444)[$why();why()&:mul(299,200)?what()[what() (+mul(298,431)<$^'(mul(822,566)why()when()+how()-#]]?mul(401,194),mul(320,99)when()*$where()!+]mul(635,430)mul(474,531)%' }mul(896,524) +@who()$don't()who()#&##mul(245,843)mul(707,597):!,mul(864,931);$mul(605,621)&@mul(700,646)>%what(225,888)!%who()[:select()mul(297,15)]^%~]who()mul(87,793)?+{<-where()%mul(518,305)why()+,(~ /!mul(588,968)mul(295,237):-,}%:{+:who()mulwhat(){~*~/'<>mul(590,124)/mul(719,423)))?:+select()mul(902,901)when(){>mul(455,460)$,what()(&{}how()*{mul(24,765)/]mul(529){[#+>/select()?(+mul(19,771)where()+/+mul(380,138)who()when(){from()@mul~$/don't()))select()mul(333,659)< select(213,174)*!select()mul(310,90)mul(494,223)!$when()~how()@mul(656,481)!*!$mul(705,700)mul(7,569)!#;%}> '?mul(324,975) ^/who()$~^ from();do()~!mul(883,226)]mul(660,990)*select()select()[#}!^mul(426,750)when()')#(when()$select()#mul(790,641)what(196,61)&?where()what()mul(751,795)why()#what()/((*who()select(465,475)'mul(633,76)~%&don't()}/why()where()mul(320,249)who()^{how();?'mul(239;;[}]*(;//mul(51,601)%/~%+!'!how(665,519)mul(611,916)what();mul(174,972)when()-where()-how()('do()mul(108,242)?+mul(870,660)]when()%what()?<:mul(635,416)why(924,420)[<$from()>how(260,907)#where()mul(236,788),,@?from())>mul(97,620):select()!+mul(899,189):!}mul(566,974)'why()select()*where()what())why()~why()mul(908,528):)}^mul(71,100)from(296,15)when()from())&from()#how(869,278)mul(628,153)how()mul(765,691)*mul(186,21)how()/mul(487,725)do()##/::from(){what()%)mul(110,152)*&**,$ from()*mul(992,213)[*/!~mul(797,726)-from()mul(969,578)when(112,655)*how()when(),where()'(mul(440,56))*{'(from()-&mul(113,81)^^what()#!))')[mul;~mul(147,629)!@<#&^]@select()mul(993,659),{ mul(254,347<<>}why()(who()>!)how()mul(518,738)what(29,303)from()mul(160,896)do(){/;?what()where()where()how()mul(173,649)mul(969,370$~>mul(679,266)how()>@):@where()mul(206,774))[from()what()where()mul(950,797-) ,^%%mul(996,344)what();select()#mul(332,248)*!'<&~mul(408+how()mul(114,169)$@~select()@~who()mul(901,342)*mul(499,634)%!mul(996,710)~/$}select()mul(8,949)$;(!};from(): mul(860,166)(@-from()'',mul(739,160)$%who(265,676) mul(988,26) ,+/mul(293,416)where()+#}-from(){(@(mul(215,463)mul(152,776)+*]'#'mul(447,726)how()-#}select()what()select(892,487)% mul(182,115)^$<(why()mul(335,275)when(801,993)];select()}'>^how()>do()mul(704,863)+why()'*&mul(709,745)who(){select()mul(17,822)}from()!+;!+,where()]mul(280,107)~?}how()/'(?who()mul(288,599)%what() ]$)mul(463,772)@mul(992,279)what()!:why()>>who() (mul(348,687)*]mul(477,896)when(47,10)&where()?what()%[mul(804,970)from()from()select()+what()[who()-?mul(166,890)&-^mul(892,532)mul(905,17)*)/]>@ {*:mul(361,902)[$]~*mul(629{*<)how()$from()#({mul(924,910)'who()why()'&)}mul(322,152) &mul(503,282)^ )/what()what()%mul(678,160)when()!?&#<%^*mul(661,59)(*mul(936]';)];)who()&&mul(437,929)who()mul(298,239)<(%:>}do()mul(727,688)~(<)who(846,894)mul(720,201)!$@)}mul(139,406)~!$mul(123,17)&select(564,607)(]:who()where();^//mul(905,342)&%)mul(185,967)--~+$ when()@mul(594,891)#:[%,;mul(641,786),@>'how()don't(),mul(185,960)(mul(702,204)]]!(%$++# mul(24,904)!mul(109,193)+[{when()mul(579,493)%where():!mul(473,16)$from()]mul(33,997)mul(104,325)'mul(486,457)select()who()<-who()]&mul(720,711)&do()how()!/!%*^^mul(239,525),from()select()mul(77,963)how()]where(){what()+mul(452,303);/~mul(55,517)&>^~when()-mul(949,308)(@~@what()@**how()mul(185,245)+}how() select()mul(89,379)~&!@ where()-) diff --git a/2024/aoc b/2024/aoc index 7e07e3aa3f828484056e70327ea05f2038f312ae..dd3999891bd21c581adf535034152485b7fac038 100755 GIT binary patch delta 38714 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%0DL2+aEbg`jsU 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 delta 34831 zcmb823tUav7x?$t_ogD1-g>`~B)#O8B*cUe@|;u@LedbE=M4=pFI}J(F?U!)Q-vgPxXe!2AkLI^ zu}tdEEsN0$W0|(-8fq+FlN}JKYPhwSFAt;j7UDg*YeZ!TA^wD9m_m-qw*o13AcWP- z2EtfJN-Uspg^85-BnhMq$f6*yf0JZ9BtZH!q*cD=Vo@tYy}UR|`iV33dYaz;q*IM= zrs7)0kWOd2rsixHi}f7r$qBh9T?J3Ew3QA0!a-bO>q+ani^iY0iqZP*y|crbYIcyOrGyl@gjuOBP?8H{ zSL9ODMs@dF(sTp3W=9y;@3j&)>D$YTTtckHqx#`(id-VBRZYyIm1t~eB|00lZJmX- z(bi%QgW*bbAJFy|j(|^#y54<`6rOS@&L<>?K)Kp7tF2W_nTJiJiP_X_3TrAjHKBM{ z7|0})Noeb1qngL-XTfaqmkXD)J`^^pV<3k~*W-WW;Wnbaq34Gx#oLHI4LzXx88+fn z!|v9_Wuq=7tNrqeUcv#H2Vb(S?qRJC!n*N)9G zhBL5zGq8Pc?ZjW(bfCq(#aC@Q(*3Y#FAX8q8tUs%)KPJNFIU@m*3tT(!ZsceN!_@A{G;2_R2wzTff^7OzwJwD_SHyJxn z{odkF#vS!Ep(OXIXlUjv>Y4O2yAMD0J|3(-a(| z92ZjuaacRcPZzTi+F*`0m;*X=2-X-jgL>S|a$Eu&RG+X?_0e7*O8vCYk!0pWhBDa) zAL8+L4m31Wyxp!N4G0xmnN6X#p<;?zC|%G?+;6tu^hGb`E3ByjV=>I%M+|E(rz(Z$ znA1@-?PDZXnP<@8UgBtr?et|YG1T8yw6L_N3BAON7M@~^WoM;JpC*G7#}$Q?Z;smf zI`?UcgF3;bD}eQ|R+iVdsm7W#c|q^qwT4k(n_^C9)xG!c>tTOTeFFB)c}GH;eL&Whm$K-c#Zp{jZcZ-+i?M;8Vru&cQwxx@ zfw~J5Bmhbf^Xu%zQgaKjvHe)OB3KMPI$A8Wji!ftitlXW1VN0o8*JFnr>XWhQLXGL z{(i(!thBSV6rlSAXoFz*S3DuntZr2y>Nj?Qa(XRT?dNPJ7$ieUqggFVTUn^%U8)56 z-C&@aR?hOPEKyp$NL}r=NRW?1F&zTM?{ZYL;DSo{{jjzRb?-RjdBq8 zS?i0{{oLtjU-4bPW%A{qTW9O6-Wi@J(2l-h=zsxqwU4-BK&U*;2eQG9lUOrg6bxJ7 zCxevNSrM>>)U1SUO(s*tzTmT{EuN?%m5{8(~%D82rbK4)7Hh3<{Q~cjG;)t{hY(&<;N0vd9tivu@(G$dSSc(Q}Ah z(9dB_E-pkx`w&&%=DsuuYgz?Zt_#p+YRHn@>gAGsgh6eaMzx6%$l zNm$c~Rgh27UlY&X(NI4y>b z45WL!#d#yQ%D-Smz|<9eqBqkMU=+PhKA|g2K1UBRdsG?q=_-yGy_E{y;@_i3(0{s$ z1IC2X^IqbLF)6K2fn96pYRL9(Ofa?f5`)Kj(!O5e6o@>#itEO@8oPjvb}GS^`m&4q z1*x8 zUa`aIm@eYl*uL~LPto=(N3lLOns)9Y4v3p1@97CGsXXT)+UF>!*hMss-z8rLvUUA! z)Rpm(l=^szjtN7J!r0ZZ#!=M=u8QL0Dm1|_l0jSV@QIeM(*RF$RLWyV5EH*`{Oo!L=F3p>IXx{7tF<#b?2@oAo`SmfSE zw49wlO*@IVUEG9D;?~(`Hb7*9pRCvn1*bK6bQhoA4x|@c#gxTPj&M1JajbNC>!=#=$9w5+m#`x#;6y9)u@S#p>_Qdp z;>E>|)Cck{4wi3ng(BGQ8NS3vzMBE8C~@D**E6PVj715=P$R@rU$r+mz5jnQ8#gV zh9}K&6*pw~(H(B;a~XaD-Q}Www{*53ALs%#$XLBc?U?yUpgWw!)+^3{QoOt(lx}bl z%~r0EXET!;N7(P*>4`^Ht~CA(1b5l2gt^e(NW8tmk4|(^FUuM)(BGZK+pDIuad9TO znuYy$zh5qhN?#ZG31Bhb!9&bhzERHx=fH!wap&qAlSL_wD}gd&3>k_d9#B>(*g3(N4QH%(c~S4K-V% zX`r1LxNVZWx9z``ryK3m@3w81Q5#!v`;MVT&bS>o*T0vvw%=S8G<|b$g?!%tjo&car?I6;`-*uY!)UQ9JH4 zlTkx!(XVK@ypnbB%A&;r&9xF+9XKS{v*s0)H?dqb+MUHibXNP&*4Auy5mS?V)E);- z1zKjQ4*tXbv?0!_43Z$11#(B1`h6!#wK(0nIoWC3@A{{M9sILK1% z`qLvhEiqFYAAd#VJKI6w>{?}iGKSJC?ZgFT)8&s%K^W4pz4+vYjo9AJ4(_;qxZQ>PfvamM1w%TMLy#;7b|iPGv` z;t+px(Rr<*=v(zAEorMhR&`mBw?-@auC18T(NKJAl4wqurF^T8ka;IJv;43Jl0X+vUU~f7J*+Eir$6emFHLD)%Po}TEM30)F)=RCm`w?8s#XF9cVn&U^6?UI` zmux51&)~cUuB+_X=pVy>cO_+O@%I{AN?MDrYC6(-L(%c>c=~x8alzfbbU|@al}JE0}H5D4P1WV zNx(wPf0#-e3`Da>1L#-!>hX_YCsgRG5B(LWM|bI~pVsfEbYm+uEK`9R>8Wow=nG=k zOXiZjiD1;$`x=o73(nTr+c5Quy^&-CuxeGT&ri@|l*XD)cUkZ6y57yi# zsvOBzCRhurrGYZRN&dGCs^;9^hPqvmR>*{9u4gZ!E69G=gfyK7*52T-+X}eBIe%I5 zlndjj;WcT6TnH3gq@U%26HTa=Zp#HfAxmnfC-kJ!Wof9MFuLO=$X!bKM`O*8nqJlK zp+lfDtORIaQ1#(+dctf27;^c&zJsfP3x;tih(dlUS1A+Z>o!p6s9K_NH+}x z5BiB*d|GcU-O>}f&}URUHnF3WYAE;!7o-A1sKWVc(rrV*R@oD7;+zGn0`y}6^smQt z7*R+&K%Bqap%Ffsh8vLBM)om?wy~fS^oR;RG}nF@bJq>-?BK(gLa@zWKB4ihTUgTs zrepqq<1o$SiOq8Gr@8jtQ~R*a?f_Wt6)ul$WOuI2$+_D)g9QDMBNen3%zbXN*@pF; zTlHSjEc|5mdl^-g%HpnR79QWNkr5SPPi(nPs%WI*b)Up$)&9@Y&iQcGZq4T z92ZpAJ1nTMdGugD&%OFyVt4awF&I?pj4be7y^IlNAY;=^JJpyBS~Xib(N>t@0^6~6 zdDMZ3z+GZbVBIA$KpJ8!tfUENMQ=}Asoq#n7=HnChn2*Zof%!fU+^?uj89Z-kv$@8 z-8tL>QS-XH4ryJdPetEhZt}`sp_8D6_P;_Ns6a3?x%iAHCJF6e3f``gyxR#@menw3`8eMS z5^gKlntLLRYbV%QK7&Htp?}zH5QNeorn)PwYA3h})zZFpg7v^(ZvH#<*+PzjvOg?j zX!N)nP%f;>=EeLgPBz_1!XC+kq_$?lCS@30W8kYE)vn`g9-S!EokLn3d?>f)KXmo) z-%GC`H0SXFKc=r> zPI|OXdc01WHdj;$wQki6kZ!G$Hr7d->7=c6(vCXmjymaBox&#Rq^Iblr$buV++8U; zirG5pc{=F@I_V`k>18_U6*_5eoeHhik+1zXtu$TtFPQr2WC+wrZ_u&XsFM!Xu?f{l z_ti-c&`A%{Ne|Vgm3*>{&{2%mNsre_$Lgdf>7=LVq^IkoQ*_d^b<*>6(hHP2utX=l zOeeinr^VZK(z|rhdvwzKb3cfqKl?N(KdjeBI*O+{>A!W-Z*tbUB%SmWo%D2_bc#-TwoZDUPI{|OE4S;Ucj=@TaC@b8uU?{) zd6`ang-&|4PI|3QdXJ9N{W|G&IyMJ%7=c6(zZMuWpH?qt?+}Mw9r{F zI_&Q(9HNq&o8T@DaTB`1+9%W$?z?LGzzY}fN#$NjNDK(sdnW83W8Hr?a7)78A}KM4 zXE%r=*!vQu0?BrQ2;!Iygg8SS)rAlrh#R{R5&`k%9^e;Z5=KZe#O?zKS!60GNdqLZ zKu{J*$YY4BqX;pA@25 zu?wLfh#xP4f*=lI`y|9wO9|Ntas6^a4niznL&!~tlh#55m>lA_5a){E*IXds8^ABb zsb3Qk0CDmrLc$@o*$m|x3wi zAhGi%A?Xks+=iiG3~?UB@ij315L?`X0wIq66AFZQ(L?A$h{<2jg_h9rC(u%ei(f)Z zA%6P`h796t_@Xlm;&2VL6yk#rCqf(}he|PdD;WO_NWe=r#E4V~AuzevKNxDgvNq5f zBSLq!g-W#})W-~Z!I}tF?6o8tB80%itFR$7vptM=dm@xWtgt0Qlr8iU#5W;!wVD{!fTnllb3lU0P*e4T2mf=c-B3G!r z8xfM-h-|YPA+?Z>g!|(~?nKCOCwd0(8E`;nB3E=KG{ch!d7h9L;^;2Wt6hjt0kM5o zA_Q~=hByb}o!&$!_J%upWj7*Iz!E8f_$|cgKHvcM!<#;YI{QMm`x2oBVnradED$DK z4`?YYB^w1eR6x%th^!dmupmOKgNV#D7-o4ew6Z55B_Tv$?^G#z5n*gE7@APX6AF1C zE`zuZVx^)tbWd+WZ$capM)WHBLHC72t-}e4?@xrZ{)ET}5E}mp$Ol3X4TQo65n3?_ zhHNkqd9S)TpPK1Wx zL`j@Sg7HWgt7zzMSo1rhi9le@yN`leLi`qD)6qn3Ga3pT4LtyHHN^2_2(5!q3X>&f z9FY}{g9?lzLLYh zHzD?#M`+mRP`PwySUNNe;zj9%S}Y_qYZ0t}`^C_$i(#@UA(Ij+0C9Q-5ppu1r4YY` zxOgepEQ1zgf|E?xy;cyqcLh{)P zGrxk>kwau9IWQ@6VE9x}5fzMo#5(AfbwpOQ4!TB!9S~kM+Y2AU)#gGEtcUJjPiWP8 zm_Z>t~?0{B4oDFd$#B~s- z?j*DkLghCwj=NwSVT;b#1w#U9qi>EQo6$4k&>#N?>S8pl5!DiFyns=rLITm5@k2PK3?J zVWvXtUJC2_1jHv``9QoA;;fTI$Ug~{J4s~Dr(m+3BC=YD-9G-@b_YSnW272!v5lZe6ntC6Gt(MS=S|yBUEjaoE3itzN^q(;C;3_xv0g+`t z0Edr=tn?AI>@hfb4D;g&%#SC~15aV2c}i&fGpNinm@ChSETkUtJ}0E&Zy5U*P>~m4 z*Fc2g1|q9&fC66gK@*JU8_4hmy7V6+)cgZI z@)m~XEp$D^at)D1YM?S2kZA~&zk_AQv%aZ%P){~wE3NxvGyNl zQ}Vr*Of&vB#&QEdX)u5n99hFGO||zGEN1r=EN(7{!pp?0;GDxt2MEjOOVEs@w$5M@ z#mr=|K}qdOg-j*Uhj|Gh)PM+;5K;|^@CHJ5Ya-A#Fp?0iK^SdBgi;9JZDBMZI2sdS z0|a71gcT49A)JHo2Euq#kU?mK;M0x>Nf62*yni<6A?)? zPa#|zLNp78g7aZS^E(9lD5BX4;m~l%GXg3w5-Jc)GzO!H<_v_a(L|FnhG+(jC7Q%> z(4g@|v-(r0R17q50?|0e5=|WhWnmoAEQyDLCK64+B%-lOfSM%|4Vg?d7E{1*D$(Ra z=$iz+0AbNIu$c}OgfL|W(NrfBjUol?W`RQplTxAQJ|mh`2>T(_Lx78}CIZ4d2yo#Q ziXgm$Fk%jo3SQB^ho_tp{A7nsHqm@N>2y9#I{dgo=p{(KE(%{B{^O!B!Q*h{Yr(md zw-876_JsK>lb3lCxx6r=75uG+zp(HVC(fTkj05LPOPQKH8QyP~H%jq#)K0LKe5O+y zDej$MVC^NBH>`oD40-)Z%JM|cnwZ#s#9-<9bHPTc*+cc=OPa0kgh-Rwa(NZJkuH}% zE{CN;r5nErA@rFbxl{_>roI&9^2}eDHYb}hXJ=Tt=1b->a$3sdIsNC6MmlNo)M+V@ zdPj-O*FSpJjL9i;2F#kx4Ej$akE#FUltfVfO}mp!8Mu1Hoa{Wn{uZmXg>IWcZRshQ z^z~&Sy!BbI*$H3WKxGP2XpxNkDwBq%)9#Yf6~SGumV^BJN@29y&oV!91Snv@H0Xwn zvXN>2adE!BPz_xWueliyJV))?kd5=yi{K%KbQuc3tw)? z~JVY9HOBk-# zWF(hYNSE}ey~7hDKl0w_Kb&1Qfvmzg`Xzk#)<(K?OUN`P)g~||U&vYeG&0FkpSlV= zq#^Jkq4{nzD7t|anhW2f$mMUJ$fPy;(6cMdr9m}4=X-)BRax;o-`|5g8?2BO^3u|fO66#KyteNppN%=-Fk;0VJlD@Z=DqB+v=X|Sa{rgAF zgC6hSpL}7%+^`zw|HA&392c}Te)NZ6Mqjt*zBKK5Wv92Hj`HQU(CR*mXa^ao0{JPS zgB10r(8hwSvX#sC-e68De_@T^dz?4k*oc}5e@QMz&{5Crm?uB|*LH;ZlC{!OBigBr z#!e=$T?jeKzF~9DLb|hzb`thW&y1+AgW3VQ5#IHIHFlY`v+xn~opqP}t&n=PrGw~R zN9pJz!HphplrAlYrWZT1rdvu6+tT)q#~g{CuOFM`17=U0I&*SL8f*4i%b_FVNQQ&- zL!Hn^Mvgd0^$!J)cDo#*YxDa! zm|OHGU%NnsRwK6^y-lcXtEj;VWQChF z(S){_GM)-@t86!D_ez$zNc*=8+!2|SV?ym{rH-L+O|mnk&aOAz2<_t^mk^bZpj|e; zWSv`7!bp%H-jgPn(lNBmRqFFpur(ql+@W}w@-lgmbQ3i4>m3qDOGeLxNSj+7pjRJj z>!{A_*@AduhrGnEU&?Nc9%fL+WiojfI2K zPz&m2zrBke`Kb#`hNCQRP6_*)_cQxjbcy@f-ypQ5OS>{ZU4)g=GYi^7SR-|^q;9tV zc=-{rD`YsTo%|*2Z{g2yGejj7IG5H~QWN^SH_K`#IldOmzqHSW&Tjn_OzKLtP2}sh!CxBQ zo{l$u&>b$1rEIJ9B~Q9bs*y4q>FGa0cfA*Za(SlI#+HT}-1lcIrYTSwZc9CSUhDz; zpqDRX>%robYbGk;Fn z#tzuszI-bT2s@!5a()3y?;bvJzKga5sB%eM!^qAjqaRs%j6J)ZatCHI5IlfqzV8?CrS$#F@O zCnipwO;+`kkvwBi$B{KXXHJ}!LcV1;5A0uQ+r#Gebcsyb=S1CLDpopC8>M?hQW=d5 zx3>oa`22@B3K`muaiL?$8|24uuff`e@|t@UY1$$iC2E4N?r}9PZ5dPvlg_P(Jy21UJY+gU%y4S0S%LZbYs@Hg(|+ z8w6B6xsDt z&Nl8`e-fE}>dwlGi{biscj$j6XhK068Z4f`4GNKcV>ugj;P&T{709FGxSoA^#r)aD zb2jbB`603g@`;IDAEiV=>Le~mL-tJIoQ-@MIlzNE9FWNMNyv_qIcFeC$VJE}ki$Cj z{9aSIy>cuH-l8BCdHz&xa1gl>xeobg64zUJa)-B&y^sy2aeWN(U}X4$L)$|uIV;Id z6r4tbV&w4Y+(C7-9=Q?OdR-vkwcKLAeVRJdYfc!-+(+`%gPKA=F1HNW^#kE z$i^w0Gm*O^7a_+YzeQe(Y~jcKJwjF>FPO#sMIjrd0xN|Kl7xZ+CIHSx_W6u+G4c<{ z4bA%5T<`493*3(!kGyRT*KbC)NaK7Hc_*-v6{rZ{4npU0gDB(zQcg&XM@5u0bS}iYI1nZymfW3kXJQs6LME(L9z9rLUIEtJT!nqc?5qZlJoA`+>wUrP703sXlaUivaD6`VcH~mdO7aW^RcH{h zl4p2~JPX;mFE4OA@A=e=PhTOmy$|r$eat9Ipxx=-{$;kD{naCrvxqV@?J#q>1 z6XYu7A#1pOBl03-_6CLa`o9|mn?WEzg-q7+4CTlP$k~Iq{xEVevcp&0z7}~ovh!eW z{~K~7aMuV5g<;cBNJVOKWDr9!A$13~`IRLryI&PnVycU_gBBHfN zb{-1-&jel~&j4REYk3254)Pz!CCF2AxxK|OZodOL1le*u*C!zlMlMAD64_Z9#T}eP zK_s%_2JRponY{zTHmV%tg~&URFCep*Us!{jByOKQobz(z3go-U${G~(&EpyBkryF* zjo=QhA?F|mea-EwkQX46k=%YWvIlYlauRaLMs0p2$wR?ZE+F~HN0G~rYmwRAE^DFl zCSC!XXwIvV*=s*cZ@8K3%aNBN!uZohkmcjK{b$Jb z$m@{9kRKw~B0Ch|^*`)W?qCuKSOpT1bCI)u0^)k!Sy~d-2YtU zaO8bE@cKU%1yyK}ifpixJ19gBL@q&2M6N{MhFpzYfn1Ml^bPlCKY>@s{~K8Uti@3% z_zVrwkR{}dIG({~7q_oRUXN@a&-GT{a(y1Mh+K@USIG786S@5?B?@+;fbQl7dna*& zBxLrInm`D-hO9{79JPnrM_VNMi zu_ELkUiTp_s*Y8Dc^#kWRw{ zv-bsAh36c^{K(gltB})vDUI8AKF#%6$UTtROR>z~cI2J&IA7+hB;_cuJ%a@x=OH(y^9-+$z2eP%>py&3$h!y)rIX|)@i3UVW3D4)DQfnq(+(Deq-kcF&7Za}_@?7V^7Ti)dM>=}_&C<8f6;%t74 z>lYzUM$Q4&UjOxObAy{`Fay~+k2`pY9D+Rj4!18vzJy$bJhF!C4Zi02uOcgud*0=G z_(22z{QoElO3}dP9yjpV$Q@)O=OLd%u0VFW&+Sb&ar;u_0OYsG(a0gS+&*~|^grve zEhyND2EQYhBU}H$Gt?uGLS{d~VEOZqbCDk+mmr7!$@AADZ$ma!Zs86bA8>=zZJgI2 z*C00{8|8ET)H-gTg}e{B1o;KBeF3+ReaP)YkdGlNYf)hTh#Pop=NYyj`|RNS8kzm3 zgtd6&U);U~`6zM&a@)sTZ?u!!&p@t3HhH4eD~ahh+#sF{NIddoWcG$MD=^|IclZ{$ z5ZQSb*LyzWdU%UkYkv#51Uamp>)DTCn7@r$R>HT_-*N$c&JEI#Q;;_!|B1|gMZ+8{ z`kUK_6>`3coPiwlg6qqWMdU{0Cyd$k-)1*=5Z=Huj78p!yct>VCD$KB9*f+FybjrG z5BFDr9EsfS70;i8JOo&K{mwoF@+~5crupcC`0$w6V7IE&?#2v&V&qv;i{4H`R@*U*#A9((_ zH&_AW>^HFfwb%ax+~5)#q#@h>!}a;dLy*gmMdT{vXUG9+?r-i}o<9}27@7UjiZ$@D z5(VTS7kF!U1`lL-Ra;xZ803@4naF1ExSsuFi#g0dj{cGJKIA0iJII@nmHpmx2jmdX zum;%+xg0qP8Qx&lRtSD0pe+!7{h?*WVa~P4k;r`nuFpXJ6?rdbCFw-DK^YpPBR@vg zmvOymF)v^=av1V<qTS* zauaeQvbq(w&q1E4&$$uV4t^NP<{Wz})?WYTqacb2U<@xJFGB8R$TJioe}`O!Jgzm@ z8uCGI0k8JTXFQAn%*Lxt( zMGir}k9_k4x9WvEA9i0pNS7wB!r_2I}T zkzK{4`U-L29e0=E<8gbausqla)c|_N1WyPzd?>ic67rEATLEOLT=QuGK18h;GR3r z06#v`&WY3xoW~-+L*9uT-;wKUkWV5z!(%v`Q*NEOp8aZ;@oMC9%dveZ4HV)xjiLCqy1zErG3|_ssLDUV-^~j5mCxvo-A#%^&oJ*07!Z=qWtB{Ru za(`BRxZaDil5{{pIvR{aX1^(CEn0(IhkOm${ubBU_vH@rktZXUB5y%vzfEWU>X37^ z4Ew)#Kkk72Xq_2EAs64_9EV(soPumx!}W`iBazo4$0HXavmdK5|0j{)g7n7{vrf+e5w4Db_w zZH8)O`022ggJQVeRN%Y`*$251IUTvf1a4oBJRLcJ^8D%vc>Rw@!JlYgBn9Y$n1a{#xIcBK{t$BDJO9U?8F-;XphWJzG2)I znVo>cxDPTr35W40WOgDB<7vonGLDuPBeMf?m|lg<4$5Jy{00T=#2h9#g3M0NVSE9Z zouI?`E;2hwhw)2fcA^er!vx+ScCrp*2W0lh#@H8`owNh2B>hoPga+e~+0i>J!%XB# z4-~K?dze8JGCR75aoa>}5wZ(1 zJIaUYyCbtBeHaf!W=H!lo`B4b_+k7RGCS%=d;R|c1??|P0SCQG7K#U(EM<}Zy1<33$ zBgQ`>vqOy-pG78?oNpnsLynmKIkK}71$t9?i`c10%%D9oJN<}pS7dey65~F|>@+0C zqmbFDNQ|c;v%`@XF9vpOl|k5142)MHE7@5MOt1k3><9(M+Zh|e%jx|&??+~5HZc8B zWOgP5<6n@Ak*knvkZX|HQ4Y-hF|ctPSpOLrT+k*-Dawg_y$Ahr~;R8~wKX&RCWB3pa7_R^9P%0*XJ0h(?axLd9*0_SZGrX30l}P4wc>hqVj8PZHv`V>BsIpX4LR@Z$T_n$?7ytQd<7SbY{Ly|E^u}- z;+%F0GqgpAKXa}&<{VkUIp2hHCgnp4Cv#{UREIYtGm+!*7VV)aj6bVDE*kV{$1||= zzgUfTAy=hx);HsNgIvy2k>xp@uOjbt<~-A!+vf*xeuWJGmm01AUoGJNpH<*y6&J+9 zWMh1=oO2CwEq-cMWQF$8T+e=JsO`Z7&WDjp;y4eo;rhKZIiEy^V}P_32vW93gKb=J z47nD^d?HMHRzTThuGb)E#&C|ZoXe0se&lRr&-GbFoTnjI?B%RH!vwG~H2*&v zAE1GUjE^Dv9UrSefF5V|Gd;$p$bB6-AH*TcN6tqkPF!Dx{w5$7aaNKN6ojLJ1B{)v zOK}qAAQxHi8oxtM#sa={;r7nRmabT!oL6`&at!+K=*IP9p{KRi|6CN*tl|Y?~At%D}V+|}S1icarYEY0jfoB-k zi5ob_a=wqu4lHC2*>Ap>gTg(WcO$b?^_cz*GCN(5alg*oo*nzgSVCsU|7oxPwJ11P z%nd?4u>f3F*~nviaDD$STpxCx^GoEUc+N>)Tt7CS^9AJ0eVki&<@#Jby#6m_0@&M0 z1|PGH$UewNk>io?XdReBTe!m)T87(pea=n5&{EiN`9DK%EwjdJ|Be5^tpDNP>JI|W zr7ieD3)bUX><5QVEts9i2g(n6u?6pIW-OmvY!>kH$+H&R+UI{Aj%mT$Tkz8s+|&1e z^JgJ9mrs6gVbIC%e>0@E;L;YX$G6lEEgsr}SGC|{oVD{$+vXQ74E*_?{lQ^U3*Od( zt6Q*j_y29c$QGQXWq$vut-$#f1~*&qlNPKO_`d~oZ^46GaAph6XAJ%Sp@sOXwh#Qc zMFtsPejoG}E!eXK_i4d#EjSmL_5TNlM_U;D(SmLHeZmKO-xeI-g6Fm1B`tWpf`9(^ z!Qti>1_xSj1?Laz`u7(4CoTA03$_UQ-y!Q9#QXn41wvaGjA+3VTX0GX&gA@|f*V@! z?iT#LvW4Jq3qIb0e`&#$E%>yIX#aP{Qy`uSAqm1X2-6|VfRGGfCWI6SvmofD!k^D1 z%~WbP`~oC@g)ke!90+L;=0cbU;d2P-5avTz0AV47MG!7QSPWqa1SN#a5UxPTfUs2R zo<#lI*Ff?v1o)qHkoyp7A^ZX1PwB}N`l%E-l`7gk0R9%jUl1NkGZSg=c84KZ3;|A@ zAx|MZllCQ2ySDX^d=B9_guf-1MB2^J5bl#(LokxYO`&!hl4z3c|Fuk+bZj#9Gi-p| zFCn~=+9gtRL6Evmq1Nr19kl^xtRty3dxb^B7= zhcY5Pn?jq~z5qw15Kcfi$=Yphz;-QX5*H`^uz^}0zI#!as68@FuEzw65BHVmQtkO- zI}KJ|-9Zmu-61QtmJ0u&)*GG)dQ$yGS=+2PcpuOioRUOPe?; zd9tt1Mq~fZ_vLoWpkn3KQ6+zNB4gX(az83V~2h|Iu4ud z{QN%7>;G|HnO}E5Y4~NCx!|jfI{!zup#PHjO9hZ?_{ZJn@B48}{QW*I+27yyqZ<1A zE2QV(wsVhOjV`_n&2A*sN{@Q*7P;QMjo0(?Jq z5#aanxCaCTNq51m;IEA=|HD&Y56QRcKbsn$_;_vw1O-YiNS$^E`?tVVf zC1&WajsBx2yZ=W|cJCe_xm<;w{J0ysD?T2l?r;=y%iaz2_mMthEz;q+7XfWWTQF%ZULrd~u=QR7VES^@{5c2EjJAu5E4vl2*V?DWg_HSyQC z%`{SWSXI1U@>kmKb@cL!gnBt$R@Asz> z?dBdAo{GynuX&rib2ag}^-bI9mrvQsme<*S<^Aeun#anV5l23`IF4Lyij3cLd5=?2 zbi(Xs7gi~4=aHS~y?h7v@p2vL_tlh!()6wSj{OE(UFx#jNw;Il?1-a<^r-zh7LL_x0nbKF?Hcrxw^Abl$P2e9_4-dtJU> z`*!o1sj+{pIv29AaOv^OXOC+p)-6=*Ox*azndrXjrcF4O;r+(`_1m(@sKjqPwz}Uw zeR28-yQmjgncsg_RMdHC>#q(T-O}_GvG>e*eRupM^Me!G7f~Z9cEs5ex_rGfcd|jyM9=zb}e{tIbA*c z$~%)!EkiCXPdDwjyzBXXPH`K3Vt;>8HDJbh`{{~)e~AxD9vD8%DNowb=1SzAS!W(jDV1NB-u^DLaCT}mOe$P&{czd9 znLd$8Lr-=q`#G@wd9Sqfx%G-krDd-qpBu6o<&wMizdij`URU$-34d+&^cvMFrd)(kZ`|8C)uRl95dkY&uN*FTpSG(Vx#V2>I>$j!q+GF%`va9~eEqUnjd!+Tp^}mEFGC^eic3;h-;v zJq#Ifv2(?wgFlRDwd0w-`R~y^%~~bCm~&~{tp1yy=)c~$ex}FNTV|%$`+fP#=3QMT zJC2#ZJuv=Lzg?TI{#dkYYvzTh0M+w*P5GZT{*yAL$L9m@RQ&zW*wD~zlAxTQzNcKT z+`an{yE~1vm=JBZt{BG zci+0JUE;?*ux@yt*)!B`u}yfD+WQOFo*|c%(|b5g>(YCAj}h_upRMyND?D^;>cI1D z>}xx9_|n8NVd=UF&z|PpZgalfgKkSloQxQ^JZSWu;ORky7Kc|G%YHGu@b}hj-G31} zt&J=)%02fs;GL06(9Y!Zg*(@G8h+pFT(V|ex1VmDy7hd^_?YGL`_f3;iuF~U75#$y z$o&VuxET6;ymE~7Rm0Yu?rgMKW!vk5(Ec;W<*xmMKePI*>GRGCn^B$V^h-TbEk?|9 zvHH;=ZDP97i}~$j36ot;PMPZabV2WNtA2a9_fhZTVUz5CoEH`{?FW-XUE0g1sV^^iGe{3t~lBMleuN*C}_`G6V zZdl?lvfsmJMz$j=-4=dj5_|U8m9(dQ;|(Jmo(KKnIKs^*++%>% z!K{0^zv-=dx?tA&rr=`x1v4fcB1aszx=-35|LXnT?JiTVUL3llU0LVTX;vL;XJpsy zHh-;LzH891D8t8_gOX>ioj$4W=c|)TYyCdYE4_17m_FnFr9bp<3_ItNcdy@oDW6`^ z+w}g?v%|4f5qsAi`hI}_ZwH%poL-X9X;+G-F?MnXGIY3l<&fmKQK~}2RiEY$J==ND zw{NQ_%uUE|+)fh9ceIlHU*Ec5O9E%@o`2|U`%^wq74028w&gB3{B3Tc@0yF2gX-E( gzA(33n11a2yCv&?Y1eOl>GWs$cY2gpt&DK`Kfr9qO8@`> diff --git a/2024/aoc.cpp b/2024/aoc.cpp index 37643ad..f2206f5 100644 --- a/2024/aoc.cpp +++ b/2024/aoc.cpp @@ -3,6 +3,7 @@ #include "aoc.hpp" #include "day1.hpp" #include "day2.hpp" +#include "day3.hpp" int main(int argc, char** argv) { diff --git a/2024/day3.hpp b/2024/day3.hpp new file mode 100644 index 0000000..ef5def0 --- /dev/null +++ b/2024/day3.hpp @@ -0,0 +1,104 @@ +#include "aoc.hpp" + +#include + +class Day03 : public AOCDay +{ +public: + Day03() {} + ~Day03() {} + int Day() override {return 3;} + + int PartOne(File& f) override + { + int result = 0; + for (std::string input : f.Lines()) + { + // for each char + bool searchingParams = false; + bool firstComma = false; + bool closeBrace = false; + std::string leftS; + int left = -1; + std::string rightS; + int right = -1; + + for (int i = 0; i < input.length(); i++) + { + if (closeBrace) + { + std::cout << "mul(" << left << "," << right << ")=" << left*right << std::endl; + if (left != -1 && right != -1) + { + result += left * right; + } else + { + std::cout << "Failed to parse" << std::endl; + } + searchingParams = false; + firstComma = false; + closeBrace = false; + leftS = ""; + left = 0; + rightS = ""; + right = 0; + i -= 2; + continue; + } + + if (searchingParams) + { + if (!firstComma) + { + if (input[i] == ',') + { + left = std::atoi(leftS.c_str()); + firstComma = true; + continue; + } + leftS += input[i]; + } + + if (!closeBrace && firstComma) + { + if (input[i] == ')') + { + right = std::atoi(rightS.c_str()); + closeBrace = true; + continue; + } + rightS += input[i]; + } + if (std::isdigit(input[i]) == 0) + { + searchingParams = false; + firstComma = false; + closeBrace = false; + leftS = ""; + left = 0; + rightS = ""; + right = 0; + std::cout << "found bad char : " << input[i] << " IsDigit? : " << std::isdigit(input[i]) << std::endl; + continue; + } + } + + if (input[i] == 'm' && input[i + 1] == 'u' && input[i + 2] == 'l' && input[i + 3] == '(') + { + i = i + 3; + continue; + searchingParams = true; + } + } + } + + return result; + } + + int PartTwo(File& f) override + { + } +}; + +ADD_AOC_DAY(Day03); + diff --git a/2025/1.txt b/2025/1.txt new file mode 100644 index 0000000..95c8342 --- /dev/null +++ b/2025/1.txt @@ -0,0 +1,4392 @@ +L32 +L15 +R38 +R47 +L40 +L9 +R27 +L7 +R27 +R37 +L26 +R49 +R29 +L24 +L42 +R29 +R2 +R47 +R19 +L46 +R1 +L30 +R34 +L16 +R41 +L32 +R46 +L17 +R34 +R9 +L22 +L42 +R22 +L15 +L15 +L42 +R42 +L6 +R42 +R34 +R13 +L2 +L9 +L45 +R3 +R30 +L5 +R11 +R18 +L42 +R68 +L94 +R7 +L15 +R34 +L26 +R23 +L97 +L18 +R61 +L96 +R88 +L16 +L19 +L7 +L93 +R50 +R67 +L17 +L38 +L62 +R91 +L14 +R89 +R15 +R42 +L46 +L93 +R16 +R24 +R76 +R50 +R30 +R20 +L57 +L43 +L97 +L1 +L54 +R52 +L95 +R95 +L94 +L24 +L64 +R60 +R68 +R32 +L50 +R58 +R6 +L92 +L121 +R33 +R288 +L20 +L4 +L1 +R25 +R86 +R49 +R65 +L48 +R948 +L48 +L1 +R77 +R42 +L70 +L98 +L7 +L30 +L758 +R293 +R94 +L510 +R14 +R5 +R14 +R37 +L55 +R185 +R16 +R870 +L40 +L18 +L152 +R10 +R914 +L84 +L51 +L447 +L2 +R57 +R43 +L448 +L80 +R83 +R45 +L94 +L10 +R88 +R57 +L31 +L10 +L187 +L86 +R73 +R54 +R32 +L8 +R117 +L4 +R9 +L56 +R56 +L13 +L265 +L22 +L335 +R35 +R30 +L60 +L70 +R28 +L428 +L516 +L4 +R462 +R675 +R6 +L22 +L58 +L43 +R60 +L60 +L11 +R94 +R66 +L49 +L73 +L83 +L7 +L95 +L84 +L64 +R28 +R33 +R45 +L17 +R94 +L887 +L390 +L81 +L38 +L95 +L13 +R38 +L11 +L917 +R17 +R61 +R47 +L659 +L50 +R59 +R80 +R44 +L35 +L47 +L191 +L79 +L30 +R79 +L79 +R88 +R97 +R27 +R6 +R37 +L8 +R139 +L552 +L71 +R48 +R19 +L246 +L95 +L56 +R397 +L14 +L93 +R80 +R86 +R11 +R585 +L85 +L91 +L909 +R92 +R8 +L82 +L50 +R45 +L24 +L51 +R59 +L15 +L82 +R58 +L31 +L27 +L727 +R55 +L24 +R47 +L74 +L98 +R29 +R92 +R17 +R83 +L29 +L35 +R52 +R312 +R54 +L20 +R27 +R60 +L91 +L96 +R95 +L29 +R47 +L14 +R64 +L52 +L445 +L23 +L84 +L93 +R63 +R89 +L52 +L78 +R78 +L37 +L11 +L111 +L40 +L901 +R26 +R50 +L676 +L57 +R343 +L5 +L81 +R491 +L12 +R21 +L21 +R592 +R99 +L870 +R83 +L112 +R84 +L55 +R72 +R41 +L13 +L67 +L233 +L62 +R62 +R75 +R25 +L85 +R6 +L21 +R92 +R61 +L71 +R10 +R42 +R66 +R99 +L28 +L71 +R616 +R96 +R65 +L37 +L22 +R49 +L44 +R77 +R95 +L97 +R5 +L3 +L584 +R51 +L67 +L7 +R7 +L153 +R76 +R77 +R6 +L13 +L93 +R23 +R977 +L10 +L21 +R31 +R55 +R31 +L36 +L67 +R938 +R99 +L20 +R43 +L43 +R26 +L51 +R37 +R88 +L36 +R648 +R288 +R84 +R67 +R55 +R72 +L309 +R31 +L45 +L55 +L1 +L68 +L71 +R32 +R26 +R982 +L729 +L954 +L98 +R10 +L8 +L4 +L87 +L84 +L84 +R63 +R86 +L97 +R386 +R14 +R86 +R26 +R29 +L17 +R33 +L963 +R26 +R603 +L66 +L71 +R14 +R86 +L60 +R14 +L54 +R92 +L37 +R301 +L56 +R787 +L87 +L49 +R52 +L596 +R8 +R51 +R49 +L29 +L41 +L45 +L36 +L16 +R16 +L945 +L19 +R52 +L52 +L55 +L17 +R72 +R72 +L39 +R72 +R95 +R26 +L11 +R39 +R46 +L1 +R1 +R10 +L55 +R74 +L29 +R85 +R9 +R43 +L37 +R48 +L48 +R35 +R80 +L47 +L319 +L103 +L98 +L21 +L27 +R63 +L563 +L86 +L14 +L752 +L96 +L46 +L6 +L65 +L35 +L86 +L39 +L869 +R51 +R49 +R24 +L830 +L99 +R99 +R14 +R67 +R70 +R34 +L98 +R13 +L17 +L849 +R66 +R60 +R859 +R82 +R799 +L34 +L47 +L48 +R61 +L9 +R31 +L54 +R77 +R38 +R485 +R66 +R43 +L9 +L80 +R76 +L21 +R555 +R70 +L67 +R69 +R24 +R74 +L27 +L63 +R954 +R97 +L61 +L61 +L31 +R46 +L943 +L97 +R48 +L23 +R661 +R57 +L57 +R87 +L87 +L98 +L346 +L62 +R62 +L41 +L85 +L30 +R2 +L26 +R477 +L53 +R83 +L902 +R85 +R34 +R64 +L690 +L72 +L286 +R66 +L96 +R1 +L44 +R246 +R11 +R390 +L290 +L94 +L6 +R143 +R57 +L26 +L18 +R536 +L92 +L136 +L18 +L54 +R8 +L3 +L59 +R16 +L26 +R96 +R76 +L15 +R15 +R10 +L86 +L586 +R28 +R34 +R58 +L603 +L53 +R36 +L38 +R370 +L70 +R1 +R75 +R49 +L89 +R57 +R43 +R16 +R493 +L87 +R73 +L11 +L387 +R67 +L74 +R34 +L967 +R7 +L84 +L70 +R4 +R50 +R39 +L82 +L57 +R289 +L31 +L46 +R66 +L78 +L53 +R53 +R96 +R599 +L98 +L97 +L46 +L54 +L86 +L62 +L58 +R22 +L953 +L63 +R308 +L39 +R3 +R512 +R16 +R98 +L98 +R17 +R83 +R2 +R33 +R87 +L96 +R174 +R270 +L51 +R81 +L571 +R71 +L90 +L41 +L314 +R45 +L55 +L45 +L815 +L23 +L34 +L978 +L50 +R955 +R87 +R58 +L65 +R77 +L99 +L90 +R71 +R193 +L71 +L16 +R64 +L64 +L28 +R885 +R13 +R63 +R446 +L91 +L688 +L61 +R61 +R10 +L92 +L88 +L40 +R99 +L489 +R41 +L80 +L526 +R1 +R152 +L36 +R15 +R33 +L229 +L71 +L43 +R243 +L40 +R40 +L554 +R54 +L20 +L80 +L10 +R89 +R121 +L632 +R46 +R54 +L24 +L44 +L33 +L877 +L88 +L4 +L98 +L258 +L57 +R15 +L9 +L58 +R51 +R217 +R47 +R21 +L69 +R45 +R84 +R65 +L94 +R20 +R80 +R805 +L5 +R48 +R52 +R835 +L35 +L71 +L12 +L17 +R18 +L61 +L22 +L612 +L75 +L48 +R844 +R59 +L13 +L604 +L86 +L41 +L59 +R241 +L41 +L9 +L28 +L427 +R83 +L19 +R59 +R65 +L36 +L88 +R935 +R984 +L19 +L14 +L956 +R70 +R960 +L19 +R813 +R31 +L5 +R61 +L695 +L846 +L23 +R23 +R61 +R39 +L61 +R43 +L17 +R835 +R52 +L52 +L36 +L759 +L86 +R44 +L8 +R45 +R17 +L17 +R69 +L969 +R55 +L55 +L39 +L61 +R13 +L28 +R28 +R87 +R331 +L31 +R461 +R14 +R37 +L12 +R59 +L227 +L33 +L668 +R92 +L3 +R57 +R30 +R93 +L88 +R43 +R94 +L49 +R25 +L75 +R50 +L54 +L46 +R994 +R48 +L42 +R63 +L63 +R7 +R24 +L651 +R73 +L53 +L91 +R91 +R11 +R89 +R44 +R93 +L2 +R65 +L277 +L60 +L42 +R88 +R13 +L922 +R34 +L34 +R87 +L82 +L55 +L78 +L35 +R7 +R125 +L41 +L28 +L711 +L678 +R589 +R3 +L3 +L494 +R89 +R36 +R69 +R51 +R483 +L334 +R95 +L95 +R24 +R68 +R769 +R39 +R44 +R77 +R24 +R87 +R69 +R94 +R23 +L41 +R51 +R72 +L71 +L81 +L4 +L44 +L23 +R49 +L26 +L10 +L90 +L98 +L63 +R60 +L92 +L999 +L69 +L39 +L424 +L76 +R68 +L68 +L23 +L74 +L878 +R8 +L233 +R17 +L17 +R13 +R94 +L85 +R92 +L14 +L25 +R305 +R24 +R236 +R32 +R23 +R22 +L292 +L44 +R819 +R7 +L47 +L860 +L20 +L80 +L10 +L38 +L66 +R14 +R20 +L20 +R8 +L628 +R21 +R59 +L924 +R29 +L665 +L31 +R13 +L335 +L518 +R90 +L81 +R81 +L19 +R28 +R86 +R86 +R23 +R75 +L75 +L91 +L77 +R26 +R19 +L7 +L60 +L33 +R404 +R96 +L719 +R619 +L42 +R42 +R281 +L16 +R77 +R58 +L57 +L63 +L24 +R50 +L6 +R87 +L39 +R752 +R208 +L37 +R25 +R56 +L69 +R517 +L387 +L543 +R89 +R604 +L27 +L36 +L82 +R57 +L120 +R775 +R70 +R814 +L70 +R47 +L71 +L57 +R37 +L81 +R81 +L389 +L11 +R47 +L847 +R83 +R25 +L59 +L220 +R306 +R65 +R39 +L89 +R65 +R85 +R88 +L88 +R816 +R14 +R770 +R58 +L58 +R151 +L251 +R25 +R282 +L7 +L97 +L3 +R88 +L6 +R18 +R29 +R72 +L162 +L51 +R12 +R25 +R975 +L91 +L109 +L314 +L86 +R85 +R85 +L47 +R86 +R93 +R98 +R12 +L83 +R571 +R2 +R8 +L410 +R25 +L18 +R440 +R53 +R81 +L81 +R55 +L34 +L26 +L164 +R7 +R62 +R57 +L57 +L44 +R25 +L50 +R69 +L92 +R640 +R1 +L49 +L19 +L181 +L38 +L446 +R784 +R33 +L1 +L41 +R784 +L90 +L85 +L50 +L50 +R39 +L93 +R78 +L50 +L19 +L29 +L63 +R10 +R985 +L83 +R565 +L57 +L83 +L99 +R99 +R35 +R65 +L15 +L88 +L14 +L86 +R13 +R90 +L84 +L16 +L86 +L14 +L79 +R36 +R43 +L66 +L66 +R532 +L86 +L861 +R47 +R1 +R67 +L12 +R144 +R89 +R8 +L43 +L46 +R892 +L94 +R94 +L80 +R80 +L776 +R76 +L1 +R25 +L56 +R27 +L91 +R91 +R40 +R235 +L93 +L50 +R465 +L50 +L42 +L91 +R35 +L366 +R22 +R88 +L97 +R229 +R8 +R72 +L586 +R86 +L61 +R47 +R14 +L17 +L90 +L4 +L73 +L56 +L460 +L67 +R81 +L15 +L74 +R789 +R39 +R73 +R11 +L74 +L63 +L82 +L39 +L35 +L44 +L57 +R57 +R408 +L10 +L77 +R97 +L18 +L15 +R6 +R89 +R48 +R26 +R284 +R62 +R657 +L641 +R860 +R9 +L27 +R742 +L930 +L29 +L41 +R57 +R43 +R77 +R17 +R6 +R68 +L7 +R14 +R80 +L55 +L75 +L26 +L24 +L775 +R50 +R59 +R91 +L42 +R62 +R280 +R92 +L92 +R51 +R3 +R46 +L22 +L78 +L32 +L220 +L34 +R501 +L44 +L571 +R76 +L20 +L91 +L94 +R72 +L562 +R272 +L34 +L63 +L8 +R13 +L79 +L79 +R424 +L810 +R93 +R90 +R72 +L72 +L219 +L32 +R15 +R55 +L32 +L887 +R59 +L79 +L1 +R212 +L730 +R39 +R90 +R510 +L15 +L30 +R91 +R21 +L67 +L2 +L98 +L630 +L681 +R27 +L16 +L430 +L23 +R53 +R84 +R88 +R91 +R95 +L58 +L38 +R86 +L48 +R81 +L39 +L42 +L35 +L65 +R26 +R4 +L30 +R92 +R346 +R574 +L12 +R64 +R36 +L621 +L89 +R76 +R39 +R887 +R64 +L56 +R268 +L96 +L1 +L402 +L269 +R46 +L64 +L533 +L49 +R42 +R158 +L255 +R80 +R240 +R5 +L88 +L82 +L550 +L683 +R49 +R86 +L2 +L12 +L36 +L152 +L78 +R41 +R85 +L16 +R68 +L369 +L1 +L4 +L1 +R75 +R651 +R32 +R20 +L93 +L188 +R78 +L32 +L91 +R48 +R90 +R85 +L11 +L40 +L11 +R62 +R42 +L369 +L673 +L893 +R762 +R15 +R416 +L33 +R27 +L894 +R4 +L76 +L12 +R29 +R59 +R596 +R67 +R126 +R953 +R142 +L88 +L80 +L40 +L280 +L77 +L23 +L61 +R1 +R54 +R8 +R98 +R26 +L27 +R706 +R348 +R48 +R33 +L64 +L68 +L2 +L26 +R74 +R26 +L74 +L36 +L64 +L3 +R3 +R388 +L29 +L837 +L95 +L27 +R506 +L137 +L369 +R49 +R319 +R32 +R69 +L299 +L8 +R38 +R40 +R60 +R62 +R36 +L98 +L4 +R4 +L74 +L3 +R77 +R24 +L79 +R55 +L512 +L61 +L95 +L33 +L92 +R79 +L53 +R54 +R72 +L2 +L55 +R98 +L204 +R98 +L98 +L96 +L18 +L82 +L22 +R15 +R88 +R19 +R6 +R892 +R2 +R615 +L15 +R984 +R16 +L28 +R804 +R72 +R52 +R48 +R41 +L789 +L72 +L82 +R54 +L42 +R542 +R43 +L84 +R141 +L12 +R782 +R92 +L68 +L92 +R80 +L53 +R71 +L98 +L2 +R97 +L343 +L55 +L99 +L726 +L64 +L10 +R66 +R56 +R20 +R58 +L78 +R78 +R22 +R35 +L195 +R38 +R94 +L837 +L61 +R25 +R86 +L27 +R20 +R89 +R62 +R91 +R14 +L68 +L88 +L79 +L21 +R28 +L328 +L89 +L877 +L789 +R55 +R29 +R30 +L290 +L73 +L13 +R726 +L303 +L78 +R81 +L33 +L96 +L88 +L992 +R30 +R55 +L985 +R16 +R84 +R90 +R70 +L260 +L40 +R4 +L95 +R939 +L34 +L4 +R97 +R14 +R30 +R84 +R5 +L47 +R47 +L445 +L55 +L69 +L90 +R79 +R36 +R579 +L60 +R725 +L52 +L203 +R883 +R91 +R40 +L38 +R3 +L24 +R53 +L53 +R98 +R2 +R78 +R68 +R54 +R31 +L6 +L25 +R78 +R46 +R83 +R58 +L29 +R54 +L90 +L442 +L206 +L450 +R35 +R63 +R95 +R818 +R31 +R253 +L19 +L812 +R63 +L5 +R478 +R42 +R56 +R429 +L26 +R3 +R36 +L42 +R40 +L64 +L76 +R39 +R61 +L147 +R43 +R4 +L4 +L94 +L84 +L27 +L260 +R32 +L76 +L887 +R30 +L30 +L99 +L78 +R72 +R205 +R16 +R977 +R92 +R95 +R824 +R96 +R80 +L98 +L582 +L31 +L605 +R99 +L83 +L70 +R86 +L33 +R66 +R19 +L85 +L68 +L56 +R93 +R61 +R7 +L82 +L68 +R50 +L6 +L110 +L484 +L29 +L14 +L57 +R72 +R10 +L382 +L39 +L71 +L84 +L79 +R73 +L955 +R55 +R63 +L13 +R508 +R29 +L371 +L15 +L38 +L7 +R688 +R46 +L90 +L38 +L6 +L56 +L51 +R94 +L25 +R82 +L87 +R121 +L34 +L23 +R923 +R71 +R47 +L96 +L569 +L56 +L99 +R76 +L95 +R21 +L31 +L69 +L56 +R46 +R16 +R5 +L14 +R77 +L74 +R495 +L470 +L79 +L80 +R928 +L96 +L57 +R39 +R20 +L80 +R80 +R85 +R15 +L403 +R607 +R96 +L63 +R63 +L395 +L5 +L204 +R4 +L93 +R10 +R439 +L95 +R39 +L36 +R936 +L224 +L76 +L761 +R61 +R21 +L421 +L32 +L46 +L67 +R45 +R75 +R25 +L826 +L98 +L544 +L8 +L67 +R753 +R61 +R29 +L11 +R92 +L81 +L73 +L27 +L96 +L4 +R1 +L12 +L628 +R94 +R1 +L56 +R3 +R97 +R889 +L89 +R146 +L46 +R72 +L53 +R381 +R59 +R13 +R365 +R96 +R346 +L857 +R83 +R89 +L86 +R95 +R97 +R567 +L2 +L65 +L44 +R957 +R548 +R60 +R79 +L85 +L57 +L49 +L47 +R38 +L59 +R36 +L477 +R80 +L12 +L71 +R26 +R81 +R75 +L68 +L11 +L46 +L354 +L37 +L14 +L95 +L752 +R376 +L34 +R40 +L30 +R46 +R645 +L22 +R64 +R13 +R93 +R207 +L961 +L39 +L389 +L11 +L91 +L9 +L89 +L311 +R218 +L18 +L33 +L13 +R81 +L40 +L70 +L71 +R68 +L22 +L88 +R89 +R221 +R721 +L43 +R30 +L54 +L78 +R268 +R74 +R60 +R91 +R92 +L40 +L999 +R56 +R368 +R32 +L33 +R76 +L33 +L10 +R93 +L47 +L47 +R23 +L320 +R72 +R326 +L567 +R729 +L57 +R95 +L309 +L69 +R6 +R72 +L557 +L25 +R61 +R21 +L3 +R3 +R17 +L32 +R52 +R63 +R736 +R64 +R3 +R491 +R6 +R77 +R52 +R71 +L99 +L7 +L64 +L299 +R269 +L91 +R79 +R37 +R32 +R12 +R86 +R671 +R452 +R522 +L41 +L844 +L50 +L65 +L17 +R6 +R39 +L579 +R44 +R64 +R885 +R306 +R920 +L68 +R63 +R737 +R12 +R27 +R20 +R72 +R87 +L22 +L96 +L432 +L48 +R70 +L35 +R45 +L97 +R6 +L41 +R9 +L38 +R61 +R58 +L97 +L49 +L54 +L23 +R8 +L976 +L70 +L513 +L55 +L660 +R31 +R35 +L85 +L42 +L35 +L78 +L73 +L31 +R66 +R93 +R93 +L794 +L98 +R87 +R50 +L40 +L48 +L482 +R108 +L26 +L81 +R94 +R9 +L355 +L606 +L91 +R30 +R10 +R59 +R31 +R31 +R69 +R254 +R11 +L793 +R528 +L22 +R60 +R50 +L88 +L79 +R69 +L40 +L50 +R42 +R93 +R23 +R29 +R13 +R552 +L50 +L774 +L70 +R42 +L85 +R322 +R15 +R71 +R80 +L3 +L12 +L50 +L38 +L579 +L14 +L94 +L127 +L568 +L224 +L242 +R48 +R43 +L873 +L270 +R11 +L11 +R57 +R36 +L73 +L20 +L652 +R19 +R33 +L59 +L51 +R112 +L802 +L61 +L739 +L84 +R84 +L11 +R11 +L25 +L75 +R24 +L32 +L92 +R4 +L26 +L78 +L362 +L38 +R64 +L683 +R333 +R86 +L30 +R30 +L42 +L16 +R58 +R60 +L86 +L64 +L29 +L36 +R55 +L9 +R9 +R97 +R45 +R78 +R40 +R82 +R858 +R69 +L92 +R28 +L105 +L306 +L94 +R41 +L463 +R22 +L18 +R22 +L603 +R108 +L9 +L814 +R55 +L58 +R17 +R50 +L44 +L47 +R41 +R49 +L55 +R75 +R42 +R89 +L68 +L663 +L69 +L11 +R11 +R40 +R666 +L49 +L57 +R9 +R87 +L96 +L58 +R58 +L25 +L75 +L35 +L60 +R62 +L67 +L132 +R32 +R606 +L306 +L265 +L35 +R32 +R70 +L20 +L44 +L98 +R31 +L71 +R995 +L95 +R57 +L78 +L79 +R92 +R8 +R42 +R15 +R43 +L8 +R32 +L509 +L4 +L11 +L16 +R24 +L58 +L50 +R32 +L84 +R69 +L17 +R578 +R33 +L313 +L225 +R66 +L901 +L889 +L76 +L81 +L92 +L75 +L25 +R9 +L321 +L34 +L90 +R36 +R72 +R28 +L25 +L72 +L3 +R21 +R88 +L809 +R96 +R397 +L93 +R185 +R33 +R93 +L11 +R29 +L29 +R46 +R46 +R8 +R1 +L1 +R1 +L70 +L11 +R89 +R76 +L86 +L99 +L25 +L75 +L68 +R63 +R5 +R88 +R16 +R96 +R37 +R63 +R9 +R265 +R96 +L70 +R68 +R83 +L3 +R52 +R632 +L63 +L83 +L86 +R55 +R22 +R34 +L11 +L3 +L97 +R42 +L26 +R167 +L78 +L921 +L87 +L97 +L60 +R24 +L64 +L15 +R85 +L54 +L16 +L78 +R178 +R41 +R10 +L75 +L90 +R255 +L41 +L50 +L76 +R26 +R155 +L41 +L6 +L30 +L16 +R6 +L68 +L91 +L11 +L21 +R46 +L68 +R43 +R2 +R48 +R59 +L59 +R66 +L75 +L13 +R174 +R31 +R89 +L3 +L70 +R53 +R79 +R40 +R981 +L57 +R22 +R14 +R33 +R10 +R299 +R79 +R671 +L71 +L61 +L639 +R41 +L41 +R52 +R48 +R209 +R91 +R84 +R96 +L80 +R89 +R17 +R94 +L26 +R26 +R87 +L87 +R807 +L7 +R818 +R92 +R90 +R63 +R37 +L290 +L736 +L36 +R897 +L82 +L675 +R891 +R479 +L60 +R94 +R18 +L565 +L57 +L78 +L50 +R950 +R39 +R77 +L16 +L27 +L81 +R32 +L89 +L66 +R323 +L63 +R1 +R419 +L19 +R70 +L45 +R45 +L22 +L441 +R9 +L46 +R34 +R68 +R98 +L435 +L64 +L86 +L546 +R73 +R83 +R18 +L47 +R87 +L8 +L34 +R59 +R22 +R78 +R60 +L57 +L55 +R86 +R26 +L60 +R71 +R71 +R32 +L74 +R796 +R950 +L382 +L42 +R68 +R96 +L91 +R30 +R52 +L77 +R5 +L660 +R955 +R77 +R644 +L21 +R99 +L99 +L287 +R26 +L39 +L2 +R53 +L769 +R29 +R93 +L72 +R24 +L56 +L25 +L91 +R16 +L10 +L649 +L546 +R5 +L95 +R95 +R81 +L21 +L60 +R63 +R137 +L9 +R283 +L44 +L39 +L11 +L880 +R19 +L19 +R3 +R97 +L79 +L9 +L21 +R804 +R89 +L27 +R43 +R71 +L93 +R46 +L54 +R377 +R954 +L1 +R285 +R182 +L67 +L83 +R30 +R861 +R592 +L27 +L46 +L539 +L188 +L422 +R22 +R82 +R58 +L40 +R43 +L26 +R83 +L555 +L75 +L338 +L78 +R58 +R88 +L734 +L66 +R1 +L501 +L4 +R83 +L54 +R2 +L63 +L97 +R32 +L43 +L95 +R46 +R428 +R36 +R29 +R76 +R41 +R45 +L42 +L49 +L71 +R79 +L79 +R33 +L203 +L88 +L42 +L45 +R91 +R28 +L55 +R381 +L606 +R46 +R13 +R47 +R81 +L58 +R892 +R54 +R31 +L7 +R880 +L31 +L67 +R25 +L15 +L46 +L51 +L31 +R76 +R938 +R84 +L26 +L29 +L775 +L892 +L40 +R34 +R73 +L978 +L222 +R99 +L99 +L862 +R32 +L70 +L80 +R65 +R15 +R869 +R853 +L84 +L552 +L104 +R18 +R93 +R7 +L68 +L32 +L13 +R70 +L1 +R806 +R37 +L35 +L44 +R50 +R449 +R81 +L57 +L73 +R30 +R99 +R802 +R550 +R49 +L49 +R309 +L60 +L28 +R928 +R26 +L40 +R14 +L46 +R722 +R24 +L93 +R85 +L904 +L72 +L916 +R36 +R1 +R77 +L7 +R93 +R84 +R16 +L33 +L86 +R52 +R867 +L585 +L441 +L74 +R53 +R47 +L520 +L87 +L92 +L47 +R80 +L48 +L986 +L76 +L24 +R453 +R66 +L19 +R18 +L18 +L33 +R78 +R235 +L97 +L983 +R801 +L601 +L35 +L23 +R12 +R746 +L73 +R73 +L82 +L65 +L53 +L46 +L655 +L9 +L90 +R2 +R698 +L40 +L63 +L228 +R31 +L99 +L1 +R811 +R2 +R35 +R52 +R39 +L33 +R27 +R2 +R968 +L98 +L14 +L21 +R20 +R537 +L83 +R369 +R59 +R135 +L211 +L96 +R63 +R3 +R634 +R38 +R64 +R80 +R708 +R34 +L23 +R952 +L53 +L86 +L67 +R53 +R9 +L9 +L65 +R8 +L434 +L9 +L373 +L294 +L96 +L30 +R93 +R76 +R734 +R90 +L25 +L961 +L81 +L33 +R52 +L852 +L2 +R2 +L826 +L74 +R5 +R660 +R35 +L27 +L73 +R40 +R11 +L51 +R930 +R599 +R637 +R733 +R101 +L97 +R97 +R22 +L87 +L35 +R43 +R14 +R13 +R68 +R46 +R235 +L19 +R64 +R36 +R559 +L32 +R65 +R637 +L5 +R32 +R44 +L74 +L158 +R32 +R64 +L94 +R60 +L69 +R40 +R39 +L82 +R42 +L84 +R84 +L597 +R20 +L68 +L55 +R83 +L83 +L60 +R60 +R52 +L30 +L94 +R37 +L98 +R33 +R47 +L49 +R1 +L799 +L3 +R732 +L24 +R74 +L958 +R64 +R15 +R64 +R36 +L21 +L997 +R21 +R79 +L92 +R5 +R73 +L79 +L37 +R40 +R454 +L46 +L58 +L61 +L81 +L74 +L91 +L35 +R430 +R70 +L59 +R27 +R932 +L670 +R70 +L71 +L48 +L3 +R22 +R73 +L73 +R887 +L28 +R41 +R11 +L911 +R60 +L476 +R415 +R8 +R96 +L95 +L82 +R374 +R86 +R14 +L6 +L23 +R707 +R333 +R61 +R828 +R17 +L17 +L35 +L39 +L826 +R9 +L9 +L52 +L54 +R98 +R8 +R30 +L60 +L69 +R99 +L65 +L391 +R56 +L618 +R143 +L95 +L96 +R66 +R48 +R52 +R171 +R52 +L17 +L52 +L54 +L13 +L48 +R53 +L117 +R25 +L689 +L11 +L17 +R17 +R3 +L36 +L42 +L48 +R23 +R2 +R98 +R30 +R12 +L942 +L5 +R29 +R76 +L31 +L369 +R10 +R90 +L558 +L42 +R3 +R97 +R858 +L58 +L77 +R84 +R95 +L13 +L89 +L93 +R37 +L521 +R27 +L24 +R2 +R58 +R92 +L78 +L63 +R963 +L985 +L88 +R73 +R96 +L186 +R48 +R45 +R89 +R19 +R89 +L18 +R691 +R27 +L40 +R40 +R12 +R49 +R39 +R30 +L30 +R39 +L98 +R59 +R89 +L89 +R1 +R22 +L23 +R676 +R24 +L55 +R23 +R92 +L360 +L18 +L82 +L89 +R89 +L49 +L51 +R36 +L73 +L63 +L14 +L81 +L986 +L37 +L82 +R44 +L467 +L304 +R69 +L42 +L109 +L3 +R412 +R514 +L14 +L7 +L78 +L15 +L87 +R33 +L56 +R75 +R443 +L42 +L866 +L278 +L22 +R94 +R9 +R94 +L97 +R23 +L823 +R20 +L20 +L85 +R5 +L25 +R768 +L63 +L50 +R5 +R103 +R576 +R8 +L40 +L67 +R55 +R316 +R84 +R10 +L80 +L20 +L29 +R726 +L87 +L110 +L6 +L94 +R45 +R855 +L71 +L62 +L67 +R21 +R79 +L60 +R60 +R196 +L20 +L47 +R25 +R46 +L9 +L503 +L90 +L98 +L455 +L84 +R839 +L56 +R14 +L45 +L14 +L36 +L83 +L80 +L53 +R53 +R247 +R53 +L771 +L80 +R101 +L50 +R62 +R53 +R396 +R58 +R35 +L80 +R285 +R860 +R31 +R38 +L38 +R81 +L81 +L14 +L886 +R13 +L13 +R32 +R68 +R59 +L89 +L31 +L597 +R33 +R78 +R47 +R59 +L90 +R731 +R69 +L169 +L23 +R10 +L98 +L369 +R55 +R57 +R68 +L41 +R28 +L87 +R63 +L19 +R69 +R87 +L80 +L72 +L48 +L47 +R20 +L73 +L956 +R6 +R32 +R156 +R62 +L12 +R20 +R8 +L182 +L74 +L860 +R40 +L40 +L92 +L18 +L90 +R79 +L79 +R41 +R62 +R324 +R401 +R572 +L51 +L571 +L90 +R12 +R37 +L50 +R2 +L28 +L61 +L74 +L726 +L94 +L7 +L99 +R42 +L80 +R11 +L73 +R11 +R2 +L13 +L305 +R95 +L28 +R22 +R5 +R66 +L55 +R95 +R5 +L66 +L34 +R553 +L24 +L29 +L85 +L1 +R23 +R63 +R41 +L91 +L485 +L96 +L169 +R88 +R69 +L57 +R22 +L7 +L15 +L37 +R5 +R39 +R7 +R86 +L81 +L81 +L238 +R9 +L17 +L58 +R15 +R51 +R26 +L26 +R86 +R514 +R74 +L130 +L99 +R255 +L79 +L21 +L16 +L30 +R39 +L87 +R94 +R13 +R68 +L81 +L80 +R9 +R971 +R63 +L99 +R79 +L43 +R32 +L32 +L77 +R58 +R19 +R899 +R41 +R67 +R8 +L15 +L89 +R689 +L421 +R702 +R19 +L41 +R41 +R55 +R317 +L67 +L45 +L58 +R798 +L41 +L15 +L97 +L84 +L27 +L81 +L55 +R32 +L32 +L515 +L46 +R61 +L80 +L32 +R812 +R4 +R239 +L43 +L30 +L70 +R2 +R98 +L568 +R57 +R11 +L62 +L98 +R60 +L72 +R72 +R959 +R54 +L15 +R965 +L54 +L909 +L4 +R612 +R5 +L13 +L31 +L57 +L54 +R60 +R11 +R63 +R1 +R11 +R15 +R322 +L96 +R18 +R19 +R28 +L10 +R70 +L70 +R18 +L86 +R594 +L73 +R747 +R494 +L434 +R40 +L69 +R94 +L67 +L76 +L82 +R434 +L273 +L383 +R30 +R37 +L84 +R2 +L763 +L839 +L92 +L69 +R99 +L18 +L81 +R16 +L16 +R55 +L455 +R56 +L42 +R86 +L48 +R29 +R84 +R35 +L36 +R731 +R437 +R56 +L789 +L29 +L81 +R45 +R4 +R5 +R31 +R26 +R95 +R5 +R823 +L48 +R65 +L55 +L672 +L13 +R52 +L52 +R54 +L60 +L955 +L339 +R12 +L12 +L94 +L6 +L294 +L706 +L42 +R523 +L845 +R16 +R437 +L89 +R36 +L56 +L80 +R46 +L643 +R76 +L971 +R775 +R17 +R57 +L57 +R65 +L65 +L62 +L89 +L49 +L81 +L19 +R605 +L58 +R53 +L31 +L52 +L17 +R44 +L368 +L528 +L48 +L92 +R87 +R25 +R96 +L16 +R282 +R18 +L330 +R730 +R45 +R42 +R65 +L95 +R32 +R56 +L245 +L32 +L44 +L520 +R4 +R401 +R691 +L37 +L29 +R750 +L92 +R8 +L53 +L29 +R82 +R80 +R95 +L920 +R412 +L267 +L4 +R440 +L36 +L90 +R90 +R502 +R98 +L45 +R45 +L7 +L495 +R11 +L3 +L6 +L51 +R51 +L2 +L898 +L61 +L86 +R298 +R392 +L55 +R12 +R80 +R920 +R88 +L864 +L91 +R37 +L25 +R55 +L92 +R5 +R31 +R81 +L23 +R698 +L75 +R312 +L14 +R777 +R61 +L61 +L51 +R53 +L269 +R67 +R73 +R27 +R8 +L508 +L473 +R82 +L90 +R217 +R88 +R76 +R857 +R97 +R8 +L462 +R67 +L808 +L950 +R55 +R42 +L58 +L91 +R96 +R947 +L40 +R340 +L74 +R571 +L82 +L793 +R90 +L12 +L5 +L97 +L316 +L82 +L75 +R152 +L13 +L64 +L14 +L86 +L796 +R27 +R69 +R36 +R352 +R12 +L167 +L13 +L20 +L68 +R82 +R45 +L41 +L18 +L47 +L446 +L54 +L91 +R333 +L95 +L22 +R22 +L74 +R38 +L20 +L39 +R85 +L76 +R74 +L82 +L6 +R36 +R64 +L27 +R27 +L86 +R86 +L40 +L20 +L86 +L65 +R28 +L12 +L573 +R529 +R39 +L10 +R19 +R491 +L169 +R888 +L5 +L37 +L65 +L5 +L107 +L3 +R97 +R36 +R95 +L178 +R56 +R291 +R98 +R8 +R83 +R371 +R69 +L72 +R649 +R76 +R25 +L1 +L20 +L65 +R16 +R27 +L58 +R246 +L46 +L75 +L82 +L43 +R439 +R61 +R46 +R52 +R21 +L29 +R10 +L51 +R691 +R60 +L840 +L85 +L75 +R95 +R63 +L80 +L56 +L22 +R668 +R212 +L62 +R82 +R24 +L124 +R17 +R15 +R68 +L30 +R306 +R24 +R56 +L11 +L913 +L32 +L721 +L79 +L53 +L47 +R39 +R82 +L476 +R134 +L79 +L9 +R9 +R89 +R11 +L71 +L29 +L35 +R93 +L931 +R78 +R18 +L23 +L51 +L81 +R7 +R291 +R68 +L934 +R52 +R48 +L50 +R50 +R77 +L77 +R503 +R97 +R21 +L21 +R39 +L83 +L202 +R13 +R933 +R145 +L545 +L13 +R90 +R93 +R95 +R735 +L327 +L73 +L44 +L656 +R40 +R60 +L6 +L94 +R15 +L15 +R4 +L4 +R60 +L52 +L408 +L75 +L21 +R685 +R95 +L608 +R89 +R35 +L55 +R89 +L94 +L740 +R50 +R11 +R96 +R85 +L42 +R6 +L6 +R370 +L770 +R558 +R211 +R69 +L238 +L84 +L258 +L42 +L962 +L48 +L36 +R589 +R41 +R16 +R84 +R38 +L38 +R70 +R81 +R149 +L94 +L6 +R741 +R36 +L64 +L20 +L693 +L140 +L89 +R29 +L211 +R11 +L13 +L49 +L938 +L62 +R62 +R71 +R21 +L258 +R66 +L9 +L76 +L38 +R46 +R97 +R11 +R648 +L66 +R95 +R92 +R563 +L87 +L59 +L4 +R87 +R77 +R23 +L885 +R57 +R5 +R11 +R267 +R22 +L77 +R27 +L25 +R498 +L74 +L16 +L10 +L712 +L979 +L64 +L45 +R95 +R205 +R394 +R295 +L46 +L43 +L83 +R159 +R95 +L897 +R963 +L37 +R10 +R890 +R733 +L54 +L479 +R49 +L79 +R799 +R931 +R269 +R587 +L38 +R82 +R64 +L30 +R66 +L94 +R35 +R721 +R38 +L47 +R47 +R80 +L709 +L15 +R84 +L55 +R215 +R26 +R95 +L57 +L97 +R20 +R76 +R72 +R65 +L372 +R795 +R77 +R78 +L78 +R34 +R66 +R81 +L66 +L65 +R50 +R34 +R932 +R234 +L35 +R295 +R85 +L7 +L938 +R809 +L34 +L41 +L34 +R17 +R47 +L64 +R54 +L17 +R60 +R27 +L24 +R57 +R10 +L31 +L36 +R96 +R738 +L10 +R326 +R553 +L67 +L65 +L76 +L95 +R82 +R18 +L78 +R732 +R884 +L68 +R9 +R20 +R88 +R94 +R14 +R5 +R11 +R89 +R926 +L58 +L68 +L831 +R23 +R91 +R30 +L48 +R90 +R13 +L68 +L95 +L14 +R54 +L45 +L75 +L990 +R694 +L29 +L570 +L77 +L76 +L66 +L911 +R286 +R14 +L54 +R6 +L6 +L78 +L235 +R67 +R579 +L79 +R713 +R534 +L67 +L66 +L23 +R263 +L25 +L67 +R428 +L18 +R35 +L75 +R59 +L2 +R82 +L71 +L31 +R7 +R527 +R797 +L31 +R86 +L91 +L86 +R88 +R34 +R839 +R81 +L47 +L35 +R60 +R2 +R694 +R81 +R25 +L44 +R342 +L546 +L98 +L54 +L2 +L98 +R944 +R56 +L24 +R71 +L47 +L65 +R53 +L84 +R52 +R79 +L726 +L62 +R753 +L42 +R94 +L3 +L49 +R66 +L370 +R4 +R49 +R18 +R10 +L177 +R878 +L78 +L804 +R88 +L62 +R78 +L519 +R19 +R97 +R69 +L91 +R16 +R45 +L36 +R61 +R18 +L79 +L7 +R58 +L54 +L731 +L266 +L15 +L59 +L57 +L782 +R13 +R38 +L614 +R51 +R25 +L44 +L256 +L72 +R4 +R64 +L547 +L40 +R692 +L1 +R915 +L6 +R61 +R85 +R43 +R679 +R9 +R19 +R95 +L94 +L38 +L68 +R41 +L41 +R16 +R43 +R12 +L331 +L87 +R47 +L69 +L84 +L47 +L40 +L60 +R63 +L19 +L44 +R61 +L108 +R47 +R95 +L95 +R432 +R71 +R53 +R86 +L418 +L24 +R39 +L531 +L8 +L452 +R32 +R45 +L58 +L43 +L77 +L47 +L95 +L306 +L99 +R85 +R15 +L26 +R726 +R81 +L81 +R64 +R92 +R30 +R2 +R412 +R51 +R28 +L79 +L42 +R27 +L21 +L51 +L13 +R415 +L5 +L76 +L13 +R60 +L81 +R99 +L99 +R4 +L804 +R715 +L52 +L63 +R80 +L98 +L82 +L6 +R56 +R650 +L46 +L54 +R40 +R60 +L8 +R8 +R176 +R45 +L18 +L3 +L67 +R73 +L49 +L9 +R52 +R74 +R431 +R95 +L30 +R738 +R92 +L17 +R17 +L46 +R204 +R46 +R96 +L5 +L131 +R32 +L96 +L66 +L634 +L39 +R639 +L92 +L15 +L93 +L5 +R6 +R35 +L36 +R804 +L18 +L48 +L7 +R83 +R569 +L35 +L48 +L125 +L67 +R92 +R98 +L98 +L15 +L753 +L30 +R747 +L21 +R57 +L635 +R747 +R3 +R17 +R79 +L45 +R53 +L4 +R49 +R89 +L38 +L26 +R876 +L337 +R71 +L23 +R37 +L398 +R9 +R70 +L11 +L12 +R42 +R2 +L56 +R48 +L37 +L55 +L68 +R32 +L64 +R91 +R13 +R51 +R76 +L17 +L69 +L45 +R72 +L73 +L13 +L72 +L55 +L16 +L10 +L32 +L62 +R61 +R39 +R52 +R79 +L48 +L61 +L96 +R57 +R19 +R79 +R45 +R35 +R15 +R85 +R1 +R64 +L65 +L51 +L76 +L17 +R44 +R4 +R15 +L30 +R32 +L48 +L43 +L19 +R27 +R15 +R2 +R22 +L23 +R11 +R34 +R50 +L30 +R34 +R36 +R7 +R27 +L34 +L10 +L48 +L48 +L27 +R21 +R2 +L49 +L24 +R49 +L15 +L44 +L41 +R43 +L20 +L47 +R20 +R7 +R11 +R1 +L44 +R2 +L31 +R7 +R21 +R7 +R23 +R6 +L8 +L14 +L47 diff --git a/2025/Makefile b/2025/Makefile new file mode 100644 index 0000000..0de7060 --- /dev/null +++ b/2025/Makefile @@ -0,0 +1,15 @@ +CXX := clang++ +CXXFLAGS := -std=c++17 -Wall -Wextra -I. + +TARGET := aoc +SRC := aoc.cpp + +all: $(TARGET) + +$(TARGET): $(SRC) + $(CXX) $(CXXFLAGS) $(SRC) -o $(TARGET) + +clean: + rm -f $(TARGET) + +.PHONY: all clean diff --git a/2025/aoc b/2025/aoc new file mode 100755 index 0000000000000000000000000000000000000000..8b02657f7efc19f081059c954b34c0e0c8e1b123 GIT binary patch literal 197280 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 fUwZg0IgelJ-1OA>vp3bxuUl~aHD|a^d;k9dcI +#include + +#include "aoc.hpp" +#include "day1.hpp" + +int main(int argc, char** argv) +{ + std::cout << "Advent of Code 2025 runner" << std::endl; + std::cout << "©Ben Kyd 2025, All Rights Reserved" << std::endl; + + // Very shit command-line parsing :tm: + int run_day = 0; + std::filesystem::path base = "./"; + + for (int i = 1; i < argc; ++i) + { + std::string arg = argv[i]; + + // Day flag + if (arg == "-d") + { + if (i + 1 >= argc) + { + std::cerr << "Error: -d requires a day number\n"; + return 1; + } + ++i; + run_day = std::atoi(argv[i]); + std::cout << "Selected day to run: " << run_day << "\n"; + } + + // Path flag + if (arg == "-p" || arg == "--path") + { + if (i + 1 >= argc) + { + std::cerr << "Error: " << arg << " requires a path\n"; + return 1; + } + ++i; + base /= argv[i]; + std::cout << "Selected base path: " << base.string() << "\n"; + } + + // Help flag + if (arg == "help" || arg == "--help" || arg == "-h") + { + std::cout << "\nUsage:\n" + << " -d [day] Run a specific day\n" + << " -p [path] Set a base path for input\n" + << " help Show this help message\n" + << " (no args) Run all days\n"; + return 0; + } + + // Unknown argument + if (arg != "-d" && arg != "-p" && arg != "--path" && + arg != "help" && arg != "--help" && arg != "-h") + { + std::cerr << "Unknown argument: " << arg << "\n" + << "Use 'help' for usage information.\n"; + return 1; + } + } + // + // Run days + if (run_day == 0) + { + for (auto& [num, day] : GetRegisteredDays()) + { + std::cout << "Running Day " << num << ":\n"; + + std::string filename = std::to_string(num) + ".txt"; + std::filesystem::path path = base / filename; + + std::cout << "Reading " << path << "..." << std::endl; + File file{path}; + File file1{path}; + + int partOne = day->PartOne(file); + int partTwo = day->PartTwo(file1); + + std::cout << "Part 1: " << partOne << "\n"; + std::cout << "Part 2: " << partTwo << "\n"; + } + } else + { + for (auto& [num, day] : GetRegisteredDays(run_day)) + { + std::cout << "Running only Day " << num << ":\n"; + + std::string filename = std::to_string(num) + ".txt"; + std::filesystem::path path = base / filename; + + std::cout << "Reading " << path << "..." << std::endl; + File file{path}; + File file1{path}; + + auto start = std::chrono::high_resolution_clock::now(); + + int partOne = day->PartOne(file); + + auto endpart1 = std::chrono::high_resolution_clock::now(); + auto startpart2 = std::chrono::high_resolution_clock::now(); + + int partTwo = day->PartTwo(file1); + + auto end = std::chrono::high_resolution_clock::now(); + + std::cout << "Part 1: " << partOne << " - took " << std::chrono::duration(endpart1 - start).count() << "ms" << std::endl; + std::cout << "Part 2: " << partTwo << " - took " << std::chrono::duration(end - startpart2).count() << "ms" << std::endl; + std::cout << "Day " << run_day << " ran in " << std::chrono::duration(end - start).count() << "ms" << std::endl; + } + } + +} + diff --git a/2025/aoc.hpp b/2025/aoc.hpp new file mode 100644 index 0000000..eca63d2 --- /dev/null +++ b/2025/aoc.hpp @@ -0,0 +1,221 @@ +#pragma once + +#include +#include +#include +#include +#include + +struct FileFragment +{ + int Line, Col; + std::string Data; +}; + +class File +{ +public: + File() = default; + + explicit File(const std::filesystem::path& path) + { + Load(path); + } + + void Load(const std::filesystem::path& path) + { + if (!std::filesystem::exists(path)) + { + throw std::runtime_error("File " + path.string() + " does not exist"); + } + + std::ifstream file(path.string()); + if (!file.is_open()) + { + throw std::runtime_error("Failed to open file " + path.string()); + } + + _lines.clear(); + std::string line; + while (std::getline(file, line)) + { + _lines.push_back(line); + } + } + + /// Split each line by a multi-character delimiter + void SplitBy(const std::string& delim) + { + _tokens.clear(); + + for (size_t lineIndex = 0; lineIndex < _lines.size(); ++lineIndex) + { + const auto& line = _lines[lineIndex]; + std::vector lineTokens; + + size_t start = 0; + int colIndex = 0; + + while (true) { + size_t pos = line.find(delim, start); + if (pos == std::string::npos) + { + lineTokens.push_back({ + static_cast(lineIndex + 1), + colIndex, + line.substr(start) + }); + break; + } + + lineTokens.push_back({ + static_cast(lineIndex + 1), + colIndex, + line.substr(start, pos - start) + }); + + start = pos + delim.size(); + ++colIndex; + } + + _tokens.push_back(std::move(lineTokens)); + } + } + + void SplitByIndex(const int index) + { + _tokens.clear(); + _tokens.reserve(_lines.size()); + + for (size_t lineIndex = 0; lineIndex < _lines.size(); ++lineIndex) + { + const auto& line = _lines[lineIndex]; + std::vector lineTokens; + + // Bounds check + if (index < 0 || static_cast(index) >= line.size()) + { + // Just return whole line as single token if index is out of range + lineTokens.push_back({ + static_cast(lineIndex + 1), + 0, + line + }); + } + else + { + // Left part (may be empty, e.g. index = 0) + lineTokens.push_back({ + static_cast(lineIndex + 1), + 0, + line.substr(0, index) + }); + + // Right part (may be empty) + lineTokens.push_back({ + static_cast(lineIndex + 1), + 1, + line.substr(index) + }); + } + + _tokens.push_back(std::move(lineTokens)); + } + } + + /// Access tokens for a given line (1-based) + const std::vector& TokensForLine(int line) const + { + if (line < 0 || line > static_cast(_tokens.size())) + { + static const std::vector empty; + return empty; + } + return _tokens[line]; + } + + // 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 size, size_t stride) + { + const auto& v = _tokens[line]; + std::vector> chunks; + + 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(); } + + /// Access raw lines (before splitting) + const std::vector& Lines() const { return _lines; } + +private: + std::vector _lines; + std::vector> _tokens; // [line][token] +}; + +class AOCDay +{ + public: + // The "driver" will expect the Name + // to have the same string as the input + // return 1 -> 1.txt + virtual int Day() = 0; + + virtual int PartOne(File&) = 0; + virtual int PartTwo(File&) = 0; +}; + +inline std::unordered_map& GetRegisteredDays(int day = 0) +{ + static std::unordered_map days; + + if (day != 0) + { + static std::unordered_map single; + single.clear(); + auto it = days.find(day); + if (it != days.end()) + single[day] = it->second; + else + std::cerr << "Warning: requested day " << day << " not found.\n"; + return single; + } + + return days; +} + +template +struct AOCDayRegistrar +{ + AOCDayRegistrar() + { + auto* instance = new T(); + int day = instance->Day(); + + auto& days = GetRegisteredDays(); + if (days.count(day)) + { + std::cerr << "Duplicate registration for day " << day << "\n"; + delete instance; + return; + } + + days[day] = instance; + } +}; + +#define ADD_AOC_DAY(DAYCLASS) \ + static AOCDayRegistrar DAYCLASS##_registrar_instance; diff --git a/2025/day1.hpp b/2025/day1.hpp new file mode 100644 index 0000000..f426b2b --- /dev/null +++ b/2025/day1.hpp @@ -0,0 +1,74 @@ +#include "aoc.hpp" + +#include +#include + +class Day01 : public AOCDay +{ +public: + Day01() {} + ~Day01() {} + int Day() override {return 1;} + + int dial = 50; + void RotateDial(int diff) + { + dial = (dial + diff) % 100; + if (dial < 0) dial += 100; + } + + int PartOne(File& f) override + { + f.SplitByIndex(1); + + dial = 50; + int res = 0; + for (const auto& lineTokens : f) + { + char direction = (char)lineTokens[0].Data[0]; + int amount = std::stoi(lineTokens[1].Data); + + if (direction == 'L') + { + amount = -amount; + } + + RotateDial(amount); + + if (dial == 0) res++; + } + + return res; + } + + int PartTwo(File& f) override + { + f.SplitByIndex(1); + + dial = 50; + int res = 0; + for (const auto& lineTokens : f) + { + char direction = (char)lineTokens[0].Data[0]; + int amount = std::stoi(lineTokens[1].Data); + + int dir = 1; + if (direction == 'L') + { + dir = -1; + } + + while (amount > 0) + { + RotateDial(dir); + if (dial == 0) res++; + amount--; + } + } + + return res; + } +}; + +ADD_AOC_DAY(Day01); +