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