Skip to content

Instantly share code, notes, and snippets.

@mtarnovan
Created December 1, 2018 19:33
Show Gist options
  • Save mtarnovan/058a373fd3cd7d14389e05d5b92371ff to your computer and use it in GitHub Desktop.
Save mtarnovan/058a373fd3cd7d14389e05d5b92371ff to your computer and use it in GitHub Desktop.
adventofcode-day1
defmodule Day1 do
def read_input do
"input.txt"
|> File.stream!()
|> Stream.map(&String.trim/1)
|> Stream.map(&String.to_integer/1)
end
def combine_freq(input) do
Enum.reduce(input, &Kernel.+/2)
end
def find_repeat_freq(state \\ {MapSet.new(), 0}, input) do
state =
input
|> Enum.reduce_while(state, fn x, {seen_freq, sum} ->
freq = x + sum
if MapSet.member?(seen_freq, freq) do
{:halt, {:found, freq}}
else
{:cont, {MapSet.put(seen_freq, freq), freq}}
end
end)
case state do
{:found, freq} -> freq
state -> find_repeat_freq(state, input)
end
end
end
combined = Day1.combine_freq(Day1.read_input())
repeated = Day1.find_repeat_freq(Day1.read_input())
IO.puts("Combined freq is: #{combined}")
IO.puts("Repeated freq is: #{repeated}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment