Виктория обнови решението на 14.10.2012 17:09 (преди около 12 години)
+class Integer
+
+ def prime?
+ 2.upto(self-1).all? { |a| self.remainder(a).nonzero? }
+ end
+
+ def prime_divisors
+ arr = []
+ positive = self.abs
+ (2..positive).each do |num|
+ num.prime? and positive % num == 0 and arr.push(num)
+ end
+ arr
+ end
+
+end
+
+
+class Range
+
+ def divisible_by(step)
+ remainder = self.first % step
+ remainder = step if remainder == 0
+ num = self.last - self.first
+ list = (0..num).select { |n| n % step == step - remainder }
+ list
+ end
+
+
+ def fizzbuzz
+ arr = self.select { |n| n }
+ divisible_by(3).each { |elem| arr[elem] = :fizz }
+ divisible_by(5).each { |elem| arr[elem] = :buzz }
+ divisible_by(15).each { |elem| arr[elem] = :fizzbuzz }
+ arr
+ end
+
+end
+
+
+class Hash
+
+ def group_values
+ h = {}
+ self.each_value do |value|
+ h[value] = self.keys.select { |n| self[n] == value }
+ end
+ h
+ end
+
+end
+
+
+class Array
+
+ def densities
+ arr = []
+ number=self.length
+ (0..number-1).each do |elem|
+ arr[elem] = self.find_all { |n| n == self[elem] }.length
+ end
+ arr
+ end
+
+end
- Мутацията на
arr
на 11 ред не е много приятна. Ако имаш страничен ефект, добре е да не го зариваш толкова навътре в кода си. По-скороif
, бил той нормален или постфиксен. -
divisable_by
трябваше да се казваdivisable_by?
-
arr = select { |n| n }
е доста странна конструкция. Предполагам си искала да направиш копие на масива. Това става сObject#dup
. По-добре ще е вместо да мутираш, да направишmap
. -
select
е далеч по-популярния синоним наfind_all
. - Няма нужда да итерираш
0..number-1
- можеш просто да направиш#each
.