Skip to content

Commit 1202c33

Browse files
committed
Solve 2024/05
1 parent f2a2c8b commit 1202c33

File tree

10 files changed

+2546
-31
lines changed

10 files changed

+2546
-31
lines changed

README.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -61,35 +61,35 @@ Note that you can call those commands independently and also set up pre-commit h
6161

6262
Note: All files mentioned above are autogenerated and are created by running `mix update_stats` task.
6363

64-
# :star: 291/450 :dart: 159 :trophy: 145.5/225 :dart: 79.5
65-
66-
| Day | [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) |
67-
|:---:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
68-
| :star2: | 48 | 22 | 34 | 15 | 15 | 44 | 24 | 45 | 44 |
69-
| 1 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
70-
| 2 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
71-
| 3 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
72-
| 4 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
73-
| 5 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
74-
| 6 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
75-
| 7 | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
76-
| 8 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
77-
| 9 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
78-
| 10 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
79-
| 11 | :1st_place_medal: | | :1st_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
80-
| 12 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
81-
| 13 | :1st_place_medal: | | :1st_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
82-
| 14 | :1st_place_medal: | | :2nd_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
83-
| 15 | :1st_place_medal: | | :1st_place_medal: | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
84-
| 16 | :1st_place_medal: | | :1st_place_medal: | | | :2nd_place_medal: | :1st_place_medal: | | :1st_place_medal: |
85-
| 17 | :1st_place_medal: | | :1st_place_medal: | | | | | | |
86-
| 18 | :1st_place_medal: | | :2nd_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
87-
| 19 | :1st_place_medal: | | | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: |
88-
| 20 | :1st_place_medal: | | | | | :2nd_place_medal: | | :1st_place_medal: | |
89-
| 21 | :1st_place_medal: | | | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
90-
| 22 | | | | | | :1st_place_medal: | | :2nd_place_medal: | :1st_place_medal: |
91-
| 23 | :1st_place_medal: | | :2nd_place_medal: | | | :2nd_place_medal: | | :1st_place_medal: | :1st_place_medal: |
92-
| 24 | :1st_place_medal: | | | | | :2nd_place_medal: | | :1st_place_medal: | :1st_place_medal: |
93-
| 25 | :1st_place_medal: | | | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
64+
# :star: 297/500 :dart: 203 :trophy: 148.5/250 :dart: 101.5
65+
66+
| Day | [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](/lib/2024) |
67+
|:---:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
68+
| :star2: | 48 | 22 | 34 | 15 | 15 | 44 | 24 | 45 | 44 | 6 |
69+
| 1 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
70+
| 2 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
71+
| 3 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
72+
| 4 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
73+
| 5 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: |
74+
| 6 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
75+
| 7 | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
76+
| 8 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :2nd_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
77+
| 9 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
78+
| 10 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
79+
| 11 | :1st_place_medal: | | :1st_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
80+
| 12 | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
81+
| 13 | :1st_place_medal: | | :1st_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
82+
| 14 | :1st_place_medal: | | :2nd_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
83+
| 15 | :1st_place_medal: | | :1st_place_medal: | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
84+
| 16 | :1st_place_medal: | | :1st_place_medal: | | | :2nd_place_medal: | :1st_place_medal: | | :1st_place_medal: | |
85+
| 17 | :1st_place_medal: | | :1st_place_medal: | | | | | | | |
86+
| 18 | :1st_place_medal: | | :2nd_place_medal: | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
87+
| 19 | :1st_place_medal: | | | | | :1st_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
88+
| 20 | :1st_place_medal: | | | | | :2nd_place_medal: | | :1st_place_medal: | | |
89+
| 21 | :1st_place_medal: | | | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | | |
90+
| 22 | | | | | | :1st_place_medal: | | :2nd_place_medal: | :1st_place_medal: | |
91+
| 23 | :1st_place_medal: | | :2nd_place_medal: | | | :2nd_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
92+
| 24 | :1st_place_medal: | | | | | :2nd_place_medal: | | :1st_place_medal: | :1st_place_medal: | |
93+
| 25 | :1st_place_medal: | | | | | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | :1st_place_medal: | |
9494

9595

lib/2024/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
[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
77

88

9-
## :trophy: 2/50
9+
## :trophy: 6/50
1010

1111
| Day | Problem Page | Status | Difficulty | Solution Page | Test Page | Tags |
1212
| :---: | :------: | :---: | :---: | :---: | :---: | :---: |
13+
| 1 | [Historian Hysteria](https://adventofcode.com/2024/day/1) | :1st_place_medal: | :snowflake: | [day_01.ex](/lib/2024/day_01.ex) | [day_01_test.exs](/test/2024/day_01_test.exs) | [list](/wiki/tags.md#list) |
1314
| 3 | [Mull It Over](https://adventofcode.com/2024/day/3) | :1st_place_medal: | :snowflake: | [day_03.ex](/lib/2024/day_03.ex) | [day_03_test.exs](/test/2024/day_03_test.exs) | [regex](/wiki/tags.md#regex), [fsm](/wiki/tags.md#fsm) |
15+
| 5 | [Print Queue](https://adventofcode.com/2024/day/5) | :1st_place_medal: | :snowflake: | [day_05.ex](/lib/2024/day_05.ex) | [day_05_test.exs](/test/2024/day_05_test.exs) | [set](/wiki/tags.md#set), [sort](/wiki/tags.md#sort) |
1416

lib/2024/day_01.ex

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
defmodule AdventOfCode.Y2024.Day01 do
2+
@moduledoc """
3+
--- Day 1: Historian Hysteria ---
4+
Problem Link: https://adventofcode.com/2024/day/1
5+
Difficulty: xs
6+
Tags: list
7+
"""
8+
alias AdventOfCode.Helpers.{InputReader, Transformers}
9+
10+
def input, do: InputReader.read_from_file(2024, 1)
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({left_list, right_list, _}) do
19+
for {left, right} <- Enum.zip(left_list, right_list), reduce: 0 do
20+
acc -> acc + abs(left - right)
21+
end
22+
end
23+
24+
defp run_2({left_list, _, tally}) do
25+
for id_value <- left_list, reduce: 0 do
26+
acc -> acc + id_value * Map.get(tally, id_value, 0)
27+
end
28+
end
29+
30+
def parse(data \\ input()) do
31+
{left, right} =
32+
for line <- Transformers.lines(data), reduce: {[], []} do
33+
{left_list, right_list} ->
34+
[left, right] = String.split(line)
35+
{[String.to_integer(left) | left_list], [String.to_integer(right) | right_list]}
36+
end
37+
38+
{Enum.sort(left), Enum.sort(right), Enum.frequencies(right)}
39+
end
40+
end

lib/2024/day_05.ex

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
defmodule AdventOfCode.Y2024.Day05 do
2+
@moduledoc """
3+
--- Day 5: Print Queue ---
4+
Problem Link: https://adventofcode.com/2024/day/5
5+
Difficulty: xs
6+
Tags: set sort
7+
"""
8+
alias AdventOfCode.Helpers.{InputReader, Transformers}
9+
10+
def input, do: InputReader.read_from_file(2024, 5)
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.filter(fn {a, b} -> a == b end)
21+
|> Enum.map(fn {a, _} -> a |> Enum.at(div(length(a), 2)) end)
22+
|> Enum.sum()
23+
end
24+
25+
defp run_2(input) do
26+
input
27+
|> Enum.filter(fn {a, b} -> a != b end)
28+
|> Enum.map(fn {_, b} -> b |> Enum.at(div(length(b), 2)) end)
29+
|> Enum.sum()
30+
end
31+
32+
def parse(data \\ input()) do
33+
[deps, updates] = Transformers.sections(data)
34+
given_sorted_pair({parse_deps(deps), parse_updates(updates)})
35+
end
36+
37+
defp parse_deps(deps) do
38+
for line <- Transformers.lines(deps),
39+
into: MapSet.new(),
40+
do: String.split(line, "|") |> Enum.map(&String.to_integer/1) |> List.to_tuple()
41+
end
42+
43+
defp parse_updates(updates) do
44+
for line <- Transformers.lines(updates) do
45+
for update <- String.split(line, ","), do: String.to_integer(update)
46+
end
47+
end
48+
49+
defp given_sorted_pair({deps, updates}) do
50+
for update <- updates do
51+
{update, Enum.sort(update, &({&1, &2} in deps))}
52+
end
53+
end
54+
end

0 commit comments

Comments
 (0)