From 526bf8ad7d14c012157e5e74460231b72d1cf9f1 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 3 Dec 2024 00:52:43 -0500 Subject: [PATCH] init day3 --- 2024/input/3.txt | 6 ++++++ 2024/src/core.clj | 9 ++++++++- 2024/src/day03.clj | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 2024/input/3.txt create mode 100644 2024/src/day03.clj diff --git a/2024/input/3.txt b/2024/input/3.txt new file mode 100644 index 0000000..0c8d210 --- /dev/null +++ b/2024/input/3.txt @@ -0,0 +1,6 @@ +[from()$&from()#mul(417,968),@how()'#mul(573,792)@+where():?[*;from(389,420)mul(605,462)why()[~*-{[#select()@mul(308,194)!'#*;&mul(895,408)?<, [(where()]]mul(909,700)?{>{where()mul(757,941)-why()!,*'why()mul(541,157);&don't()'who()&what(882,529) '@)mul(627,86)where()~;how()mul(381,553)mul(973,36)?what()mul(123,588);@mul(21,532)@$/@!}(mul(33,654)select()mul(188,39):-}select(44,36)<{>mul(847,977)!why() :>(/]mul(686,398)'}:[select()^select()?who()who()don't()[:mul(565,649)who()who()[mul(221,665)who()>mul(374,813)(&)from(424,292):{!;%how()mul(676,615)]from(696,308)-from()from()don't()&!where()@who()>{when()>mul(859,72)*/why()mul(754,241):>mul(876,459)?] mul(510,268)when()#%,don't()why()#}>@:from()from()mul(763,5)~why()mul(138,433)>why()@where(){:what()mul(641,49)why()from()'what()@[mul(198,775){+&: :select()where()?when()mul(480,462)*select()who(),what()% ?[mul(416,986)@,mul(961,801)from()%^;how()[~@&?[do()(select()how()],)<{'mul(598,617)why()^mul(524,890)who()mul(906,323)how();#*mul(598,235),how()why()mul(182,842)@/!}from()},*@mul(870,516)/mul(715,150)@ why()from()}from()!mul(988,143)mul(473,645):why()+]mul(345,813)%,!why()}~~+do()where()&/select()##when()how()mul(443,642)'}>;@'don't()--}&mul(513,893)+*what(859,928)^~mul(490,172),/&-/;<)$where()mul(358,739)~+%where() {from()~,$mul(548,143)^[why()how()mul(27,454) },mul(232,484)why()'' from()where(){?]~mul(702,305!(why()[$^*]+how()mul(441,327)mul(439,264):why()why()mul(17,879)@mul(607,176)+( mul(563,929) -mul(589,618)?what()]mul(980,140)who())/from()mul(812,778)-[ :where()mul(166,911)'*?who()@when(661,665),mul(722,191)-)when() !&]select()when()do()why(910,407)(]what()mul(362,411)}>* @^mul(126,232)&mul(84,996)how();)&,mul(603,235)select()mul(897,935)select()from()^>why()who(540,823)what(293,683)how()how()from()mul(983,655)'{]!<(do()-from()(%$when(115,963)~mul(943,432))#>mul(406,538)/&]!+]'mul(656,848)mul(111,553))&!#from()$@+mul(587,772),mul(988,8)}[@mul(481,867)*how();-who(),!*mul?(;mul(847,886)select()->who()what()where()^(+:mul(602,788)*why()[who()&&mul(743,840)&(*>who())! {-mul(79,831)!-&what(362,84)where(426,894)don't()who()@;mul(289,202)how()do()@why()-&how()[%;(%mul(412,482)<(mul(130,181)select()when(554,864)when()~mul(928,736)where(48,283),/[;?do()^*:mul(895,966)from()where()<#]where(){mul(703,735)??#how(236,74)how()}>how()where(612,279)~mul(174,164)>,!{(where()^$why(),mul(758,914)+select())where()&mul(58,270)@;when(72,904)&$?mul(254,430)'}where()what()[;mul(936,208)when()'mul(437,732):don't()what()who()who()-&[,(*$mul(832,760)when()where(){(where()~}don't()){[mul(190,956)}from()#*]who()mul(53,684)*mul(877,199)+why()-:?mul(89,715-mul(561,55)(*)from()select()select()+mul(221,427)?'+#from(536,759)mul(800,868)';? why(),mul(702,706)mul(214,265)[!%~)how()^?when():mul(293,226)}*;from()!%*-how()why()don't()where()!@]select()from(785,361)/*!when(13,58)mul(861,234)~mul(783,45-mul(438,78)^@#what()[-mul(616,544)where()when()^>$select()where(),who()~mul(134,827)~;*>})!mul(815,435)?:how()what() +mul(61,155)where()^@;}mul(363,973)why(241,333)@*where())mul(440,61),++how(614,777)what()^~->don't()::mul(860,925))what()}select()^'>):'do()why(810,282)%~)]%(from()}mul(275,595)(mul(577,988)(!why(),select()'{mul(166,388)select()mul(999,24[why()-#*mul(130,797)~+{/*mul(767,233)$when()?+select()mul(923,65)how()mul(901,932)[;^~>mul(124,672)[:'!;;why()!mul(676,697)+{~'&$, }mul(251,202){+~,)from())from(506,658)]mul(139,157)/ from()[:from()what()(why()mul(276,947),}*mul(604,619):@>@what()mul?mul(181,881)'*mul(581,646)/*}when()>how()+mul(358,299)^what():&mul(643,202how()?]who()#}{?{,(/]mul(647,517)mul& @@$&what()why()don't()+select() where()select(275,403)*$when()+what()mul(842,582)mul(585,232)what()from()+&how()+how()}&*mul(519,314)how()]+*:mul(667,675)mul(601,526)select():;@from()do()][[-mul(500,597)^,mul(554,855)how()#{:{(<>mul(878,228)~[%-+[^how(781,701)?mul(796,539)~who()+,from()'/mul(504,377),@+{don't()mul(327,427)*)*mul(376,289);what(),why()/(mul(515,43)~:+who()>mul(936,740)&>++'mul(353,140)&^where()*%from()from()don't()#+*where()/mul(248when()*from()#- when()select()mul(934,836):mul(309,385)when()~/'-where()mul(674,43)>~select()how()$:%@,*mul(717,710)$[?} ~(what()[mul(751'?,[;[where();#who()]mul(128,526)< ?why()@>+&+}mul(891,853)![from()^}+@-when()!mul(714,846)}$where()-(/mul(181,843)don't(),>what()@select()#}mul(60,942){$when() <^mul(28,497)#'mul(21,845)'?^mul(742,887)do()mul(382,465)(}when()(mul(897,277)@{;%where()~~(*mul(563,465)!mul}/mul(388,102)>#::when(),select()who() ;mul(11,454)~^mul(436,504)$,>%{;/from()mul(543,776)select()do()$mul(299,377)from():@%who(){#*-where()mul(50,152))^how()#/>why()mul(964,916)>;(-(}mul(536,350);mul(889,495;select()(>where();?~,?mul(616,891)?]when(){( when(),+why()mul(331,911^:'mul(499,73)+{%) {who() ][don't()who()mul(857,327)$#mul(876,836)?!(/what()how()mul(350,344)when()[/]when()?what()@mul(280,353)<;select()@$why()how()mul(78,380)[~;;:from()(mul(746,710where()[mul(681,66)who())}why()#:how())'@mul(364,771)'!>from()when()select()+%&when()mul(670,495) +&>+mul(341,683)how()+!):mul(332,528);/ :^~{when(){-mul(633,994)what()select()@]{from(){* }mul(860,548){@]~[how()don't()?from()where()^mul(347,567)@[/<,where())%who(886,454)mul(247,283)~< mul(574,729)'/%{( &how(214,925)}(mul(709,340)] from()&from()what()~mul(287,142){when()'how()why()@select()mul(282,401)+>^(%<+ #don't()&''~mul(308,617who()? $%@mul(451,53)^ ^/,%what()don't()what(){'why()-]!%mul(915,199)&'why()%where()^~ >mul(765,859)}-/+,why()mul(821,185){}from()select()who()where()*'*/mul(534^who()when()$}what()mul(275,393):[-:?!#mul(131,783)?,)!mul(350,938);&{:]mul(965,34)from()who(595,453)&from()where()where():select():do()*mul(676,87))?mul(905,348)why(718,352)%>where()who()mul(276,997)/}>>from()$don't()%$<]where(951,222)@mul(515,525)'> mul(490,120)?mul(813,587)&!$;}#{mul(400,566)}^, >mul(760,893)/$@select()what()%}}mul(673,893)#what()*~']{](mul(307,563)don't()select()mul(719,637);[what()]]:,mul(446,595)!];}$-)*don't()*~({$;mul(41,963)@(>?'~mul(116,816)+?how()mul(262,516)+/?>:^select()mul(73,247)#<-mul(144,855)*don't()$+**from(864,32)-[mul(585,948):-what() where()mul(102,617)&-why(){who()mul+%! +-]#mul(211,622)]'}mul(109'why()mul(121,558),who()mul(880,303)[mul(630,326):-*what()[mul(398,512)from()?how()who()from()where(250,432)where()what()who()mul(325,525)who(854,542)what():%[why()>>~mul(497,254)why()[''select()mul(17,313)$-,(!mul(442,149)^+when(){mul(75,151)who()from()mul(436,893)>/'do():+@when()$mul(297,419)!* mul(659,745)[what(662,767)(mul(840,744)&@^+when()mul(662,186)^$>don't()(how();%select(711,769)({*mul(758,906)'mul(574,852)>*mul#mul(835,592)why()do()from()mul(709,433)mul(297,773}]@*<#mul(23,184)+;}@*+select()*]from()mul(387,325)why()@ who()*mul(141,91)where()$mul(600,30)mul(445,898)select()from()<:why(){[where()*)mul(303,758)mul(184,650)* why(407,142)#where(73,355)mul(318,19{'[!mul(977,29)why()*[mul(189,449)@where(),why()mul(650,466)~ &@where()who()&#~mul(831'*how()/mul(858,782)why() ?mul<<&'&when()mul(522,337)~mul(879,132)how()mul(363,565)^- )}/!mul(447,64)from()don't()?from()>}(]how()where()*mul(607,173))-)who():{why()$mul(793,899)[[#[?mul(830,619)where()&@mul(147,296)#mul(924,363)!why()}+!-*{who(845,132)mul(108,5)what();%?mul(66,552)[*%:^mul(815,240)why()&&}$]?>mul(273,439)>from()what();:@select()!%>mul(98,451)do()mul(780,696),mul(248,960)mul(218,582)mul(780,166)>!where(),when()mul(658,763)+[-why()!what()do()-{{(-mul(567,864)how()( %select()>mul(486,535)$why()[mul(837,3)~how()do()mul(579,157)-;: how(389,705)mul(139,24)$]/^mul(157,176)*don't()$mul(308,552)&&;mul(696,996)from()}~when()select()mul(520,748)}{//?how()from()mul(161,494)/#;who()who()#@{mul]}#>what();; mul(225,434) ;[select()^;,!where()mul(441,95)mul(958,361)mul(551,143)}-what()-mul;?[what()what()-)*>[*]mul(541,70)mul(130,582)/+?select()!when()mul(907,591) ')mul(970,793)-~/select()+mul(814,80)(who()@>)mul(490,652):mul(947,108)from()(mul(138,898)where()@,,mul(744,887)$~^,mulfrom()*how(76,868) *-mul(566,680)?why()~%)mul(807,227)~~@mul(409,204)?,*^mul(370,358)]why(),*$;/(mul(480,531)who()(,;when()@]*mul(686< mul(621,530)~:where()]$*}>mul(272,210)mul(437,151)?mul(155,665)[(*)?^mul(826,872):^mul(327,486)?mul(328,665)mul(269,443;@from()/-'mul(759,488)$,]!don't()#:>+} select()&mul(511,390)mul(831,124)!]why()[?mul(361from()'[who()[who())why()]>{mul(628,534)from()select()$,mul(128,673)!~+mul(921,371)what()when(69,457)])when(762,838)mul(487,613)when()why()>>when()}mul(936,340)^[ 'what()select(){what()mul(353,849)[}who()#~mul(253,500)<'( when()$~#mul(708;($]who()'$% mul(916,24)]#!!%}[mul(442,586)where()mul(341,23)%][}; *mul(80,790)mul(700,678)^}~#why()from()]don't()select()select()where()mul(505,405)mul(537,809)how()where()!from()(%^-mul(72,512):who();^from()don't():from()mul(386,882)[)-+>who()how()@mul(483,242)(>%don't()select()how()!mul(527,522)who(189,356)mul(273,705)[mul(966,494),{how(922,891)[mul(820,815)/%(*(! mul(185,66){~,@from()$<*mul(990,763)select()@ select(435,424)mul(739,600)mul(24,331){@,},]+mul(870,249);]??mul(304,894)[{;-mul(557when()why();)mul(214,766)@what()from()where()what()-mul(324,271)!] +@select()&>how()mul(726,478)where()*where():%!don't() mul(536,734)+how(),?!select(110,54)$#<%mul(442,666)mul(313,428)when()${~])who()mul(475,313)/mul(455,425)~why(124,596)?;+[/what()where()mul(751,209) +>;(#]who()mul(529?who()^where()who()-]*/]mul(791,985)>*?what()(%#-#mul(861,903)()*$why()]&]!how()mul(26,564)~)from(),what()>mul(155,783)when()do()} ~#-mul(785,695)}select(),[[from(268,893)^mul(447,496)/{}{mul(14]{mul(137,899): select()#when()mul(350,670)who()'when()when()where()mul(31,73) @/from()mul(158,414)#';who(622,830)why(377,630)@:<[where()mul(624,849)&;$how()@&why()}#+mul(467,869)~:!do(),}}}~{what()&+why()mul(155,247);>+select(526,264);;?:-mul(254,763)where()]who(){'-(mul(377,651)?when()mul(145,270)who();mul(133,206)from()'-<%when())mul(512,808)$mul(273,757))>where();-[mul(831,982)$where()]mul(236,609)mul(510,591)%?+mul(292,894)mul(803,938)~where()select()}mul(906,984when()(~/mul(824,338)^;:where()from()*from()mul(269,910)from(),;+@@:mul(920,254)do()~/(}[?when()%$'mul(189,383)~%@what(){where()<$#mul(891^'mul(150,940) select()/:,mul(399,482'<+!@+,mul(380,77)mul(296,582)^'*-^from()?mul(97,874)why(511,351))&[[why()how()mul(118,975)^@mul(347,398)~>((+'/;&mul(306,417)]~>who(){,when()},#mul(956,209)~!where()how()@#[mul(642,809)when()where()-:,#{from(483,371)why()/mul(440,291);}^^>$:}~mul(265,464)*()<: mul(678,605)select()what(310,329)when()&who()from()mul(238,246)~{when()!>!^~mul(657,258)&]what()<#when()who()mul(900,641)how()~mul(614,673)^*@mul(352,930)mul(770,784)+~'!%??!where()mul(857,380)mul(577,531)}where()$['do()when())$)$mul(356,308){*[!{@[]#mul(314,359][why()mul(156,155)]/-!:;what()mul(288,619#]%@/where()from(689,908),mul(126,354))'$%[mul(735,53)#mul(294:-!mul(402,75)#-where()~ )-mul(210,253)[~how()mul(958,838)-mul(245,191)mul(108,788)*/mul(163,448){'select()[']>:}mul/how()why()}mul(745,638)[-<[{+ $:@mul(297,475);%where(344,331)*~{mul(727,796)why()<~mul(103,623)@>[+}+--/)mul(84,259)when()(when()/who()^^select(){%select()mul(341,793)[ from()&:$mul-how(),#+))[<%mul(581,371)'mul(655,840^**[){[what()mul(468,123)?:who()-where()+/when()mul(746($;!;?[select()from()# do()@+]how()mul(205,112),>do()who())-)mul(884,944)mul(80,793):where()~how()({+~+mul(231,647)mul(274,104)~] ;*mul(651,92)-what()?[%how()from(){ 'do()![)'] mul(79,338)what()}?mul(103,696)from(839,939)why()how()[$when()mul(838,159)#,$*&[?-}'mul(373,50)-<@>;,&mul(777,267):![>?:*[who()'mul%@[what()mul(278,948)from()do()mul(920,800))mul(768,240)#[^mul(91,176)~mul(661,925when();! mul(352,766)where()!when()mul(665,531)+mul(587,882-!why()what()mul(444,391)how()}how()where()(where()~?do()@?what()>;mul(10,309)!when()don't()what(){)&(+when()+mul(135,277)*,%don't()what()select()!,$who()!when()mul(433,859)from()where()*from(),<;mul(142,752))what()&+ ${mul(386,918)mul(465,343)<]}]when()(mul(831,968)why()>)<;who(554,106)mul(849,779)#~$:)what()mul(417,109[*;>*>mul(842,356)}~ $/+mulfrom()~^;^~mul(193,353)how()mul(119,248)]mul(198,841)mul(12,753) ?'when()select()what(569,458)mul(131,926)select(){; )#mul(390,705){~don't(),where()why()~/'mul(439,659))select()*mul(712,720-/ /what()mul(216,581)@}<~mul(892,911)when()~:^?[(mul(745,224)+-where()%?+@$mul(559,946) ^$why(){~*@select(728,442)mul(926,402where(230,603)}how()where()mul(624,409)')mul(69,495)what()(!@/-[when()}how()mul(632,244)!what()from()!mul(671,546);mul(109,6)^>:;^when()what()don't()@~mul(265,748)*?how()& <(#!mul(267,519)what()?'when()mul(131,982)/ )-mul(489,494)$]how()>why()from(918,64){*!mul(236,108)%{:]>mul(643,166)when()'%when(461,924)mul(26,478)!)why();#'&+mul(944,785)~*why()[from()!(~where()mul(872,651);select()mul(612,497)/mul(367,560)[[)don't()why())*who()<;,,-mul(635,902)mul(842,116)*^<@>mul(517,582),#mul(557,23)how()when()mul(451,533)<) :,mul(371,893)^^why()who()/+?mul(430,891)what()^})mul(251,512)$)mul(147,724)@^mul(549,762)~mul(392,503)when()!,!;don't()mul(40,634)who()/what()%mul(408,460)]<%'do()-when(){from(){-{?mul(911,748)>{+$>$what(559,658)%')mul(78,496)when(){+mul(397,104)}({>mul(978,665);why()>{^where()}+)!mul(41,590)&what():where()+,{&&don't()mul(590,826)-//;! $mul(698,789){',how()>mul(10,911)what()+!*where()>&'why() mul(433,24): :[(why(),where()&>mul(822,914)?mul(630,134)where()$when()>;/@mul(769,706)@@mul(376,366))!]who() #how()?who()mul(42,846)why()mul(735,630)#)+mul(723,623):@mul(84,151)&+@<(why()mul(203,609);[!?why())why()!mul(738,448)where()}when()#where()mul(494,171)(]@do()-//?-<-*;-mul(794,918)##why()how()%why()# ?mul(224,299)mul(25,111)<-;^*select(712,763)what()!;where()mul(773,912)*;(do()@who()@&%{%mul(61,492){when()((&from()>?mul(850,877)^/mul(643,197),%how();mul(27,746)how()what()}-#select()>don't()'{+;when() ]mul(804,327)?@when()how()+from()mul(731,16)}when(632,481)^ mul(841,888)~:?{[<$+don't()'<&why()mul(668,253)mul(955,947) ' ^(*mul(227,561))^;*{ ,(mul(164,251)# (from()from(31,113)+]when(){mul(45,21)select()mul(180,486);: ?}from()/mul(411,320) ~{-when()){/+-mul(142,258)mul(895,918)#;#:mul(436,950)-{*what()where()select():mul(512,382)~#from(563,273)mul(180,971)(,mul(914,983)#who(){)where(773,354)mul(86,529)select()?$!:-mul(469,419)what()-!+why()#,&]mul(531,80)what()where()!where() diff --git a/2024/src/core.clj b/2024/src/core.clj index 3cb2a07..610accf 100644 --- a/2024/src/core.clj +++ b/2024/src/core.clj @@ -9,4 +9,11 @@ (str/split s #"\s+")) (defn get-match-groups [regex s] - (->> s (re-seq regex) first rest)) + (->> s (re-seq regex) (map rest))) + +(defn re-pos [re s] + (loop [m (re-matcher re s) + res {}] + (if (.find m) + (recur m (assoc res (.start m) (.group m))) + res))) diff --git a/2024/src/day03.clj b/2024/src/day03.clj new file mode 100644 index 0000000..93bd7a9 --- /dev/null +++ b/2024/src/day03.clj @@ -0,0 +1,39 @@ +(ns day03 + (:require [core :as c] + [input-manager :refer [get-input]] + [clojure.string :as str])) + +(def input (str/join (get-input 3))) + +(defn parse-muls + "takes in a string containing mul instructions + returns list of parsed integral multiplication results" + [s] + (->> s + (re-seq #"mul\((\d\d?\d?),(\d\d?\d?)\)") + (map rest) + (map #(map parse-long %)) + (map #(reduce * %)))) + +;; part 1 +(->> input + parse-muls + (reduce +)) + +;; part 2 +(->> input + (c/re-pos #"mul\((\d\d?\d?),(\d\d?\d?)\)|(do\(\))|(don't\(\))") + (sort-by key) + (reduce + (fn [acc [_idx instr]] + (cond + (.startsWith instr "mul") (if (:on acc) + (update acc :val + + (->> instr parse-muls first)) + acc) + (.startsWith instr "don't") (assoc acc :on false) + (.startsWith instr "do") (assoc acc :on true))) + {:on true + :val 0}) + :val) +