Решение на Първа задача от Теодор Илиев

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

Към профила на Теодор Илиев

Резултати

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

Код

class Integer
def prime_divisors
2.upto(self.abs).select { |a| a.isPrime? and self.remainder(a).zero? }
end
def isPrime?
2.upto(self - 1).all? { |a| self.remainder(a).nonzero? }
end
end
class Range
def fizzbuzz
self.map { |a| convert a }
end
def convert(number)
if number.remainder(15).zero?
:fizzbuzz
elsif number.remainder(3).zero?
:fizz
elsif number.remainder(5).zero?
:buzz
else
number
end
end
end
class Hash
def group_values
aggregating_inverted_hash = Hash.new { [] }
self.each { |x, y| aggregating_inverted_hash[y] <<= x }
aggregating_inverted_hash
end
end
class Array
def densities
self.map { |x| self.count x }
end
end

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

........

Finished in 0.00844 seconds
8 examples, 0 failures

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

Теодор обнови решението на 15.10.2012 03:57 (преди около 12 години)

+class Integer
+ def prime_divisors
+ 2.upto(self.abs).select { |a| a.isPrime? and self.remainder(a).zero? }
+ end
+
+ def isPrime?
+ 2.upto(self - 1).all? { |a| self.remainder(a).nonzero? }
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.map { |a| convert a }
+ end
+
+ def convert(number)
+ if number.remainder(15).zero?
+ :fizzbuzz
+ elsif number.remainder(3).zero?
+ :fizz
+ elsif number.remainder(5).zero?
+ :buzz
+ else
+ number
+ end
+ end
+end
+
+class Hash
+ def group_values
+ aggregating_inverted_hash = Hash.new { [] }
+ self.each { |x, y| aggregating_inverted_hash[y] <<= x }
+ aggregating_inverted_hash
+ end
+end
+
+class Array
+ def densities
+ self.map { |x| self.count x }
+ end
+end

Щях да те накажа за този isPrime?, който е грубо нарушение на конвенциите на езика, но всички останали конвенции са ти почти перфектни, а и си ползвал map & count където трябва, така че само този път ти се разминава (но и не получаваш бонус точки, които иначе ти бяха вързани в кърпа)

  • aggregating_inverted_hash не е много добро име
  • Hash.new { [] } не работи така, както очакваш; пробвай го в irb, ще видиш, че group_values няма да ти работи заради това; консултирай се с документацията
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Вместо number.remainder(divisor) се предпочита по-простата употреба на "оператора" (то пак е метод) %, т.е. number % divisor

Като изклчим тези дребни бележки, решението ти е много добро, поздравления.