[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: [QUIZ SOLUTION] Happy Numbers (#93

email55555 email55555

9/6/2006 2:59:00 PM

Modified from Simon's solution.
This one has 3 lines longer, but it takes ~ half time compare to the origin
for finding the happiest between 1 and 100000.

-------------------------------------------------------------------
happy = Hash.new do |h, k|
digits = k.to_s.split('')
digits_sorted = digits.sort
next h[k] = h[digits_sorted.join.to_i] if digits != digits_sorted
sum = digits.inject(0) {|s, i| s + i.to_i * i.to_i}
sum != 1 ? (h[k] = 0) : (next h[k] = 1)
h[k] = (h[sum].nonzero? || -1) + 1
end

puts (1..100000).max {|a, b| happy[a] <=> happy[b]}
-------------------------------------------------------------------