diff --git a/lib/day1.ex b/lib/day1.ex index 1122ecc..529a814 100644 --- a/lib/day1.ex +++ b/lib/day1.ex @@ -25,7 +25,8 @@ defmodule AocKata.Day1 do """ @spec resulting_frequency(Enumerable.t()) :: integer def resulting_frequency(frequency_changes) do - # TODO implement + frequency_changes + |> Enum.reduce(0, &(String.to_integer(&1) + &2)) end @doc """ @@ -55,8 +56,16 @@ defmodule AocKata.Day1 do """ @spec resulting_frequency_fixed(Enumerable.t()) :: integer def resulting_frequency_fixed(frequency_changes) do - frequency_changes = Stream.repeatedly(fn -> frequency_changes end) |> Stream.flat_map(& &1) + frequency_changes + |> Stream.cycle() + |> Enum.reduce_while({0, %{0 => true}}, fn change, {frequency, reached_frequencies} -> + frequency = frequency + String.to_integer(change) - # TODO + if reached_frequencies[frequency] do + {:halt, frequency} + else + {:cont, {frequency, Map.put(reached_frequencies, frequency, true)}} + end + end) end end