Решение на Първа задача от Стоян Найденов

Обратно към всички решения

Към профила на Стоян Найденов

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

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

Лог от изпълнението

........

Finished in 0.0079 seconds
8 examples, 0 failures

История (1 версия и 2 коментара)

Стоян обнови решението на 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 }