Пламен обнови решението на 14.10.2012 23:19 (преди около 12 години)
+class Integer
+ def prime_divisors
+ return abs.prime_divisors if self < 0
+ return nil if self == 0 || self == 1
+
+ divisors = []
+ value = self
+ 2.upto(self) do |n|
+ break if n > value
+
+ if value % n == 0
+ divisors << n
+ value /= n while value % n == 0
+ end
+ end
+
+ divisors
+ end
+end
+
+class Range
+ def fizzbuzz
+ result = []
+ each do |n|
+ if n % 5 == 0 && n % 3 == 0
+ result << :fizzbuzz
+ elsif n % 3 == 0
+ result << :fizz
+ elsif n % 5 == 0
+ result << :buzz
+ else
+ result << n
+ end
+ end
+
+ result
+ end
+end
+
+class Hash
+ def group_values
+ result = Hash.new { |hash, key| hash[key] = [] }
+ each_pair { |key, value| result[value] << key }
+
+ result
+ end
+end
+
+class Array
+ def densities
+ map { |n| count n }
+ end
+end
Много добре, но:
- Можеш да ползваш
map
вместоeach
на едно място. -
Integer#prime_divisors
всякаш иска да са два отделни метода.