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
Improve performance od day 07 and fix day 06 title
hauleth.dev
1 year ago
807c3e37
ce68d8fd
verified
This commit was signed with the committer's
known signature
.
hauleth.dev
SSH Key Fingerprint:
SHA256:1hEP8QO8nM2KQfQ8jK4Q19y/CmqVZQI/cNSht3c1QlI=
+18
-16
2 changed files
expand all
collapse all
unified
split
2024
day06.livemd
day07.livemd
+2
-2
2024/day06.livemd
···
1
<!-- livebook:{"persist_outputs":true} -->
2
3
-
# Untitled notebook
4
5
```elixir
6
Mix.install([:kino_aoc, :arrays])
···
184
4432
185
```
186
187
-
<!-- livebook:{"offset":7387,"stamp":{"token":"XCP.Wj_YFc-zYzAPEIaLCGnT6vtMYoDgv-DJ3xiuAVdHZPkMwNpP5jrmLW4LBe4lzRgNN75xF-FYACOKdzd82Z71i5y8yC5Wmd072w6qDXxmygH8fZvTOAZM02UZvvg20b5Yhv0","version":2}} -->
···
1
<!-- livebook:{"persist_outputs":true} -->
2
3
+
# Day 06
4
5
```elixir
6
Mix.install([:kino_aoc, :arrays])
···
184
4432
185
```
186
187
+
<!-- livebook:{"offset":7376,"stamp":{"token":"XCP.Bv-aM7sns5Kb69SQdY4giDFl6fWiJ5L3lnISxUUjGi_DgTgM_r5rl-y8sy2RLl-KbEtOmW99QQsGItLYJhKJmkOZ5pPZ_7Aw3BhkL_ap8RnW8UkOt_OsNdpqoZT7FEDtmFQ","version":2}} -->
+16
-14
2024/day07.livemd
···
55
56
```
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
59
60
```
61
···
123
defmodule Eq.P1 do
124
def possible?(0, []), do: true
125
def possible?(a, [a]), do: true
126
-
def possible?(0, [_|_]), do: false
127
def possible?(_, []), do: false
128
def possible?(a, _) when a < 0, do: false
129
···
146
|> Enum.filter(fn {target, vals} ->
147
Eq.P1.possible?(target, Enum.reverse(vals))
148
end)
149
-
|> Enum.reduce(0, & elem(&1, 0) + &2)
150
```
151
152
<!-- livebook:{"output":true} -->
···
161
defmodule Eq.P2 do
162
def possible?(a, [hd | rest]), do: possible?(a, hd, rest)
163
164
-
def possible?(a, a, []), do: true
165
-
def possible?(_, _, []), do: false
166
-
def possible?(a, b, _) when b > a, do: false
167
168
-
def possible?(target, curr, [a | rest]) do
169
possible?(target, concat(curr, a), rest) or
170
-
possible?(target, curr + a, rest) or
171
-
possible?(target, curr * a, rest)
172
end
173
174
-
def concat(a, b) do
175
-
String.to_integer("#{a}#{b}")
176
-
end
0
0
177
end
178
```
179
180
<!-- livebook:{"output":true} -->
181
182
```
183
-
{:module, Eq.P2, <<70, 79, 82, 49, 0, 0, 10, ...>>, {:concat, 2}}
184
```
185
186
```elixir
···
200
264184041398847
201
```
202
203
-
<!-- livebook:{"offset":9239,"stamp":{"token":"XCP.jahJhDMdAl3PqiPODSOJfIpJq_WE2I1sNvBUcNkY-FP-lUYFrioZW8V3FxbSGrS_-uFSLbRAfdSuAPnnK09vkzrcdjq7uz6-aRoxHbpcVgFwLC_l-sbpUMFFHwKci93vcoE","version":2}} -->
···
55
56
```
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:7pxlqq2wa3oqdwfr:1
59
60
```
61
···
123
defmodule Eq.P1 do
124
def possible?(0, []), do: true
125
def possible?(a, [a]), do: true
126
+
def possible?(0, [_ | _]), do: false
127
def possible?(_, []), do: false
128
def possible?(a, _) when a < 0, do: false
129
···
146
|> Enum.filter(fn {target, vals} ->
147
Eq.P1.possible?(target, Enum.reverse(vals))
148
end)
149
+
|> Enum.reduce(0, &(elem(&1, 0) + &2))
150
```
151
152
<!-- livebook:{"output":true} -->
···
161
defmodule Eq.P2 do
162
def possible?(a, [hd | rest]), do: possible?(a, hd, rest)
163
164
+
defp possible?(a, a, []), do: true
165
+
defp possible?(_, _, []), do: false
166
+
defp possible?(a, b, _) when b > a, do: false
167
168
+
defp possible?(target, curr, [a | rest]) do
169
possible?(target, concat(curr, a), rest) or
170
+
possible?(target, curr * a, rest) or
171
+
possible?(target, curr + a, rest)
172
end
173
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
179
end
180
```
181
182
<!-- livebook:{"output":true} -->
183
184
```
185
+
{:module, Eq.P2, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:l10, 1}}
186
```
187
188
```elixir
···
202
264184041398847
203
```
204
205
+
<!-- livebook:{"offset":9317,"stamp":{"token":"XCP.DCDL30p1jz3L9vRDdQ5EJLc3r7y1DTsVhQ3GXFK_huvoEXqgYu2TTOfTq8AFYpt5W6fEIo4MvfrnHttbqS-z4SjRkT7WM09v09mZ_FeyqstWzLMCK_oNqhrrdwPPv5BG_8c","version":2}} -->