day 9 part 1

This commit is contained in:
Caleb Webber 2023-12-09 01:12:04 -05:00
parent bd9170e332
commit 2c22dc9300

57
lib/2023/day9.ex Normal file
View file

@ -0,0 +1,57 @@
defmodule Mix.Tasks.Day9 do
use Mix.Task
def run(_) do
{_, content} = File.read("./input/2023_9.txt")
solve(content)|> inspect() |> IO.puts()
end
def solve(content) do
content
|> String.split("\n")
|> Stream.reject(&(&1 === ""))
|> Stream.map(fn line ->
line
|> String.split(" ")
|> Stream.map(&String.to_integer/1)
|> Enum.to_list()
end)
|> Stream.map(fn list ->
IO.puts(inspect(list))
extrapolate(list)
end)
|> Enum.reduce([],
fn l, acc ->
[l |> Enum.sum()
| acc]
end) |> Enum.sum()
end
def extrapolate(list) do
extrapolate(list, [])
end
def to_difference_list(nums) do
IO.puts("differencing #{inspect(nums)}")
list = nums
|> Stream.chunk_every(2, 1, :discard)
|> Enum.reduce([], fn [a,b], acc -> [ b - a | acc] end)
IO.puts("differenc was #{inspect(list)}")
list
end
def extrapolate([0], acc) do
[0 | acc]
end
def extrapolate(list, acc) do
IO.puts("extrapolating #{inspect(list)}")
extrapolate(
list |> to_difference_list() |> Enum.reverse(),
[list |> List.last() | acc]
)
end
end