Иван обнови решението на 14.10.2012 11:48 (преди около 12 години)
+class Integer
+ def prime_divisors
+ 2.upto(self.abs).select { |num| self % num == 0 and ('1' * num) !~ /^1?$|^(11+?)\1+$/ }
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.map do |num|
+ if num % 15 == 0 then :fizzbuzz
+ elsif num % 3 == 0 then :fizz
+ elsif num % 5 == 0 then :buzz
+ else num
+ end
+ end
+ end
+end
+
+class Hash
+ def group_values
+ grouped = Hash.new { |hash, key| hash[key] = [] }
+ self.each_pair { |key, value| grouped[value] << key }
+ grouped
+ end
+end
+
+class Array
+ def densities
+ self.map { |el| self.count el }
+ end
+end
- Имаш малки неконсистентности в идентацията, фиксни ги :)
- Този регулярен израз, с който проверяваш за прости числа минава само защото ни купи вода предния път... ;)
- Изпускай
self.
, в твоя случай никъде не е нужно и обикновено се изпуска в тези ситуации -
number
е по-добре отnum
; референция тук: http://37signals.com/svn/posts/3250-clarity-over-brevity-in-variable-and-method-names - Хешове обикновено се циклят с
each
, неeach_pair
- Връщаният хеш от
group_values
има страничен ефект, че като поискаш липсващ ключ, получаваш празен списък; може би искаш да избягаш от този страничен ефект :) - "Clarity over brevity"