Владимир обнови решението на 15.10.2012 10:54 (преди около 12 години)
+class Integer
+
+ def prime_divisors
+ (2..self.abs-1).select do |n|
+ n.prime? && (self.abs%n==0)
+ end
+ end
+
+ def prime?
+ (2..self.abs-1).each do |n|
+ return false unless self.abs % n != 0
+ end
+ true
+ end
+
+end
+
+class Range
+
+ def fizzbuzz
+ result = []
+ self.each do |n|
+ if(n%3 == 0 && n%5==0)
+ result << :fizzbuzz
+ elsif(n%3 == 0)
+ result<<:fizz
+ elsif(n%5 == 0)
+ result << :buzz
+ else
+ result<<n
+ end
+ end
+ result
+ end
+
+end
+
+class Hash
+
+ def group_values
+ result = {}
+ self.each do |key, val|
+ result[val] ||= []
+ result[val] << key.to_sym
+ end
+ result
+ end
+
+end
+
+class Array
+
+ def densities
+ count = {}
+ result = []
+ self.each do |val|
+ count[val] ||= 0
+ count[val] += 1
+ end
+ self.each_with_index do |val, key|
+ result[key] = count[val]
+ end
+ result
+ end
+
+end
- Не оставяй празен ред след началото на дефиниция на клас (
class Something
) и преди края й (end
) -
self.
е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция - Не спазваш съвсем конвенциите за поставяне на whitespace, по-специално около "оператори" от типа на
%
,==
и други; за справка виж ръководството за стил на курса, защото занапред ще взимаме точки за това -
fizzbuzz
иdensities
се получават много добре сmap
; допълнително,densities
се прави на един ред, с този код:map { |item| count item }
:)
Другото като цяло е прилично за първо решение. За справка може да разгледаш решенията на които сме дали бонус точки, както и може да видиш нашето примерно решение в слайдовете от предния път, ако си го пропуснал.