Day 06
Mix.install([:kino_aoc])
Section
{:ok, puzzle_input} =
KinoAOC.download_puzzle("2023", "6", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
{:ok, "Time: 44 80 65 72\nDistance: 208 1581 1050 1102"}
# puzzle_input =
"""
Time: 7 15 30
Distance: 9 40 200
"""
|> String.trim()
"Time: 7 15 30\nDistance: 9 40 200"
defmodule Day06 do
def solve(t, d) do
delta = t ** 2 - 4 * d
sq_delta = :math.sqrt(delta)
diff = if sq_delta == floor(sq_delta), do: 1, else: 0
x1 = (-t + sq_delta) / -2
x2 = (-t - sq_delta) / -2
ceil(x2) - ceil(x1) - diff
end
end
{:module, Day06, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:solve, 2}}
Part 1
puzzle_input
|> String.split("\n")
|> Enum.map(fn line ->
line
|> String.split(" ", trim: true)
|> tl()
|> Enum.map(&String.to_integer/1)
end)
|> Enum.zip()
|> Enum.map(fn {t, d} -> Day06.solve(t, d) end)
|> Enum.product()
32076
Part 2
[t, d] =
puzzle_input
|> String.split("\n")
|> Enum.map(fn line ->
line
|> String.split(" ", trim: true)
|> tl()
|> Enum.join()
|> String.to_integer()
end)
Day06.solve(t, d)
34278221