Code for the Advent of Code event
aoc advent-of-code
at rust 32 lines 738 B view raw
1#!/usr/bin/env ruby 2# frozen_string_literal: true 3 4EARLIEST = ARGF.readline.to_i 5SCHEDULE = ARGF.readline.split(?,).map(&:to_i) 6IDS = SCHEDULE.reject(&:zero?) 7 8def solve(id) 9 current = 0 10 current += id while current < EARLIEST 11 current 12end 13 14puts IDS.map { [_1, solve(_1)] }.min_by { _2 }.then { _1 * (_2 - EARLIEST) } 15 16OFFSETS = SCHEDULE.map.with_index { [_1.to_i, _2] }.reject { _1[0].zero? }.to_h 17 18def solve2 19 current = 0 20 21 loop do 22 valid = OFFSETS.select { |id, offset| (current + offset) % id == 0 } 23 return current if valid.size == OFFSETS.size 24 current += valid.map(&:first).reduce(:lcm) || 1 25 end 26end 27 28puts solve2 29 30# VERIFY solve2: 31# require_relative '../utils' 32# p Utils.crt(OFFSETS.keys, OFFSETS.map { -_2 % _1 })