def gcd(a, b)
  b == 0 ? a : gcd(b, a % b)
end

def generate_fractional_pairs
  pairs = []
  (10..99).each do |i|
    (10..99).each do |j|
      pairs << [i,j] if i < j
    end
  end
  pairs
end

def check_weird_cancellations
  solutions = []
  fractions = generate_fractional_pairs

  fractions.each do |fraction|
    next if fraction.first % 10 == 0
    num = fraction.first.to_s
    den = fraction.last.to_s

    if (num.include?(den[0]))
      digit = num[num.index(den[0])]
      new_num = num.delete(digit)
      new_den = den.delete(digit)
    elsif (num.include?(den[1]))
      digit = num[num.index(den[1])]
      new_num = num.delete(digit)
      new_den = den.delete(digit)
    end

    solutions << [fraction.first, fraction.last] if (num.to_f / den.to_f) == (new_num.to_f / new_den.to_f)

  end
  solutions
end

def reduce_fraction(numerator, denominator)
  until (gcd = gcd(numerator, denominator)) == 1
    numerator /= gcd
    denominator /= gcd
  end
  [numerator, denominator]
end

def multiply_fractions(fractions)
  numerators = 1
  denominators = 1
  fractions.each do |fraction|
    numerators *= fraction.first
    denominators *= fraction.last
  end
  reduce_fraction(numerators, denominators)
end