読者です 読者をやめる 読者になる 読者になる

毛のはえたようなもの

インターネット的なものをつらつらとかきつらねる。

Problem 4

Ruby ProjectEuler

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。
では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。

Problem 4 - PukiWiki

a+b=一定のときaとbの値がもっとも近いときa*bが一番大きくなるので、そこからじゅんぐりに探して行きます。a+b=一定のとき、回文を見つける→それより大きいa*b(ただし=b or a=b+1)がなくなるまでの範囲で探して、その中で一番大きいものを解とする、ということです。
はいはい単純にやってみましたよ。もっと短くなる気がしますが.

def palindrome?(num)
  array = []
  flag = true

  while num > 0
    num,tmp = num.divmod(10)
    array.unshift(tmp)
  end

  while array.size > 0 
    flag = false and break if array.shift != array.pop
  end

  return flag
end

def find_palindrome(max)
  sumlimit = max*2
  find_max_palindrome = 0

  (0..99).each{|i|
    small = ((sumlimit-i)/2).to_i
    large = sumlimit-i - small
    break if(find_max_palindrome != 0 || find_max_palindrome > small* large)
    (0..(max-large)).each{|j|
      target = (large+j)*(small-j)
      if palindrome?(target)
        find_max_palindrome = [find_max_palindrome, target].max
      end
    }
  }
  return find_max_palindrome
end

p find_palindrome(999)

答え:906609