Филарета обнови решението на 14.10.2012 15:17 (преди около 12 години)
+class Integer
+ def prime?(i)
+ 2.upto(i-1).all? { |j| i % j != 0 }
+ end
+ def prime_divisors
+ result = Array.new
+ 2.upto(self.abs) do |i|
+ if self % i == 0
+ if prime?(i) then result.push(i)
+ end
+ end
+ end
+ result
+ end
+end
+class Range
+ def divide(num,rez)
+ if (num % 3 == 0 && num % 5 == 0) then rez.push(:fizzbuzz)
+ elsif num % 3 == 0 then rez.push(:fizz)
+ elsif num % 5 == 0 then rez.push(:buzz)
+ else rez.push num
+ end
+ end
+ def fizzbuzz
+ result = Array.new
+ self.each { |digit| divide(digit,result) }
+ result
+ end
+end
+class Hash
+ def group_values
+ result = Hash.new
+ self.each_value do |v|
+ arr = self.keys.map{ |k| if self[k] == v then k end }
+ result.store(v,arr.compact)
+ end
+ result.each{ |k,v| puts "#{k}=>#{v}" }
+ end
+end
+class Array
+ def densities
+ result = Array.new
+ self.each { |i| result << self.count(i) }
+ result
+ end
+end
- Следния формат на подравняване не е ОК по никакъв начин: if prime?(i) then result.push(i) end
-
rez
иarr
са лоши имена, понеже са съкращения.rez
дори не е съкращение (думата е result, не rezult).digit
значи цифра, а не число. -
Integer#prime?
не трябва да взема аргумент, а да проверяваself
. - Оставяй по един празен ред между методи и класове
-
Array.new
се записва като[]
- Не е ОК да имаш код, който извежда неща на екрана