Day 13
This commit is contained in:
parent
ab1e845162
commit
ec84c5870b
|
@ -0,0 +1,67 @@
|
||||||
|
defmodule Day13 do
|
||||||
|
@example """
|
||||||
|
939
|
||||||
|
7,13,x,x,59,x,31,19
|
||||||
|
"""
|
||||||
|
|
||||||
|
def part1(example \\ false) do
|
||||||
|
{earliest_time, busses} = parse_input(example)
|
||||||
|
|
||||||
|
bus_id =
|
||||||
|
busses
|
||||||
|
|> Enum.reject(&(&1 == "x"))
|
||||||
|
|> Enum.min_by(fn bus ->
|
||||||
|
bus - rem(earliest_time, bus)
|
||||||
|
end)
|
||||||
|
|
||||||
|
bus_id * (bus_id - rem(earliest_time, bus_id))
|
||||||
|
end
|
||||||
|
|
||||||
|
def part2(example \\ false) do
|
||||||
|
{_, busses} = parse_input(example)
|
||||||
|
|
||||||
|
busses =
|
||||||
|
busses
|
||||||
|
|> Enum.with_index()
|
||||||
|
|> Enum.reject(&(elem(&1, 0) == "x"))
|
||||||
|
|
||||||
|
find_time(0, busses)
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_input(example) do
|
||||||
|
[l1, l2] =
|
||||||
|
if(example, do: @example, else: File.read!("lib/day13/input.txt"))
|
||||||
|
|> String.trim()
|
||||||
|
|> String.split()
|
||||||
|
|
||||||
|
busses =
|
||||||
|
l2
|
||||||
|
|> String.split(",")
|
||||||
|
|> Enum.map(fn
|
||||||
|
"x" -> "x"
|
||||||
|
s -> String.to_integer(s)
|
||||||
|
end)
|
||||||
|
|
||||||
|
{String.to_integer(l1), busses}
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_time(time, busses) do
|
||||||
|
{valid, rest} =
|
||||||
|
Enum.split_while(busses, fn {id, index} ->
|
||||||
|
rem(time + index, id) == 0
|
||||||
|
end)
|
||||||
|
|
||||||
|
case rest do
|
||||||
|
[] ->
|
||||||
|
time
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
if valid == [] do
|
||||||
|
raise "uh oh"
|
||||||
|
end
|
||||||
|
|
||||||
|
step = Enum.reduce(valid, 1, &(elem(&1, 0) * &2))
|
||||||
|
find_time(time + step, busses)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
1002618
|
||||||
|
19,x,x,x,x,x,x,x,x,41,x,x,x,37,x,x,x,x,x,367,x,x,x,x,x,x,x,x,x,x,x,x,13,x,x,x,17,x,x,x,x,x,x,x,x,x,x,x,29,x,373,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,23
|
Loading…
Reference in New Issue