Станислав обнови решението на 13.10.2012 03:30 (преди около 12 години)
+class Integer
+ def prime?
+ self > 1 and (2..Math.sqrt(self).to_i).all? { |n| self % n != 0 }
+ end
+
+ def divisors
+ (1..self).select { |n| self.%(n).zero? }
+ end
+
+ def prime_divisors
+ self.divisors.select { |n| n.prime? }
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.to_a.tap do |result|
+ each_with_index.select { |n, i| (n % 3).zero? or (n % 5).zero? }.collect do |n, i|
+ result[i] = ("#{ "fizz" if (n % 3).zero? }#{ "buzz" if (n % 5).zero? }").to_sym
+ end
+ end
+ end
+end
+
+class Hash
+ def group_values
+ Hash.new { |hash, key| hash[key] = Array.new }.tap do |result|
+ each { |key, value| result[value] << key }
+ end
+ end
+end
+
+class Array
+ def densities
+ self.collect { |n| self.count(n) }
+ end
+end