Compare commits

..

No commits in common. "b1ed0e7706b135d390e6215bab30ecaefee83c2a" and "79638bc9c967460d778343d60e899bce209f04a9" have entirely different histories.

2 changed files with 6 additions and 22 deletions

View file

@ -8,7 +8,8 @@ defmodule Day22 do
def next(secret) do def next(secret) do
secret secret
|> then(fn secret -> (secret * 64) |> mix(secret) end) |> Kernel.*(64)
|> mix(secret)
|> prune() |> prune()
|> then(fn secret -> div(secret, 32) |> mix(secret) end) |> then(fn secret -> div(secret, 32) |> mix(secret) end)
|> prune() |> prune()
@ -19,25 +20,8 @@ defmodule Day22 do
def mix(num, secret), do: Bitwise.bxor(secret, num) def mix(num, secret), do: Bitwise.bxor(secret, num)
def prune(secret), do: rem(secret, 16_777_216) def prune(secret), do: rem(secret, 16_777_216)
def part2(input) do def part2(_input) do
input :not_implemented
|> Enum.map(fn secret ->
secret
|> Stream.iterate(&next/1)
|> Stream.map(&bananas/1)
|> Stream.take(2000)
|> Enum.chunk_every(5, 1, :discard)
|> Enum.reduce(%{}, fn [a, b, c, d, bananas], changes ->
Map.put_new(changes, {b - a, c - b, d - c, bananas - d}, bananas)
end)
end)
|> Enum.reduce(&Map.merge(&1, &2, fn _k, v1, v2 -> v1 + v2 end))
|> Enum.max_by(fn {_sequence, bananas} -> bananas end)
|> elem(1)
end
def bananas(secret) do
secret |> Integer.to_string() |> String.last() |> String.to_integer()
end end
def input do def input do

View file

@ -5,7 +5,7 @@ defmodule DayREPLACE_ME do
end end
def part2(_input) do def part2(_input) do
:not_implemented :ok
end end
def input do def input do
@ -36,7 +36,7 @@ defmodule DayREPLACE_ME do
defp run_with_timer(part, fun) do defp run_with_timer(part, fun) do
{time, result} = :timer.tc(fun) {time, result} = :timer.tc(fun)
IO.puts("Part #{part} (completed in #{format_time(time)}):\n") IO.puts("Part #{part} (completed in #{format_time(time)}):\n")
IO.puts("#{inspect(result)}\n") IO.puts("#{inspect result}\n")
end end
defp format_time(μsec) when μsec < 1_000, do: "#{μsec}μs" defp format_time(μsec) when μsec < 1_000, do: "#{μsec}μs"