2012-12-29 85 views
-1

我在學習ruby並試圖解決「最大的迴文產品」問題。Ruby中最大的迴文產品

迴文數字讀取相同的方式。由兩個2位數字產品製成的最大回文是9009 = 91 * 99。查找由兩個3位數字 數字產品製成的最大回文。

我將回文產品添加到一個集合中,並找到集合中最大的。結果是正確的。但我想知道如何改進代碼,使其更簡潔或更好?任何建議是受歡迎的。

require 'set' 
s = Set.new [0] 
999.downto(100) do|one| 
    one.downto(100) do |two| 
     result = one*two 
     if result < s.max then 
     break 
     end 
     s.add(result) if result.to_s.reverse==result.to_s 
    end 
end 
puts s.max 
+2

我認爲這個問題是題外話和非建設性的位置。你可能想試試[Code Review](http://codereview.stackexchange.com/)。 – Mischa

+0

好的。謝謝你的建議。我不知道Code Review。 – melodrama

+0

+1 @Mischa,無論何時,當我看到「我該如何改進這些代碼」或其變體時,它都是代碼review.stackexchange.com的理想選擇。 –

回答

1

我覺得你的代碼唯一奇怪的地方是使用Set。這不是必需的。這個怎麼樣:

max = 0 

999.downto(100) do |i| 
    i.downto(100) do |j| 
    result = i * j 
    max = result if result > max && result.to_s == result.to_s.reverse 
    break if result <= max 
    end 
end 

puts max 

這是更簡潔,但非常

a = 999.downto(100).to_a 
a.product(a).keep_if{ |p| p.inject(:*).to_s == p.inject(:*).to_s.reverse }.map{ |p| p.inject(:*) }.sort.last 
+0

謝謝。我學到了東西。只是想知道:如果運行時間可以接受,人們會在實際項目中使用這種「單線」風格編碼?這很難理解。 – melodrama

+0

我不會使用它。太難以閱讀了。 – Mischa