From 406d9cc34db97c17deed8447f842574d527d964c Mon Sep 17 00:00:00 2001 From: Caleb Webber Date: Fri, 20 Oct 2023 13:09:34 -0400 Subject: [PATCH] day 1 part 1 --- .tool-versions | 2 ++ day1.ex | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 .tool-versions create mode 100644 day1.ex diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..671cba5 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +erlang 26.1.1 +elixir 1.15.6-otp-26 diff --git a/day1.ex b/day1.ex new file mode 100644 index 0000000..d1129dd --- /dev/null +++ b/day1.ex @@ -0,0 +1,45 @@ +defmodule Excersize1 do + def to_command(s) do + try do + {:add, s |> String.trim() |> String.to_integer()} + rescue + ArgumentError -> {:reset} + end + end + + def init_state() do + {nil, 0, false} + end + def apply_command(command, state) do + case command do + {:add, n} -> apply_add(n, state) + {:reset} -> apply_reset(state) + end + end + + defp apply_add(n, state) do + {current, total, exit} = state + new_current = if is_nil(current) do 0 else current end + n + {new_current, max(total, new_current), exit} + end + + defp apply_reset(state) do + {current, total, exit} = state + case current do + nil -> {current, total, true} + _ -> {nil, total, exit} + end + end +end + +result = IO.stream() |> + Enum.reduce_while( + Excersize1.init_state(), + fn line, acc -> line + |> Excersize1.to_command() + |> Excersize1.apply_command(acc) + |> then(fn acc -> if elem(acc, 2) do {:halt, acc} else {:cont, acc} end end) + end + ) + + IO.puts(elem(result, 1))