#!/usr/bin/env ruby def generate(value, factor) (value * factor) % 2147483647 end line_1, line_2 = STDIN.read.chomp.split("\n").to_a generator_a_start = line_1.gsub("Generator A starts with ", "").to_i generator_b_start = line_2.gsub("Generator B starts with ", "").to_i a_factor = 16807 b_factor = 48271 a = generator_a_start b = generator_b_start pairs = 0 40000000.times do a = generate(a, a_factor) b = generate(b, b_factor) pairs += 1 if (a & 65535 == b & 65535) end puts "Part 1: #{pairs}" a = generator_a_start b = generator_b_start pairs = 0 5000000.times do a = generate(a, a_factor) a = generate(a, a_factor) until (a % 4) == 0 b = generate(b, b_factor) b = generate(b, b_factor) until (b % 8) == 0 pairs += 1 if (a & 65535 == b & 65535) end puts "Part 2: #{pairs}"