38 lines
720 B
Elixir
38 lines
720 B
Elixir
defmodule Aoc2023.Day6 do
|
|
use Aoc2023
|
|
|
|
def parse(input) do
|
|
input
|
|
|> lines
|
|
|> Enum.map(pipe(
|
|
String.split(":")
|
|
|> Enum.at(1)
|
|
))
|
|
end
|
|
|
|
def part1(input) do
|
|
input
|
|
|> Enum.map(pipe(
|
|
String.split()
|
|
|> Enum.map(&String.to_integer/1)
|
|
))
|
|
|> Enum.zip()
|
|
|> Enum.map(fn {time, dist} ->
|
|
1..time
|
|
|> Enum.map(&(&1 * (time - &1)))
|
|
|> Enum.filter(&(&1 > dist))
|
|
|> length
|
|
end)
|
|
|> Enum.product()
|
|
end
|
|
|
|
def part2(input) do
|
|
[time, dist] = input
|
|
|> Enum.map(pipe(String.replace(~r(\s+), "") |> String.to_integer()))
|
|
1..(time)
|
|
|> Stream.map(&(&1 * (time - &1)))
|
|
|> Stream.filter(&(&1 > dist))
|
|
|> Enum.count
|
|
end
|
|
end
|