From aedc078ad7d215bfcad040cc7991cb128867e572 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sat, 1 Dec 2018 14:11:51 -0500 Subject: [PATCH] Day 1: add alternate part 2 solution --- lib/day1/day1.ex | 14 +++++++++++++- test/day1_test.exs | 8 ++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/day1/day1.ex b/lib/day1/day1.ex index 9374580..03a399f 100644 --- a/lib/day1/day1.ex +++ b/lib/day1/day1.ex @@ -16,6 +16,18 @@ defmodule Day1 do end end + def first_repetition_stream(shifts) do + shifts + |> Stream.cycle() + |> Enum.reduce_while({0, [0]}, fn shift, {sum, seen} -> + sum = sum + shift + cond do + Enum.member?(seen, sum) -> {:halt, sum} + true -> {:cont, {sum, [sum | seen]}} + end + end) + end + def parse_input() do File.read!("lib/day1/input.txt") |> String.split("\n") @@ -32,6 +44,6 @@ defmodule Day1 do def part2() do parse_input() - |> first_repetition() + |> first_repetition_stream() end end \ No newline at end of file diff --git a/test/day1_test.exs b/test/day1_test.exs index b33b6bc..bc358be 100644 --- a/test/day1_test.exs +++ b/test/day1_test.exs @@ -16,4 +16,12 @@ defmodule Day1Test do assert Day1.first_repetition([-6, 3, 8, 5, -6]) == 5 assert Day1.first_repetition([7, 7, -2, -7, -4]) == 14 end + + test "first repetition stream" do + assert Day1.first_repetition_stream([1, -2, 3, 1]) == 2 + assert Day1.first_repetition_stream([1, -1]) == 0 + assert Day1.first_repetition_stream([3, 3, 4, -2, -4]) == 10 + assert Day1.first_repetition_stream([-6, 3, 8, 5, -6]) == 5 + assert Day1.first_repetition_stream([7, 7, -2, -7, -4]) == 14 + end end