+49
2024/day01.livemd
+49
2024/day01.livemd
···
1
+
# Day 01
2
+
3
+
```elixir
4
+
Mix.install([:kino_aoc])
5
+
```
6
+
7
+
## Section
8
+
9
+
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIxIiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjQifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
10
+
11
+
```elixir
12
+
{:ok, puzzle_input} =
13
+
KinoAOC.download_puzzle("2024", "1", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
14
+
```
15
+
16
+
```elixir
17
+
{left, right} =
18
+
puzzle_input
19
+
|> String.split("\n", trim: true)
20
+
|> Enum.map(fn line ->
21
+
line
22
+
|> String.split(" ", trim: true)
23
+
|> Enum.map(&String.to_integer/1)
24
+
|> List.to_tuple()
25
+
end)
26
+
|> Enum.unzip()
27
+
```
28
+
29
+
## Part 1
30
+
31
+
```elixir
32
+
left
33
+
|> Enum.sort()
34
+
|> Enum.zip_with(Enum.sort(right), &abs(&1 - &2))
35
+
|> Enum.sum()
36
+
```
37
+
38
+
## Part 2
39
+
40
+
```elixir
41
+
freq_left = Enum.frequencies(left)
42
+
freq_right = Enum.frequencies(right)
43
+
44
+
freq_left
45
+
|> Enum.map(fn {id, n} -> id * n * Map.get(freq_right, id, 0) end)
46
+
|> Enum.sum()
47
+
```
48
+
49
+
<!-- livebook:{"offset":946,"stamp":{"token":"XCP.yoOGtjwRQqzJzwUJIU8whgzKrfM5itcWL9AJcWUmjQHyohqeB9F_WH6pTqnTtTm4QERP5feEfLn6Vkjen95d23tI3VO-e9goRMqIc5jshNWfH59tFX7lzO2M7QPQ28nKicI","version":2}} -->