間違った約分でも正解になる分数

Project Euler 33。49/98という分数で、間違って9を消す「約分」をしてしまっても、「4/8」となり、実は結果は正しい。こういう変な分数を、分子・分母が2ケタのものについて自明なものを除いて全部探せ。というような問題。「65/26→5/2」というのがちょっと面白かった。unlessの条件や、無理な返り値100で解を排除するのとか、ださいけど、Project Eulerってreplで答えを出すような感じなので、これ以上やる気が起きない。

def incorrect_simplify(i, j)
  a = i / 10
  b = i % 10
  c = j / 10
  d = j % 10

  case
  when a == c
    return b, d
  when a == d
    return b, c
  when b == c
    return a, d
  when b == d
    return a, c
  end

  return 100, 100
end

ans = []

(10..99).each do |i|
  (10..99).each do |j|
      a, b = incorrect_simplify(i, j)
      unless b == 0 or j == 0 or b == 100 or i == j or (i % 10) == 0 or (j % 10) == 0 or j < i
        if Rational(a, b) == Rational(i, j)
          puts "#{i} / #{j}"
          ans << [i, j]
        end
      end
    end
  end
end

r = 1
ans.each do |n|
  r *= Rational(n[0], n[1])
end
puts r