Ruby で 3 桁の数の積として作成できる回文の最高位を見つけたかったのです。基本的な疑似コードは次のようになります。
999から始まり、100まで下がる
それぞれの数を掛ける
数字の逆数が数字と同じ場合は停止します。
ここに私が書いたルビーコードがありますが、うまくいかないようです。
start = 100; stop = 999;
stop.downto(start) do |i|
stop.downto(start) do |j|
nm = i*j
nms = nm.to_s
if nms == nms.reverse
puts nms
end
break
end
end
アップデート
欠陥を指摘してくれてありがとう。以下は私が思いついたもので、動作します:
def top_down_palin
maxi = -999
arr = []
start = 100; stop = 999;
stop.downto(start) do |i|
i.downto(start) do |j|
nm = i*j
nms = nm.to_s
if nms == nms.reverse
if nm > maxi
maxi = nm
end
end
end
end
puts maxi
end
この場合、ボトムアップ(セルジオのアプローチ)よりもトップダウンの方が速いことは明らかであるため、時間プロファイリングを行いました。
def time
start = Time.now
yield
puts Time.now - start
end
私のシステムでは、トップダウンのアプローチには0.614742 秒かかり、ボトムアップのアプローチには 0.839568秒かかります。