From 07fecf811d3a4f7e077b3404b6a5eb6231dad68b Mon Sep 17 00:00:00 2001 From: bluepython508 Date: Sat, 9 Dec 2023 12:03:00 +0000 Subject: [PATCH] Day 9 --- lib/day9.ex | 35 +++++++++++++++++++++++++++++++++++ lib/mix_tasks.ex | 3 ++- tests/day9/1 | 3 +++ tests/day9/1.1 | 1 + tests/day9/1.2 | 1 + 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 lib/day9.ex create mode 100644 tests/day9/1 create mode 100644 tests/day9/1.1 create mode 100644 tests/day9/1.2 diff --git a/lib/day9.ex b/lib/day9.ex new file mode 100644 index 0000000..347bc80 --- /dev/null +++ b/lib/day9.ex @@ -0,0 +1,35 @@ +defmodule Aoc2023.Day9 do + use Aoc2023 + + defp differences(lst) do + Enum.zip_with(lst, Enum.drop(lst, 1), &(&2 - &1)) + end + + defp prediction(lst) do + diffs = differences(lst) + + if Enum.all?(diffs, &(&1 == 0)) do + List.first(lst) + else + List.last(lst) + prediction(diffs) + end + end + + def parse(input) do + input + |> lines + |> Enum.map(pipe(String.split() |> Enum.map(&String.to_integer/1))) + end + + def part1(input) do + input + |> Enum.map(&prediction/1) + |> Enum.sum + end + + def part2(input) do + input + |> Enum.map(pipe(Enum.reverse |> prediction)) + |> Enum.sum + end +end diff --git a/lib/mix_tasks.ex b/lib/mix_tasks.ex index d7d0a41..834e38f 100644 --- a/lib/mix_tasks.ex +++ b/lib/mix_tasks.ex @@ -10,6 +10,7 @@ defmodule Mix.Tasks.Aoc do defp module(6), do: Aoc2023.Day6 defp module(7), do: Aoc2023.Day7 defp module(8), do: Aoc2023.Day8 + defp module(9), do: Aoc2023.Day9 # [MODULE INSERTION POINT] defp base_dir(), do: System.get_env("AOC_BASE") @@ -204,4 +205,4 @@ defmodule Mix.Tasks.Aoc do {:noreply, state} end end -end +end \ No newline at end of file diff --git a/tests/day9/1 b/tests/day9/1 new file mode 100644 index 0000000..539a763 --- /dev/null +++ b/tests/day9/1 @@ -0,0 +1,3 @@ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45 diff --git a/tests/day9/1.1 b/tests/day9/1.1 new file mode 100644 index 0000000..dee79f1 --- /dev/null +++ b/tests/day9/1.1 @@ -0,0 +1 @@ +114 diff --git a/tests/day9/1.2 b/tests/day9/1.2 new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/tests/day9/1.2 @@ -0,0 +1 @@ +2