add 2024 day 22

This commit is contained in:
Caleb Webber 2024-12-31 14:14:39 -05:00
parent 7f25d06cc2
commit 8a74cdd86d

View file

@ -0,0 +1,86 @@
# Untitled notebook
```elixir
[{:kino_benchee, "~> 0.1.0"}] |> Mix.install
```
## Section
```elixir
input = """
"""
```
## Section
```elixir
defmodule MonkeyMarket do
@doc """
## Example
iex> MonkeyMarket.part2([1,2,3,2024])
23
"""
def part2(input) do
for m <- (
for j <- input do
diffs = MonkeyMarket.next(j, 2000)
|> Stream.map(&rem(&1, 10))
|> Enum.reverse()
|> Stream.chunk_every(2, 1, :discard)
|> Stream.map(fn [a,b] -> {b, b-a} end)
for [_,_,_,{n,_}] = chunk <- diffs
|> Stream.chunk_every(4, 1, :discard),
chunk = chunk |> Enum.map(&(elem(&1, 1))),
reduce: %{} do
acc2 ->
acc2 |> Map.update(chunk, n, &(&1))
end
end), reduce: %{} do
acc -> Map.merge(
m,
acc,
fn _, s1, s2 ->
s1+s2
end
)
end
|> Enum.max_by(&elem(&1, 1))
|> elem(1)
end
@doc """
## Example
iex> MonkeyMarket.part1([1,10,100,2024])
37327623
"""
def part1(input) do
input
|> Stream.map(&hd(MonkeyMarket.next(&1, 2000)))
|> Enum.sum()
end
def next(a) do
a = a |> Bitwise.bsl(6) |> Bitwise.bxor(a) |> Bitwise.band(16777215)
a = a |> Bitwise.bsr(5) |> Bitwise.bxor(a) |> Bitwise.band(16777215)
a |> Bitwise.bsl(11) |> Bitwise.bxor(a) |> Bitwise.band(16777215)
end
def next(a, x) when is_integer(a), do: next([a], x)
def next(a, 0), do: a
def next([prev | _ ] = a, n), do: next([next(prev) | a], n - 1)
end
```
```elixir
Benchee.run(%{
part1: fn -> MonkeyMarket.part1(input) end
})
```
```elixir
MonkeyMarket.part2(input)
```