Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Advent Of Code Day 1

day_01/day_one.livemd

Advent Of Code Day 1

Part 1

test_data = [
  199,
  200,
  208,
  210,
  200,
  207,
  240,
  269,
  260,
  263
]

defmodule Part1 do
  def increase_count(data) when is_list(data) do
    Enum.reduce(data, {nil, 0}, fn
      element, {nil, count} ->
        {element, count}

      element, {previous_element, count} ->
        if element > previous_element do
          {element, count + 1}
        else
          {element, count}
        end
    end)
    |> elem(1)
  end
end

Part1.increase_count(test_data)
7
data =
  "day_01/input.txt"
  |> File.read!()
  |> String.split()
  |> Enum.map(&String.to_integer/1)
[151, 152, 153, 158, 159, 163, 164, 162, 161, 167, 169, 168, 169, 170, 164, 175, 176, 178, 187, 186,
 193, 188, 192, 203, 206, 218, 215, 239, 243, 244, 238, 239, 240, 229, 245, 247, 255, 244, 250, 256,
 257, 263, 265, 267, 266, 267, 268, 271, 277, 278, ...]
Part1.increase_count(data)
1564

Part 2

defmodule Part2 do
  def sliding_increase(data) when is_list(data) do
    [_ | data_two] = data
    [_ | data_three] = data_two

    [data, data_two, data_three]
    |> Enum.zip()
    |> Enum.map(fn {a, b, c} -> a + b + c end)
    |> Part1.increase_count()
  end
end

Part2.sliding_increase(test_data)
{199, 269}