tangled
alpha
login
or
join now
hauleth.dev
/
advent-of-code
3
fork
atom
this repo has no description
3
fork
atom
overview
issues
pulls
pipelines
Add forking to AoC 2025 solutions
hauleth.dev
3 months ago
8a394815
90dd84ae
verified
This commit was signed with the committer's
known signature
.
hauleth.dev
SSH Key Fingerprint:
SHA256:1hEP8QO8nM2KQfQ8jK4Q19y/CmqVZQI/cNSht3c1QlI=
+47
-20
7 changed files
expand all
collapse all
unified
split
2025
day01.livemd
day02.livemd
day03.livemd
day04.livemd
day05.livemd
day06.livemd
day07.livemd
+5
-1
2025/day01.livemd
···
28
end)
29
```
30
0
0
31
## Part 1
32
33
```elixir
···
38
end)
39
|> elem(1)
40
```
0
0
41
42
## Part 2
43
···
62
|> elem(1)
63
```
64
65
-
<!-- livebook:{"offset":1234,"stamp":{"token":"XCP.CwH20tHaK8kU6dohgq36CnaY2nnD-3NQc7aO6IAmymU5SEl9dLhm1IihwzVAgdcKHOfAxiDSdAIr5aTfqXWdOCvQRqJrJVUwuKBpAhQvvj9HOgnXBEgEvZz0r_CMSDSOvw","version":2}} -->
···
28
end)
29
```
30
31
+
<!-- livebook:{"branch_parent_index":0} -->
32
+
33
## Part 1
34
35
```elixir
···
40
end)
41
|> elem(1)
42
```
43
+
44
+
<!-- livebook:{"branch_parent_index":0} -->
45
46
## Part 2
47
···
66
|> elem(1)
67
```
68
69
+
<!-- livebook:{"offset":1324,"stamp":{"token":"XCP.pI2XE8mwBZJ1_5rOsosmoLh5-clSindOf0NN_piQhnU8r5baxfvJEHunCv7iXrvn3G43jfoHCFBZZK6KbxbIY0lzTJzKKWPrrl0bQ9S1RQvkk6dMv_LpnTv13HwNr3JYMw","version":2}} -->
+6
-1
2025/day02.livemd
···
24
|> Enum.map(&String.to_integer/1)
25
|> then(&apply(Range, :new, &1))
26
end)
0
27
```
28
29
## Implementation
···
59
end
60
```
61
0
0
62
## Part 1
63
64
```elixir
···
68
|> Enum.sum()
69
```
70
0
0
71
## Part 2
72
73
```elixir
···
77
|> Enum.sum()
78
```
79
80
-
<!-- livebook:{"offset":1434,"stamp":{"token":"XCP.NoAgOlNzs9jV0M8QxQDrdfMwKQR_xYkBG2FLF06XnKPtJ5ps3S83JucEVQZ7fJF0utUaryiCOT7xPWESlw3lS3TI6Jujiw8uFAZdKEXUL_jmZMHVF37TxiY4vRwKjfwvfg","version":2}} -->
···
24
|> Enum.map(&String.to_integer/1)
25
|> then(&apply(Range, :new, &1))
26
end)
27
+
|> Enum.sort_by(& &1.last)
28
```
29
30
## Implementation
···
60
end
61
```
62
63
+
<!-- livebook:{"branch_parent_index":1} -->
64
+
65
## Part 1
66
67
```elixir
···
71
|> Enum.sum()
72
```
73
74
+
<!-- livebook:{"branch_parent_index":1} -->
75
+
76
## Part 2
77
78
```elixir
···
82
|> Enum.sum()
83
```
84
85
+
<!-- livebook:{"offset":1551,"stamp":{"token":"XCP.GvC7N5ZC0xuQ3hRuVxd-rh5rJDKVZKJfmwspDkAuCFbjn8qdOUksP9Iy1GRtd7t5yLCV6nkfhXZlp_lTw8eZZBcwItn6IlML-jrjiORJQvkuXOHvzlOY17rIAaASRKvS3w","version":2}} -->
+6
-2
2025/day03.livemd
···
4
Mix.install([:kino_aoc])
5
```
6
7
-
## Section
8
9
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIzIiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
10
···
37
end
38
```
39
0
0
40
## Part 1
41
42
```elixir
43
Enum.sum_by(batteries, &Integer.undigits(Joltage.make_largest(&1, 2)))
44
```
45
0
0
46
## Part 2
47
48
```elixir
49
Enum.sum_by(batteries, &Integer.undigits(Joltage.make_largest(&1, 12)))
50
```
51
52
-
<!-- livebook:{"offset":1124,"stamp":{"token":"XCP.c4B4LAKOm9IZipbHc85MIeUBdcwcaQptUgMJIlHzU3DD1hssADSGdE-vByW1pHXsrARIeklYPeAk8Nn3AXBYvoEjBgm8zEP9oMXmp04xI_hLHezHURvrp6zdapkG0-l_sw","version":2}} -->
···
4
Mix.install([:kino_aoc])
5
```
6
7
+
## Parse
8
9
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiIzIiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
10
···
37
end
38
```
39
40
+
<!-- livebook:{"branch_parent_index":0} -->
41
+
42
## Part 1
43
44
```elixir
45
Enum.sum_by(batteries, &Integer.undigits(Joltage.make_largest(&1, 2)))
46
```
47
48
+
<!-- livebook:{"branch_parent_index":0} -->
49
+
50
## Part 2
51
52
```elixir
53
Enum.sum_by(batteries, &Integer.undigits(Joltage.make_largest(&1, 12)))
54
```
55
56
+
<!-- livebook:{"offset":1212,"stamp":{"token":"XCP.fo1ohV8LylIz8VmOAj7rlJ4Jn5KPGtiiFfsDRmp0pFSXCESjhfmQ11wOwEVmq9HM-Zn8fozQDsOoJbfgbM5LJPVE9c0pw2tYKbteOOGNqHI3PTIkuBnv8ZPW6oYwWAZy4A","version":2}} -->
+10
-6
2025/day04.livemd
···
4
Mix.install([:kino_aoc])
5
```
6
7
-
## Setup
8
9
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiI0Iiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
10
···
32
33
```elixir
34
defmodule PaperRolls do
35
-
def adjacent({x, y}) do
36
for dx <- -1..1,
37
dy <- -1..1,
38
{dx, dy} != {0, 0},
39
do: {x + dx, y + dy}
40
end
41
42
-
def free?(pos, map) do
43
pos
44
|> adjacent()
45
|> Enum.count(&(&1 in map))
···
47
end
48
end
49
```
0
0
50
51
## Part 1
52
53
```elixir
54
-
Enum.count(rolls, &PaperRolls.free?(&1, rolls))
55
```
0
0
56
57
## Part 2
58
···
61
Stream.repeatedly(fn -> [] end)
62
|> Enum.reduce_while(rolls, fn _, acc ->
63
removable =
64
-
Enum.filter(acc, &PaperRolls.free?(&1, acc))
65
|> MapSet.new()
66
67
case MapSet.difference(acc, removable) do
···
75
MapSet.size(rolls) - MapSet.size(cleaned)
76
```
77
78
-
<!-- livebook:{"offset":1486,"stamp":{"token":"XCP.deDYlsmx1l6_24twLKmjhZpjVr-zKpCk4kKaQFxGe1gppbfdc-7UyFIZxpcR_jVCGfX6vDlmYQ7ACpVB7bxafYi0X3Avsi-upj46ogSc5zRBoDdxStrGLSLdSmW_EsudIg","version":2}} -->
···
4
Mix.install([:kino_aoc])
5
```
6
7
+
## Parse
8
9
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiI0Iiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
10
···
32
33
```elixir
34
defmodule PaperRolls do
35
+
defp adjacent({x, y}) do
36
for dx <- -1..1,
37
dy <- -1..1,
38
{dx, dy} != {0, 0},
39
do: {x + dx, y + dy}
40
end
41
42
+
def movable?(pos, map) do
43
pos
44
|> adjacent()
45
|> Enum.count(&(&1 in map))
···
47
end
48
end
49
```
50
+
51
+
<!-- livebook:{"branch_parent_index":1} -->
52
53
## Part 1
54
55
```elixir
56
+
Enum.count(rolls, &PaperRolls.movable?(&1, rolls))
57
```
58
+
59
+
<!-- livebook:{"branch_parent_index":1} -->
60
61
## Part 2
62
···
65
Stream.repeatedly(fn -> [] end)
66
|> Enum.reduce_while(rolls, fn _, acc ->
67
removable =
68
+
Enum.filter(acc, &PaperRolls.movable?(&1, acc))
69
|> MapSet.new()
70
71
case MapSet.difference(acc, removable) do
···
79
MapSet.size(rolls) - MapSet.size(cleaned)
80
```
81
82
+
<!-- livebook:{"offset":1586,"stamp":{"token":"XCP.-_kcJR24r3dthl7SnpOh24JBI5hDpqMlFjQQDQ0pxtv4UHyaTlGoG4rG5iZxKtgxQoNAxw0K-mowSwehidDfrqewK3r9FHoOcAOIDbOMFd3QGH2X2Ta6KeXd4PlzWSYDBw","version":2}} -->
+10
-2
2025/day05.livemd
···
7
])
8
```
9
10
-
## Section
11
12
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiI1Iiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
13
···
35
|> Enum.map(&String.to_integer/1)
36
```
37
0
0
0
0
38
```elixir
39
Enum.count(ingridients, & &1 in fresh)
40
```
41
0
0
0
0
42
```elixir
43
Enum.count(fresh)
44
```
45
46
-
<!-- livebook:{"offset":863,"stamp":{"token":"XCP.XHMkonPfVQNZ43fIPanTNAFSPojbYWSWMU1wxn37_PPkpVpaY-fKZmAwoH-3qs2vx3CD_h34H1PjbHKDDWdrb7UxHoJoV5UxMppoorBtxw9hQF7YuznVwOa187BXPmKPcw","version":2}} -->
···
7
])
8
```
9
10
+
## Parse
11
12
<!-- livebook:{"attrs":"eyJhc3NpZ25fdG8iOiJwdXp6bGVfaW5wdXQiLCJkYXkiOiI1Iiwic2Vzc2lvbl9zZWNyZXQiOiJBRFZFTlRfT0ZfQ09ERV9TRVNTSU9OIiwieWVhciI6IjIwMjUifQ","chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
13
···
35
|> Enum.map(&String.to_integer/1)
36
```
37
38
+
<!-- livebook:{"branch_parent_index":0} -->
39
+
40
+
## Part 1
41
+
42
```elixir
43
Enum.count(ingridients, & &1 in fresh)
44
```
45
46
+
<!-- livebook:{"branch_parent_index":0} -->
47
+
48
+
## Part 2
49
+
50
```elixir
51
Enum.count(fresh)
52
```
53
54
+
<!-- livebook:{"offset":973,"stamp":{"token":"XCP.GHEtbWlG6LHz6I0d5Y_d4738EDILulvQyP1NtPISLeYWo9atG0Ailm43-eswn0JGS5h2z5Yxb8Xi8nGJLqUkj41eqpnT_u7NxVCT4ceeKMBsd5R-EuxBw0P7vLlBab68MA","version":2}} -->
+5
-1
2025/day06.livemd
···
27
|> Enum.map(&String.to_atom/1)
28
```
29
0
0
30
## Part 1
31
32
```elixir
···
39
{nums, :*} -> Enum.product(nums)
40
end)
41
```
0
0
42
43
## Part 2
44
···
61
end)
62
```
63
64
-
<!-- livebook:{"offset":1229,"stamp":{"token":"XCP.uuy6Ksg23kO8DXLs0nEHWRa2q8MnTF00fl1kNBDi-xlsQ1DZ_teumvy__d8PZSNG_VIsQ9fTr1rGiHu3aFBxxeOD5uVO2plujrne43wrcKxIt7wi6AInBo9LuC1gXgwFgw","version":2}} -->
···
27
|> Enum.map(&String.to_atom/1)
28
```
29
30
+
<!-- livebook:{"branch_parent_index":0} -->
31
+
32
## Part 1
33
34
```elixir
···
41
{nums, :*} -> Enum.product(nums)
42
end)
43
```
44
+
45
+
<!-- livebook:{"branch_parent_index":0} -->
46
47
## Part 2
48
···
65
end)
66
```
67
68
+
<!-- livebook:{"offset":1319,"stamp":{"token":"XCP.wqKPUf7KHN-UzqY1O8_n61vLL2ksAE_kGnIsQL0IpamJTD-NEX9_HbYK4H0y_NM8lKhqDz4rZ-TMFsXjuQ3n2-URGSNh_SCmDtJIbJBAP3mbiCwyN52oyGL0Nq5eD424MQ","version":2}} -->
+5
-7
2025/day07.livemd
···
30
end)
31
```
32
0
0
33
## Part 1
34
35
```elixir
···
92
import MapSet, only: [intersection: 2, difference: 2, union: 2]
93
94
for x <- beams do
95
-
Image.Draw.point!(img, x, y, color: :green)
96
end
97
98
for x <- splits do
99
-
Image.Draw.point!(img, x, y, color: :red)
100
end
101
102
hits = intersection(beams, splits)
···
106
beams
107
end)
108
109
-
#for {row, y} <- Enum.with_index(splitters, 1),
110
-
# x <- row,
111
-
# do: Image.Draw.point!(img, x, y, color: :red)
112
-
113
img
114
end)
115
|> then(fn {:ok, img} -> img end)
116
|> Image.resize!(5, interpolate: :nearest)
117
```
118
119
-
<!-- livebook:{"offset":2629,"stamp":{"token":"XCP.lHomXHh84XridtwMBP5AP7BXVVCvUC-jx1w-h7SzIFygBNyHhdS1qTLyp97LGQ3Rf1f4to4IjQtJmlsi-0PrxC2vUjGg97fvP9zvt5n0IxMkwLnFfvafaIDjJSsZLX1Bcg","version":2}} -->
···
30
end)
31
```
32
33
+
<!-- livebook:{"branch_parent_index":0} -->
34
+
35
## Part 1
36
37
```elixir
···
94
import MapSet, only: [intersection: 2, difference: 2, union: 2]
95
96
for x <- beams do
97
+
Image.Draw.point(img, x, y, color: :green)
98
end
99
100
for x <- splits do
101
+
Image.Draw.point(img, x, y, color: :red)
102
end
103
104
hits = intersection(beams, splits)
···
108
beams
109
end)
110
0
0
0
0
111
img
112
end)
113
|> then(fn {:ok, img} -> img end)
114
|> Image.resize!(5, interpolate: :nearest)
115
```
116
117
+
<!-- livebook:{"offset":2553,"stamp":{"token":"XCP.jUh_Ehkij-SpgOuY0sdHr5YT6IaJif0yd6mre9jiQpu7HHlbAvVeyKXHCNfcp0L0eLTRgut7HlWmzGi3AlT1SFWsJqgDuD-ePZl8JBbLYfW9j0leDSmN7-aQgVCmlMvFDw","version":2}} -->