this repo has no description

Improve performance od day 07 and fix day 06 title

hauleth.dev 807c3e37 ce68d8fd

verified
Changed files
+18 -16
2024
+2 -2
2024/day06.livemd
···
<!-- livebook:{"persist_outputs":true} -->
-
# Untitled notebook
```elixir
Mix.install([:kino_aoc, :arrays])
···
4432
```
-
<!-- livebook:{"offset":7387,"stamp":{"token":"XCP.Wj_YFc-zYzAPEIaLCGnT6vtMYoDgv-DJ3xiuAVdHZPkMwNpP5jrmLW4LBe4lzRgNN75xF-FYACOKdzd82Z71i5y8yC5Wmd072w6qDXxmygH8fZvTOAZM02UZvvg20b5Yhv0","version":2}} -->
···
<!-- livebook:{"persist_outputs":true} -->
+
# Day 06
```elixir
Mix.install([:kino_aoc, :arrays])
···
4432
```
+
<!-- livebook:{"offset":7376,"stamp":{"token":"XCP.Bv-aM7sns5Kb69SQdY4giDFl6fWiJ5L3lnISxUUjGi_DgTgM_r5rl-y8sy2RLl-KbEtOmW99QQsGItLYJhKJmkOZ5pPZ_7Aw3BhkL_ap8RnW8UkOt_OsNdpqoZT7FEDtmFQ","version":2}} -->
+16 -14
2024/day07.livemd
···
```
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)
-
└─ Workspace/hauleth/advent-of-code/2024/day07.livemd#cell:5stfqvjgwz4d5v5a:1
```
···
defmodule Eq.P1 do
def possible?(0, []), do: true
def possible?(a, [a]), do: true
-
def possible?(0, [_|_]), do: false
def possible?(_, []), do: false
def possible?(a, _) when a < 0, do: false
···
|> Enum.filter(fn {target, vals} ->
Eq.P1.possible?(target, Enum.reverse(vals))
end)
-
|> Enum.reduce(0, & elem(&1, 0) + &2)
```
<!-- livebook:{"output":true} -->
···
defmodule Eq.P2 do
def possible?(a, [hd | rest]), do: possible?(a, hd, rest)
-
def possible?(a, a, []), do: true
-
def possible?(_, _, []), do: false
-
def possible?(a, b, _) when b > a, do: false
-
def possible?(target, curr, [a | rest]) do
possible?(target, concat(curr, a), rest) or
-
possible?(target, curr + a, rest) or
-
possible?(target, curr * a, rest)
end
-
def concat(a, b) do
-
String.to_integer("#{a}#{b}")
-
end
end
```
<!-- livebook:{"output":true} -->
```
-
{:module, Eq.P2, <<70, 79, 82, 49, 0, 0, 10, ...>>, {:concat, 2}}
```
```elixir
···
264184041398847
```
-
<!-- livebook:{"offset":9239,"stamp":{"token":"XCP.jahJhDMdAl3PqiPODSOJfIpJq_WE2I1sNvBUcNkY-FP-lUYFrioZW8V3FxbSGrS_-uFSLbRAfdSuAPnnK09vkzrcdjq7uz6-aRoxHbpcVgFwLC_l-sbpUMFFHwKci93vcoE","version":2}} -->
···
```
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)
+
└─ Workspace/hauleth/advent-of-code/2024/day07.livemd#cell:7pxlqq2wa3oqdwfr:1
```
···
defmodule Eq.P1 do
def possible?(0, []), do: true
def possible?(a, [a]), do: true
+
def possible?(0, [_ | _]), do: false
def possible?(_, []), do: false
def possible?(a, _) when a < 0, do: false
···
|> Enum.filter(fn {target, vals} ->
Eq.P1.possible?(target, Enum.reverse(vals))
end)
+
|> Enum.reduce(0, &(elem(&1, 0) + &2))
```
<!-- livebook:{"output":true} -->
···
defmodule Eq.P2 do
def possible?(a, [hd | rest]), do: possible?(a, hd, rest)
+
defp possible?(a, a, []), do: true
+
defp possible?(_, _, []), do: false
+
defp possible?(a, b, _) when b > a, do: false
+
defp possible?(target, curr, [a | rest]) do
possible?(target, concat(curr, a), rest) or
+
possible?(target, curr * a, rest) or
+
possible?(target, curr + a, rest)
end
+
defp concat(a, b), do: a * l10(b) + b
+
+
defp l10(n) when n >= 100, do: 1000
+
defp l10(n) when n >= 10, do: 100
+
defp l10(_), do: 10
end
```
<!-- livebook:{"output":true} -->
```
+
{:module, Eq.P2, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:l10, 1}}
```
```elixir
···
264184041398847
```
+
<!-- livebook:{"offset":9317,"stamp":{"token":"XCP.DCDL30p1jz3L9vRDdQ5EJLc3r7y1DTsVhQ3GXFK_huvoEXqgYu2TTOfTq8AFYpt5W6fEIo4MvfrnHttbqS-z4SjRkT7WM09v09mZ_FeyqstWzLMCK_oNqhrrdwPPv5BG_8c","version":2}} -->