diff --git a/day_13/first.rb b/day_13/first.rb new file mode 100644 index 0000000..df9a902 --- /dev/null +++ b/day_13/first.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +input = File.readlines('./input') + +$earliest = Integer(input.first) +$ids = input[1].split(',') +$ids.delete 'x' +$ids = $ids.map(&:to_i) + +out = $ids.map do |id| + b = $earliest / id + nearest = b * id + nearest < $earliest ? nearest + id : nearest +end + +busid = $ids[out.index(out.min)] + +puts busid * (out.min - $earliest) diff --git a/day_13/input b/day_13/input new file mode 100644 index 0000000..36f269f --- /dev/null +++ b/day_13/input @@ -0,0 +1,2 @@ +1000186 +17,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,907,x,x,x,x,x,x,x,x,x,x,x,19,x,x,x,x,x,x,x,x,x,x,23,x,x,x,x,x,29,x,653,x,x,x,x,x,x,x,x,x,41,x,x,13 diff --git a/day_13/second.rb b/day_13/second.rb new file mode 100644 index 0000000..047c6f2 --- /dev/null +++ b/day_13/second.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +input = File.readlines('./input') + +$ids = input[1].split(',') +$ids = $ids.map(&:to_i) + +$first = 0 +$period = 1 + +$ids.each_with_index do |bus_period, id| + next if bus_period == 0 + + 0.step do |i| + cand = $first + $period * i + if (cand + id) % bus_period == 0 + $first = cand + $period = $period.lcm bus_period + break + end + end +end + +puts $first diff --git a/day_13/test b/day_13/test new file mode 100644 index 0000000..d76f619 --- /dev/null +++ b/day_13/test @@ -0,0 +1,2 @@ +939 +7,13,x,x,59,x,31,19