間違った約分でも正解になる分数
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