Деян обнови решението на 14.10.2012 21:56 (преди около 12 години)
+ class Integer
+ def prime_divisors
+ result = []
+ 2.upto(self.abs) do |n|
+ result << n if self % n == 0 and n.prime?
+ end
+ result
+ end
+
+ def prime?
+ isPrime = true
+ (2..self - 1).each do |x|
+ isPrime = false if self % x == 0
+ end
+ isPrime
+ end
+end
+
+class Range
+ def fizzbuzz
+ result = self.to_a
+ result.each_with_index do |element,index|
+ if element % 3 == 0
+ if element % 5 == 0
+ result[index] = :fizzbuzz
+ else
+ result[index] = :fizz
+ end
+ elsif element % 5 == 0
+ result[index] = :buzz
+ end
+ end
+ result
+ end
+end
+
+class Hash
+ def group_values
+ my_hash = Hash.new
+ tmp = []
+ self.each_value do |value|
+ break if my_hash.has_key?(value)
+ self.each_key do |x|
+ tmp << x if self[x] == value
+ end
+ my_hash[value]=tmp
+ tmp=[]
+ end
+ my_hash
+ end
+end
+
+class Array
+ def densities
+ result = []
+ self.each do |value|
+ result << self.count(value)
+ end
+ result
+ end
+end
- Индентацията ти е тотално объркана. Ако не я оправиш, ще ти вземем точки.
-
isPrime
не е добро име на нищо в Ruby. Погледни style guide-а. -
my_hash
иtmp
са лоши имена на променливи. Първото е по-лошо от второто. Кръсти ги контекстно, а не с произволни думички, които са ти хрумнали докато пишеш. - Като цяло, имената на променливите ти са зле, за което също ще вземем точки.
-
self.
е напълно излишно на всички места, на които си го ползвал. - Влагането на
if element % 5
вif element % 3
прави кода по-трудно четим. Най-лесно ще бъде, ако имашif/elsif/eslif/else
. - Има маста, на които можеш да ползваш
map
,all?
илиany?
и не го правиш.