Георги обнови решението на 14.10.2012 02:59 (преди около 12 години)
+class Integer
+ def prime_divisors
+ factors = []
+ (2..self.abs).each do |number|
+ if self % number == 0 && !factors.find { |factor| number % factor == 0 }
+ factors.push(number)
+ end
+ end
+ factors
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.map do |n|
+ if n % 15 == 0
+ :fizzbuzz
+ elsif n % 5 == 0
+ :buzz
+ elsif n % 3 == 0
+ :fizz
+ else
+ n
+ end
+ end
+ end
+end
+
+class Hash
+ def group_values
+ result = {}
+ self.each do |key, value|
+ if result.key?(value)
+ result[value].push(key)
+ else
+ result[value] = [].push(key)
+ end
+ end
+ result
+ end
+end
+
+class Array
+ def densities
+ self.map do |element|
+ element = self.count(element)
+ end
+ end
+end
- Приятелю, идентирай си и си подреди правилно кода. Следвай указанията в https://github.com/fmi/ruby-style-guide
- Изпускай
self.
, в твоя случай никъде не е нужно и обикновено се изпуска в тези ситуации - За
#densities
e добре, че си открил как да ползвашEnumerable#count
, но това присвояване вmap
-а е абсолютно излишно - В
#prime_divisors
може би е по-подходящо да ползвашEnumerable#any?
/Enumerable#all?
, отколкотоfind?
.push
също се избягва, обикновено се ползва<<
За group_values
има една типична конструкция, нещо от типа на:
result[value] ||= []
result[value] << key