+2
-2
2024/day06.livemd
+2
-2
2024/day06.livemd
···
1
1
<!-- livebook:{"persist_outputs":true} -->
2
2
3
-
# Untitled notebook
3
+
# Day 06
4
4
5
5
```elixir
6
6
Mix.install([:kino_aoc, :arrays])
···
184
184
4432
185
185
```
186
186
187
-
<!-- livebook:{"offset":7387,"stamp":{"token":"XCP.Wj_YFc-zYzAPEIaLCGnT6vtMYoDgv-DJ3xiuAVdHZPkMwNpP5jrmLW4LBe4lzRgNN75xF-FYACOKdzd82Z71i5y8yC5Wmd072w6qDXxmygH8fZvTOAZM02UZvvg20b5Yhv0","version":2}} -->
187
+
<!-- livebook:{"offset":7376,"stamp":{"token":"XCP.Bv-aM7sns5Kb69SQdY4giDFl6fWiJ5L3lnISxUUjGi_DgTgM_r5rl-y8sy2RLl-KbEtOmW99QQsGItLYJhKJmkOZ5pPZ_7Aw3BhkL_ap8RnW8UkOt_OsNdpqoZT7FEDtmFQ","version":2}} -->
+16
-14
2024/day07.livemd
+16
-14
2024/day07.livemd
···
55
55
56
56
```
57
57
warning: code block contains unused literal "190: 10 19\n3267: 81 40 27\n83: 17 5\n156: 15 6\n7290: 6 8 6 15\n161011: 16 10 13\n192: 17 8 14\n21037: 9 7 18 13\n292: 11 6 16 20\n" (remove the literal or assign it to _ to avoid warnings)
58
-
└─ Workspace/hauleth/advent-of-code/2024/day07.livemd#cell:5stfqvjgwz4d5v5a:1
58
+
└─ Workspace/hauleth/advent-of-code/2024/day07.livemd#cell:7pxlqq2wa3oqdwfr:1
59
59
60
60
```
61
61
···
123
123
defmodule Eq.P1 do
124
124
def possible?(0, []), do: true
125
125
def possible?(a, [a]), do: true
126
-
def possible?(0, [_|_]), do: false
126
+
def possible?(0, [_ | _]), do: false
127
127
def possible?(_, []), do: false
128
128
def possible?(a, _) when a < 0, do: false
129
129
···
146
146
|> Enum.filter(fn {target, vals} ->
147
147
Eq.P1.possible?(target, Enum.reverse(vals))
148
148
end)
149
-
|> Enum.reduce(0, & elem(&1, 0) + &2)
149
+
|> Enum.reduce(0, &(elem(&1, 0) + &2))
150
150
```
151
151
152
152
<!-- livebook:{"output":true} -->
···
161
161
defmodule Eq.P2 do
162
162
def possible?(a, [hd | rest]), do: possible?(a, hd, rest)
163
163
164
-
def possible?(a, a, []), do: true
165
-
def possible?(_, _, []), do: false
166
-
def possible?(a, b, _) when b > a, do: false
164
+
defp possible?(a, a, []), do: true
165
+
defp possible?(_, _, []), do: false
166
+
defp possible?(a, b, _) when b > a, do: false
167
167
168
-
def possible?(target, curr, [a | rest]) do
168
+
defp possible?(target, curr, [a | rest]) do
169
169
possible?(target, concat(curr, a), rest) or
170
-
possible?(target, curr + a, rest) or
171
-
possible?(target, curr * a, rest)
170
+
possible?(target, curr * a, rest) or
171
+
possible?(target, curr + a, rest)
172
172
end
173
173
174
-
def concat(a, b) do
175
-
String.to_integer("#{a}#{b}")
176
-
end
174
+
defp concat(a, b), do: a * l10(b) + b
175
+
176
+
defp l10(n) when n >= 100, do: 1000
177
+
defp l10(n) when n >= 10, do: 100
178
+
defp l10(_), do: 10
177
179
end
178
180
```
179
181
180
182
<!-- livebook:{"output":true} -->
181
183
182
184
```
183
-
{:module, Eq.P2, <<70, 79, 82, 49, 0, 0, 10, ...>>, {:concat, 2}}
185
+
{:module, Eq.P2, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:l10, 1}}
184
186
```
185
187
186
188
```elixir
···
200
202
264184041398847
201
203
```
202
204
203
-
<!-- livebook:{"offset":9239,"stamp":{"token":"XCP.jahJhDMdAl3PqiPODSOJfIpJq_WE2I1sNvBUcNkY-FP-lUYFrioZW8V3FxbSGrS_-uFSLbRAfdSuAPnnK09vkzrcdjq7uz6-aRoxHbpcVgFwLC_l-sbpUMFFHwKci93vcoE","version":2}} -->
205
+
<!-- livebook:{"offset":9317,"stamp":{"token":"XCP.DCDL30p1jz3L9vRDdQ5EJLc3r7y1DTsVhQ3GXFK_huvoEXqgYu2TTOfTq8AFYpt5W6fEIo4MvfrnHttbqS-z4SjRkT7WM09v09mZ_FeyqstWzLMCK_oNqhrrdwPPv5BG_8c","version":2}} -->