Skip to content

Commit 0e8e106

Browse files
committed
Solve 2024/03
1 parent c2c2403 commit 0e8e106

File tree

15 files changed

+106
-11
lines changed

15 files changed

+106
-11
lines changed

lib/2015/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2015) | [Tests](/test/2015)
55

6-
2015 | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023)
6+
2015 | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 48/50

lib/2016/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2016) | [Tests](/test/2016)
55

6-
[2015](/lib/2015) | 2016 | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023)
6+
[2015](/lib/2015) | 2016 | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 22/50

lib/2017/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2017) | [Tests](/test/2017)
55

6-
[2015](/lib/2015) | [2016](/lib/2016) | 2017 | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023)
6+
[2015](/lib/2015) | [2016](/lib/2016) | 2017 | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 34/50

lib/2018/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2018) | [Tests](/test/2018)
55

6-
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | 2018 | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023)
6+
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | 2018 | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 15/50

lib/2019/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2019) | [Tests](/test/2019)
55

6-
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | 2019 | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023)
6+
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | 2019 | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 15/50

lib/2020/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2020) | [Tests](/test/2020)
55

6-
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | 2020 | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023)
6+
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | 2020 | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 44/50

lib/2021/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2021) | [Tests](/test/2021)
55

6-
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | 2021 | [2022](/lib/2022) | [2023](/lib/2023)
6+
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | 2021 | [2022](/lib/2022) | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 24/50

lib/2022/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2022) | [Tests](/test/2022)
55

6-
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | 2022 | [2023](/lib/2023)
6+
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | 2022 | [2023](/lib/2023) | [2024](/lib/2024)
77

88

99
## :trophy: 45/50

lib/2023/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
[Main Page](https://adventofcode.com/2023) | [Tests](/test/2023)
55

6-
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | 2023
6+
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | 2023 | [2024](/lib/2024)
77

88

99
## :trophy: 44/50

lib/2024/README.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!-- AUTOGENERATED -- DO NOT EDIT -- use `mix gen_stats` -->
2+
# Advent of Code 2024
3+
4+
[Main Page](https://adventofcode.com/2024) | [Tests](/test/2024)
5+
6+
[2015](/lib/2015) | [2016](/lib/2016) | [2017](/lib/2017) | [2018](/lib/2018) | [2019](/lib/2019) | [2020](/lib/2020) | [2021](/lib/2021) | [2022](/lib/2022) | [2023](/lib/2023) | 2024
7+
8+
9+
## :trophy: 2/50
10+
11+
| Day | Problem Page | Status | Difficulty | Solution Page | Test Page | Tags |
12+
| :---: | :------: | :---: | :---: | :---: | :---: | :---: |
13+
| 3 | [Mull It Over](https://adventofcode.com/2024/day/3) | :1st_place_medal: | :shrug: | [day_03.ex](/lib/2024/day_03.ex) | [day_03_test.exs](/test/2024/day_03_test.exs) | |
14+

lib/2024/day_03.ex

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
defmodule AdventOfCode.Y2024.Day03 do
2+
@moduledoc """
3+
--- Day 3: Mull It Over ---
4+
Problem Link: https://adventofcode.com/2024/day/3
5+
Difficulty:
6+
Tags:
7+
"""
8+
alias AdventOfCode.Helpers.{InputReader, Transformers}
9+
10+
def input, do: InputReader.read_from_file(2024, 3)
11+
12+
def run(input \\ input()) do
13+
input = parse(input)
14+
15+
{run_1(input), run_2(input)}
16+
end
17+
18+
defp run_1(input) do
19+
input
20+
|> Enum.flat_map(fn line -> line |> tokenize() |> Enum.map(&mul/1) end)
21+
|> Enum.sum()
22+
end
23+
24+
defp run_2(input) do
25+
input
26+
|> Enum.flat_map(&tokenize_with_state/1)
27+
|> Enum.reduce({true, 0}, fn instruction, {continue?, total} ->
28+
case {continue?, instruction} do
29+
{_, "do()"} -> {true, total}
30+
{_, "don't()"} -> {false, total}
31+
{true, instruction} -> {true, mul(instruction) + total}
32+
{false, _} -> {false, total}
33+
end
34+
end)
35+
|> elem(1)
36+
end
37+
38+
def parse(data \\ input()) do
39+
data
40+
|> Transformers.lines()
41+
end
42+
43+
def tokenize_with_state(line) do
44+
~r/(?>mul\(\d+,\d+\))|(?>do\(\))|(?>don't\(\))/
45+
|> Regex.scan(line)
46+
|> List.flatten()
47+
end
48+
49+
def tokenize(line) do
50+
~r/mul\(\d+,\d+\)/
51+
|> Regex.scan(line)
52+
|> List.flatten()
53+
end
54+
55+
def mul(token) do
56+
token
57+
|> String.replace("mul(", "")
58+
|> String.replace(")", "")
59+
|> String.split(",")
60+
|> Enum.map(&String.to_integer/1)
61+
|> Enum.reduce(&(&1 * &2))
62+
end
63+
end

lib/advent_of_code.ex

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ defmodule AdventOfCode do
22
@moduledoc """
33
Module that solves problem given year and day.
44
"""
5-
@latest_year 2023
5+
@latest_year 2024
66

7-
@type year() :: 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023
7+
@type year() :: 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024
88
@type day() :: pos_integer()
99

1010
@doc """

priv/input_files/2024_3.txt

+6
Large diffs are not rendered by default.

priv/native/libaoc.so

24 Bytes
Binary file not shown.

test/2024/day_03_test.exs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
defmodule AdventOfCode.Y2024.Day03Test do
2+
@moduledoc false
3+
4+
use ExUnit.Case, async: true
5+
@moduletag :y2403
6+
7+
alias AdventOfCode.Y2024.Day03, as: Solution
8+
9+
test "Year 2024, Day 3 run/1" do
10+
assert Solution.run() == {190_604_937, 82_857_512}
11+
end
12+
end

0 commit comments

Comments
 (0)