Милан обнови решението на 12.10.2012 00:39 (преди около 12 години)
+class Integer
+ def prime?
+ return false if self <= 1
+ 2.upto(Math.sqrt(self).to_i).each { |num| return false if (self % num).zero? }
+ true
+ end
+
+ def prime_divisors
+ 2.upto(self.abs).select { |num| (self.abs % num).zero? && num.prime? }
+ end
+end
+
+
+class Range
+ def fizzbuzz
+ fizzbuzzed = []
+ each do |i|
+ if (i % 15).zero? then fizzbuzzed << :fizzbuzz
+ elsif (i % 3).zero? then fizzbuzzed << :fizz
+ elsif (i % 5).zero? then fizzbuzzed << :buzz
+ else fizzbuzzed << i
+ end
+ end
+ fizzbuzzed
+ end
+end
+
+class Hash
+ def group_values
+ group_hash = Hash.new { |hash, key| hash[key] = [] }
+ each { |key, value| group_hash[value] << key }
+ group_hash
+ end
+end
+
+class Array
+ def densities
+ collect { |x| count x }
+ end
+end
- Разбивай нетривиалните блокове на повече от един ред, сега се затруднява четенето им.
-
self.
се изпуска обикновено, когато не е нужно. При теб не е нужно никъде. -
(... % ...).zero?
по-добре го запиши като... % ... == 0
, понеже скобите тук са неидиоматична употреба. - Обръни внимание, в че
Hash#group_values
връщаш хеш с особено свойство. Като му поиска несъществуващ ключ, човек ще получи празен списък, което може да е изненадващ страничен ефект. Може би искаш да го избегнеш по някакъв начин.
Иначе, като цяло решението ти е прилично. Само не се притеснявай да слагаш нови редове тук-таме и не се стреми да постигнеш ∞ плътност на кода :)