From c3acb83111f98247f7d3a1ae74db3fe8c67f19b6 Mon Sep 17 00:00:00 2001 From: Petros Amoiridis Date: Fri, 6 Dec 2024 23:02:23 +0200 Subject: [PATCH] Solve day 3 part 2 --- lib/day03/solution.ex | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/day03/solution.ex b/lib/day03/solution.ex index e178a6a..66588c9 100644 --- a/lib/day03/solution.ex +++ b/lib/day03/solution.ex @@ -15,4 +15,29 @@ defmodule Aoc2024.Day03.Solution do |> Enum.map(fn x -> Enum.product(x) end) |> Enum.sum() end + + @doc """ + # Examples + iex> Aoc2024.Day03.Solution.split_parts("xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))") + ["xmul(2,4)&mul[3,7]!^", "don't", "()_mul(5,5)+mul(32,64](mul(11,8)un", "do", "()?mul(8,5))"] + """ + def split_parts(memory) do + Regex.split(~r/don't|do/, memory, include_captures: true, trim: true) + end + + @doc """ + # Examples + iex> Aoc2024.Day03.Solution.solve_part2("xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))") + 48 + """ + def solve_part2(memory) do + "do#{memory}" + |> Aoc2024.Day03.Solution.split_parts() + |> Enum.chunk_every(2) + |> Enum.reject(fn x -> List.first(x) == "don't" end) + |> List.flatten() + |> Enum.reject(fn x -> x == "do" end) + |> List.to_string() + |> Aoc2024.Day03.Solution.solve_part1() + end end