Стоян обнови решението на 15.10.2012 00:36 (преди около 12 години)
+class Integer
+ def prime_divisors
+ num = self > 0 ? self : -self
+ return false if num == 0 || num == 2
+ arr = []
+ (2..num).each do |n|
+ is_prime = true
+ (2..Math.sqrt(n)).each { |k| is_prime = false if n % k == 0 }
+ arr << n if self % n ==0 && is_prime == true
+ end
+ arr
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.map do |n|
+ result = :fizz if n % 3 == 0
+ result = :buzz if n % 5 == 0
+ result = :fizzbuzz if n % 5 == 0 && n % 3 == 0
+ result = n if result == nil
+ result
+ end
+ end
+end
+class Hash
+ def group_values
+ h = Hash.new { |hash, key| hash[key] = [] }
+ self.each { |key, value| h[value] << key }
+ h
+ end
+end
+class Array
+ def densities
+ self.map do |n|
+ num = 0
+ self.each{ |k| num +=1 if n ==k}
+ num
+ end
+ end
+end
- За кода на ред 3 си има метод
abs
:) - Не спазваш съвсем точно конвенциите за поставяне на whitespace и нови редове; за справка виж ръководството за стил на курса
-
self.
е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция -
arr
,num
и подобни са лоши имена на променливи (вероятно си наясно с това, ако си присъствал на последната лекция) :) -
prime_divisors
ти е доста нагъчкан и трудно четим; дори си се измъчил с идентацията; по-добре би било да го разделиш на два метода, например - Хешът, който връщаш на потребителя в
group_values
има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместоnil
; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя -
densities
се получава по-добре сmap
; допълнително, може да стане така:map { |item| count item }
Благодаря за коментара, ще се опитам да се поправя за следващия път :).