From 6a55ccc72ed817fdcdbd6cd03b49889983174a92 Mon Sep 17 00:00:00 2001 From: Caleb Webber Date: Sun, 13 Apr 2025 14:21:48 -0400 Subject: [PATCH] add 2021 day 1 --- elixir/.formatter.exs | 4 +++ elixir/.gitignore | 3 +++ elixir/lib/Y2021/day1.exs | 51 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 elixir/.formatter.exs create mode 100644 elixir/lib/Y2021/day1.exs diff --git a/elixir/.formatter.exs b/elixir/.formatter.exs new file mode 100644 index 0000000..d2cda26 --- /dev/null +++ b/elixir/.formatter.exs @@ -0,0 +1,4 @@ +# Used by "mix format" +[ + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] +] diff --git a/elixir/.gitignore b/elixir/.gitignore index c7fd02e..fd304eb 100644 --- a/elixir/.gitignore +++ b/elixir/.gitignore @@ -26,3 +26,6 @@ aoc-*.tar /tmp/ .session + +# Input files +*.txt diff --git a/elixir/lib/Y2021/day1.exs b/elixir/lib/Y2021/day1.exs new file mode 100644 index 0000000..7b684c9 --- /dev/null +++ b/elixir/lib/Y2021/day1.exs @@ -0,0 +1,51 @@ +test_input = [ + 199, + 200, + 208, + 210, + 200, + 207, + 240, + 269, + 260, + 263 +] + +# part 1 solution +solve = fn input -> + input + |> Stream.chunk_every(2, 1, :discard) + |> Stream.map(fn [a,b] -> b - a end) + |> Stream.filter(fn a -> a > 0 end) + |> Enum.count() +end + +# transform problem for part 2 +window_sum = fn input -> + input + |> Stream.chunk_every(3, 1, :discard) + |> Stream.map(&Enum.sum/1) +end + +# verify solution for test input +if not(solve.(test_input) == 7) or not(solve.(test_input |> window_sum.()) == 5) do + raise "solution doesn't solve test input" +end + +# parse input from text data to solve +parse = fn input -> + input + |> Stream.map(&String.trim/1) + |> Stream.reject(&(&1 == "")) + |> Stream.map(&String.to_integer/1) +end + + +File.stream!("./day1.txt") +|> parse.() +|> then(fn i -> + p1 = i |> solve.() + p2 = i |> window_sum.() |> solve.() + "p1: #{p1}\tp2: #{p2}" + end) +|> IO.puts()