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)
 |