Compare commits
2 commits
79638bc9c9
...
b1ed0e7706
Author | SHA1 | Date | |
---|---|---|---|
b1ed0e7706 | |||
246640d2a1 |
2 changed files with 22 additions and 6 deletions
|
@ -8,8 +8,7 @@ defmodule Day22 do
|
||||||
|
|
||||||
def next(secret) do
|
def next(secret) do
|
||||||
secret
|
secret
|
||||||
|> Kernel.*(64)
|
|> then(fn secret -> (secret * 64) |> mix(secret) end)
|
||||||
|> mix(secret)
|
|
||||||
|> prune()
|
|> prune()
|
||||||
|> then(fn secret -> div(secret, 32) |> mix(secret) end)
|
|> then(fn secret -> div(secret, 32) |> mix(secret) end)
|
||||||
|> prune()
|
|> prune()
|
||||||
|
@ -20,8 +19,25 @@ 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
|
||||||
:not_implemented
|
input
|
||||||
|
|> 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
|
||||||
|
|
4
dayN.exs
4
dayN.exs
|
@ -5,7 +5,7 @@ defmodule DayREPLACE_ME do
|
||||||
end
|
end
|
||||||
|
|
||||||
def part2(_input) do
|
def part2(_input) do
|
||||||
:ok
|
:not_implemented
|
||||||
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"
|
||||||
|
|
Loading…
Add table
Reference in a new issue