Day 6
Day 6: Wait For It
Day 6: Wait For It
Input
input = """
Time:      7  15   30
Distance:  9  40  200
"""
Part 1
defmodule Awesome do
  def run(input) do
    races(input)
    |> Enum.map(fn {time, distance} -> solve(time, distance) end)
    |> Enum.product()
  end
  defp solve(time, distance) do
    1..time
    |> Enum.filter(fn t ->
      speed = t
      left_time = time - t
      left_time * speed > distance
    end)
    |> Enum.count()
  end
  defp races(input) do
    input
    |> String.split("\n", trim: true)
    |> Enum.map(fn s ->
      s
      |> String.split(":")
      |> Enum.at(-1)
      |> String.split(" ", trim: true)
      |> Enum.map(&String.to_integer/1)
    end)
    |> Enum.zip()
  end
end
Awesome.run(input)
puzzle_input = """
Time:        57     72     69     92
Distance:   291   1172   1176   2026
"""
Awesome.run(puzzle_input)
Part 2
defmodule Awesome2 do
  def run(input) do
    [time, distance] = races(input)
    solve(time, distance)
  end
  defp solve(time, distance) do
    1..time
    |> Enum.filter(fn t ->
      speed = t
      left_time = time - t
      left_time * speed > distance
    end)
    |> Enum.count()
  end
  defp races(input) do
    input
    |> String.split("\n", trim: true)
    |> Enum.map(fn s ->
      s
      |> String.split(":")
      |> Enum.at(-1)
      |> String.split(" ", trim: true)
      |> Enum.join()
      |> String.to_integer()
    end)
  end
end
Awesome2.run(input)
Awesome2.run(puzzle_input)