Атанас обнови решението на 14.10.2012 18:49 (преди около 12 години)
+class Integer
+
+ def prime_divisors
+ prime = []
+ n = 2
+ if self > 0
+ x = self
+ else
+ x = - self
+ end
+ while n <= x
+ if x % n == 0 and n.prime?
+ prime << n
+ end
+ n = n + 1
+ end
+ prime
+ end
+
+ def prime?
+ n = self - 1
+ while n > 1
+ if self % n == 0
+ return false
+ end
+ n = n - 1
+ end
+ true
+ end
+
+end
+
+class Range
+
+ def fizzbuzz
+ arr = []
+ self.each do |n|
+ if n.prime_divisors.include? 3 and n.prime_divisors.include? 5
+ arr << :fizzbuzz
+ elsif n.prime_divisors.include? 3
+ arr << :fizz
+ elsif n.prime_divisors.include? 5
+ arr << :buzz
+ else
+ arr << n
+ end
+ end
+ arr
+ end
+end
+
+class Hash
+
+ def group_values
+ key = []
+ h = {}
+ self.each_value do |v|
+ self.each_key do |k|
+ if self[k] == v
+ key << k
+ end
+ end
+ h[v] = key
+ key = []
+ end
+ h
+ end
+end
+
+class Array
+
+ def densities
+ arr = []
+ self.each { |n| arr << self.count(n) }
+ arr
+ end
+end
- За ред 6 до 10 има метод
abs
-
while
-циклите вprime_divisors
иprime?
по-добре се записватИ сmap
/select
- Идентацията ти на места не е съвсем наред; понеже като цяло си я спазвал и това ти е първо домашно, за това няма да ти вземем точки, но внимавай занапред; също оставяш празни редове където не трябва; за справка виж ръководството за стил на курса
-
self.
е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция - Това, което правиш в
Range#fizzbuzz
иArray#densities
, се наричаmap
... :) Виж документацията на метода и го ползвай занапред - Въпреки, че не е много оптимално, това да ползваш
Integer#prime_divisors
вRange#fizzbuzz
е хитра идея, така че ти се разминава наказанието за лоша идентация този път :)