diff --git a/AdventOfCode2024.sln b/AdventOfCode2024.sln
index 2c09573..154ae2d 100644
--- a/AdventOfCode2024.sln
+++ b/AdventOfCode2024.sln
@@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Day1", "Day1\Day1.csproj",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day2", "Day2\Day2.csproj", "{4C4D9A68-A4E2-4912-BFE4-54080736D611}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day3", "Day3\Day3.csproj", "{85A89558-E779-4DAF-9E45-C972B173A6B7}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
{4C4D9A68-A4E2-4912-BFE4-54080736D611}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4C4D9A68-A4E2-4912-BFE4-54080736D611}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4C4D9A68-A4E2-4912-BFE4-54080736D611}.Release|Any CPU.Build.0 = Release|Any CPU
+ {85A89558-E779-4DAF-9E45-C972B173A6B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {85A89558-E779-4DAF-9E45-C972B173A6B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {85A89558-E779-4DAF-9E45-C972B173A6B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {85A89558-E779-4DAF-9E45-C972B173A6B7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Day3/Day3.csproj b/Day3/Day3.csproj
new file mode 100644
index 0000000..e0c4c2e
--- /dev/null
+++ b/Day3/Day3.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+ Always
+
+
+
+
diff --git a/Day3/Program.cs b/Day3/Program.cs
new file mode 100644
index 0000000..27c704e
--- /dev/null
+++ b/Day3/Program.cs
@@ -0,0 +1,65 @@
+using System.Text.RegularExpressions;
+
+var memory = File.ReadAllText("input.txt");
+
+var result = ParseCorruptedMemory(memory);
+var resultPart2 = ParseCorruptedMemoryPart2(memory);
+Console.WriteLine($"Part1: {result}\nPart2: {resultPart2}");
+
+int ParseCorruptedMemory(string corruptedMemory)
+{
+ var mulPattern = @"mul\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)";
+ var matches = Regex.Matches(corruptedMemory, mulPattern);
+
+ var totalSum = matches
+ .Select(match =>
+ {
+ var x = int.Parse(match.Groups[1].Value);
+ var y = int.Parse(match.Groups[2].Value);
+
+ return x * y;
+ }).Sum();
+
+ return totalSum;
+}
+
+int ParseCorruptedMemoryPart2(string corruptedMemory)
+{
+ var mulPattern = @"mul\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)";
+ var doPattern = @"do\s*\(\s*\)";
+ var dontPattern = @"don't\s*\(\s*\)";
+
+ var mulEnabled = true;
+ var mulMatches = Regex.Matches(corruptedMemory, mulPattern);
+ var doMatches = Regex.Matches(corruptedMemory, doPattern);
+ var dontMatches = Regex.Matches(corruptedMemory, dontPattern);
+
+ var allMatches = mulMatches
+ .Concat(doMatches.Cast())
+ .Concat(dontMatches.Cast())
+ .OrderBy(m => m.Index)
+ .ToList();
+
+ var results = new List();
+
+ foreach (var match in allMatches)
+ {
+ if (Regex.IsMatch(match.Value, doPattern))
+ {
+ mulEnabled = true;
+ }
+ else if (Regex.IsMatch(match.Value, dontPattern))
+ {
+ mulEnabled = false;
+ }
+ else if (Regex.IsMatch(match.Value, mulPattern) && mulEnabled)
+ {
+ var mulMatch = (Match)match;
+ var x = int.Parse(mulMatch.Groups[1].Value);
+ var y = int.Parse(mulMatch.Groups[2].Value);
+ results.Add(x * y);
+ }
+ }
+
+ return results.Sum();
+}
\ No newline at end of file
diff --git a/Day3/input.txt b/Day3/input.txt
new file mode 100644
index 0000000..2526eed
--- /dev/null
+++ b/Day3/input.txt
@@ -0,0 +1,6 @@
+where()(< }when()mul(678,62)%mul(747,584)from()-select(59,725)mul(570,425)<~^:$where()!@}where()mul(542,816):don't()select()from()#(;!select()mul(541,668)mul(557,427)what()<#-why(952,537)*what()}mul(723,604)/^]'+;from()('-mul(227,146)'what()~*who():select()~from()do()mul(640,593)^$<*from()??>$mul(879,96),}?;(mul(465,50)>!~%'do()$'#'<**mul(781,977)-,?where();mul(154,168)>mul(532,770)(>#*what()/^}?mul(498,722)%^mul(710,295)from()@>mul(816,977)how(80,33)^$?what()how(),what()mul(987,59)'-mul(106,916) when();^(from()where()(what()mul(474,920)?%,mul(435,248)do(),:>$how();~^ from()mul(48,417),#,{mul(430,437)%[,@@mul(953,728)'mul(556,935)]]&select()when()!:/when()%mul(249,960)+;{select(),#mul(713,901)!?^when()%mul(910,594)&where()how(316,735){mul(838,23)$mul(690,953)from();)who()}from()mul(803,624)when(){mul(280,406)mul(190,779)select()#+,[-mul(381,486)*&+['*mul(566,57)mul(91,816)>select()mul(578,725)%&!mul(173,595)*;'do()when()from()/mul(438,7)%mul(15,794)?when()from()}where() who()-mul(103,235);mul(971,383)@do()$mul(250,84)when()where(306,50)select(454,21)@)*mul(419,450):{)mul(736,148))when()*{what()mul(831,562)>]/}who()'do()&who()*+,who(637,20)#/$mul(896,737)-#when()select()when(),:~$@mul(988,98) select()who(709,386);-*!where()~do()!^mul(870,729)what();@mul(749,333)&when()how() where()}who()#mul(935,153)[from()!mul(781,341)&){what()mul(833,819)/[~{/]@mul(184,985)^<%{;{mul(630,218){what()}#when()~$'mul(14,702)%>select()^[@mul(474,41)from(){$do()*select()#/how()mul(488,463:where()where(){]-,#-mul(407,949)what()select()where(364,988)^~#*who(){mul(999,525);;select()from()@'why()don't()<+:where()^from()-mul(558,527)@from()$+ do()from()!}where()~]:>!mul(838,414)where()-/mul(810,111)'how()who() :,where()mul(355,829what()'%^[mul(196,488)[mul(547,815)-how()$when()~ ~how()mul(24,761)!from()%]%?>mul(950,754)mul(649,683){>where()select()mul(771,439)mul(236,961)@what(),~what();^how()mul(791,10))why(),mul(278,737),why()<@~,]?from()do()+#/;} (/^when()mul(139,448)+%^(@ what())mul(122,226)select()[]select():mul(890>when()&what(508,897)select()>~{{{}mul(831,320)from())how()how()who()'mul(283,391);#@mul(310,864)&$-@!:where()mul(869,883)<$}@+<))mul(380,96)%?~ when()how()mul(629,878)#what()who()mul(888,359)$&*![&{~who()'mul(820,290)from()!{/(?,@^~mul(34,230);,don't()why(737,412):?mul(66,718)what(376,732)mul(315,501),:mul(706,831)when()mul(9,585)select()&from()mul(612,24)
+)what()]'why()how(654,256)-mul(806,436)!/>~select():;'$from()mul(899,742)[%~mul(736,580)@where()who()why();how()>mul(23,836)when():when()}{}mul(715,293):mul(282,580)from()$?/*>mul(201,586);#;where()mul(118,230)who(){~!@!mul(88,537)#}-^/~mul(910,268)mul(976,63)^&{( :'mul(458,717)$$-how()^-]&+!mul(984,138)>;@where(752,136)mul(697,113)mul(124,665);!select()&how()what()mul(829,781)mul(380,512){!/<(]from()mul!@from():how()}<;(where()mul(206,188)>*how()%*when()mul(702,947)select(36,946)%}why()&+mul(129,741){/<)mul(16,381)how()what()*&{'}mul(192,91)who()$+&++mul(250,605)[[}select()-@,who(798,362)@don't()#how()} {?,who():mul(359,185)who(){ mul(467,606){why()-select()/*?mul(180,855)why()mul(134,121)!;'@~why(187,921)mul(437,28)mul(176,665)*?*!from()who()mul(432,913)[how()when()what()^/mul(277,854)$mul(311,503),%how()]/mul(290,640)where()mul(945,575)@where(394,615)why()from(){where()/when()}mul(186,609)mul(105,239)&><)select()when():!mul(352,943)[ how()'why()#?how()who()]mul(148,156)~mul(797,298)#&-(++where(36,220)(~mul(141,332) mul(963,953)mul(79,791)~#);who())mul(465,458);#when(243,832)>#$*!?mul(977,49)where(808,80)$~]mul(84,878)where():(<< mul)/ :; mul(698,14)when()what()'>mul(455,546)%where()&@;when(491,752)$mul(185,720)?%]from()}how()%mul(402,280) #what()[[%' mul(612,36){when()mul(159,470)@*mul(238,734)}?from()why()' do()@who()mul(172,976)](;/what()-(how()$@@'mul(84,598)<@where()?what()<{?when()mul(162,924)mul(545,472)select(886,293){$when()from()//*mul(59,957)^*why(31,601)mul(608,367)'?@mul(915,987) +[mul(678,85) mul(501,729)-how()how()&select()($^$~do()!-what()-^;mul(682,420)when()mul(469,47)why(119,43)}~mul(699,30)?%>who()?{'mul(264,568)<}+!who()mul(579,479)mul(642,809)/,+>)<[mul(351,839){%(where()-}$mul(240,335)mul(475,338)^who()[{$@when();/mul(335,996)[+mul(954,892):when()what():who()mul(703,909))^,$'(what()do()&mul(675,270)%*];do()$/select())#]#*mul(463,143)}how()when()!$]do()mul(832,164)-what()$select(),%: mul(656,225)where()where()//mul(962,720)>-what()?!do()when()why()]how() $#mul(763,253)[+when()select())~when()mul(353,550){when()mul(664,37)mul(346,65)how()'%how()>select(310,753)mul(979,820)#[ mul(252,202)when(557,299)mul(665,232)when()((@&&%when()select()do()what()mul(730,599)[mul(163,61)why()/mul(235,484)^&don't(),^{~mul(476,543)why()mul(729,497)select()],mul(344,943)#;mul(645,722)[)why(258,3)