Веселин обнови решението на 14.10.2012 17:14 (преди над 12 години)
+class Integer
+ def prime?
+ number = abs
+ (2..number-1).each { |cur_num| return false if (number%cur_num == 0) }
+ true
+ end
+
+ def prime_divisors
+ number = abs
+ factor = []
+ (2..number-1).each { |cur_num| factor << cur_num if ( number%cur_num == 0 and cur_num.prime?)}
+ return factor
+ end
+end
+
+class Range
+ def fizzbuzz
+ result = []
+ each do |cur_num|
+ if ( cur_num % 3 == 0) && (cur_num % 5 == 0)
+ result << :fizzbuzz
+ elsif cur_num % 3 == 0
+ result << :fizz
+ elsif cur_num % 5 == 0
+ result << :buzz
+ else
+ result << cur_num
+ end
+ end
+
+ return result
+ end
+end
+
+class Hash
+ def group_values
+ hash = {}
+ each {|key, value| (hash[value] ||= []) << key}
+ return hash
+ end
+end
+
+class Array
+ def densities
+ hash = Hash.new(0)
+ each {|cur_num| hash[cur_num] += 1}
+
+ arr = []
+ each {|cur_num| arr << hash[cur_num]}
+ return arr
+ end
+end
-
cur_num
е лошо име на променлива, дори да дава материал за забавни лекции. Първо защото е съкращение и второ, защото "current" частта предполага число, което е предишно или следващо, каквото няма. -
(hash[value] ||= []) << key
е гадно. Това е по-добре да се запише на два реда - по-четимо е. - Не си много консистентен с поставяне на whitespace
-
return
-а на края на всеки метод не просто не е задължителен, но дори е противопоказателен. - Изпуснал си няколко възможности да правиш
map
и правишeach
вместо това.