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()