35 lines
662 B
Crystal
35 lines
662 B
Crystal
|
require "advent"
|
||
|
INPU = input(2020, 13).lines
|
||
|
INPUT = {INPU[0].to_i32, INPU[1].split(",")}
|
||
|
|
||
|
def part1(input)
|
||
|
early, busses = input
|
||
|
busses.reject! &.==("x")
|
||
|
busses = busses.map &.to_i32
|
||
|
bbus = busses.min_by do |b|
|
||
|
(early / b).ceil * b
|
||
|
end
|
||
|
diff = bbus * (((early/bbus).ceil * bbus).to_i32 - early)
|
||
|
end
|
||
|
|
||
|
def part2(input)
|
||
|
_, busses = input
|
||
|
busses = busses.map_with_index do |x, i|
|
||
|
x.to_i32?.try { |n| { n, i } }
|
||
|
end
|
||
|
busses = busses.compact
|
||
|
n = 0_i64
|
||
|
iter = 1_i64
|
||
|
busses.each do |m, i|
|
||
|
while (n + i) % m != 0
|
||
|
n += iter
|
||
|
end
|
||
|
iter *= m
|
||
|
end
|
||
|
puts n
|
||
|
puts busses
|
||
|
end
|
||
|
|
||
|
puts part1(INPUT.clone)
|
||
|
puts part2(INPUT.clone)
|