From 8472e80777825295596283dd293af76aa632542e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20Str=C3=BCbing?= Date: Tue, 24 Sep 2019 20:37:58 +0200 Subject: [PATCH] Add day 1 --- lib/day1.ex | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/day1.ex b/lib/day1.ex index 1122ecc..5838222 100644 --- a/lib/day1.ex +++ b/lib/day1.ex @@ -25,7 +25,7 @@ defmodule AocKata.Day1 do """ @spec resulting_frequency(Enumerable.t()) :: integer def resulting_frequency(frequency_changes) do - # TODO implement + Enum.reduce(frequency_changes, 0, fn frequency, acc -> acc + get_integer(frequency) end) end @doc """ @@ -57,6 +57,25 @@ defmodule AocKata.Day1 do def resulting_frequency_fixed(frequency_changes) do frequency_changes = Stream.repeatedly(fn -> frequency_changes end) |> Stream.flat_map(& &1) - # TODO + {result, _} = + Enum.reduce_while(frequency_changes, {0, MapSet.new()}, fn frequency_change, + {frequency, visited_frequencies} -> + resulting_map = MapSet.put(visited_frequencies, frequency) + + if MapSet.member?(visited_frequencies, frequency) do + {:halt, {frequency, resulting_map}} + else + result = frequency + get_integer(frequency_change) + {:cont, {result, resulting_map}} + end + end) + + result + end + + # Helper functions + defp get_integer(stringified_number) do + {number, _} = Integer.parse(stringified_number) + number end end