diff --git a/2023/day06.livemd b/2023/day06.livemd new file mode 100644 index 0000000..bc11b5e --- /dev/null +++ b/2023/day06.livemd @@ -0,0 +1,107 @@ + + +# Day 06 + +```elixir +Mix.install([:kino_aoc]) +``` + +## Section + + + +```elixir +{: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"} +``` + +```elixir +# puzzle_input = +""" +Time: 7 15 30 +Distance: 9 40 200 +""" +|> String.trim() +``` + + + +``` +"Time: 7 15 30\nDistance: 9 40 200" +``` + +```elixir +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 + +```elixir +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 + +```elixir +[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 +``` + +