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

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

Към профила на Никола Таушанов

Резултати

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

Код

class Integer
def prime_divisors
result = []
current = self.abs
2.upto current do |x|
while current.remainder(x).zero?
current = current/x
result << x
end
end
result.uniq
end
end
class Range
def fizzbuzz
result = []
self.each do |x|
if x.remainder(3).zero? and x.remainder(5).zero?
result << :fizzbuzz
elsif x.remainder(3).zero?
result << :fizz
elsif x.remainder(5).zero?
result << :buzz
else
result << x
end
end
result
end
end
class Array
def densities
result = []
self.each { |x| result.push self.count x }
result
end
end
class Hash
def group_values
result = {}
self.each do |key, value|
result[value] = [] unless result.has_key? value
result[value] << key
end
result
end
end

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

........

Finished in 0.00754 seconds
8 examples, 0 failures

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

Никола обнови решението на 15.10.2012 02:21 (преди над 12 години)

+class Integer
+ def prime_divisors
+ result = []
+ current = self.abs
+ 2.upto current do |x|
+ while current.remainder(x).zero?
+ current = current/x
+ result << x
+ end
+ end
+ result.uniq
+ end
+end
+
+class Range
+ def fizzbuzz
+ result = []
+ self.each do |x|
+ if x.remainder(3).zero? and x.remainder(5).zero?
+ result << :fizzbuzz
+ elsif x.remainder(3).zero?
+ result << :fizz
+ elsif x.remainder(5).zero?
+ result << :buzz
+ else
+ result << x
+ end
+ end
+ result
+ end
+end
+
+class Array
+ def densities
+ result = []
+ self.each { |x| result.push self.count x }
+ result
+ end
+end
+
+class Hash
+ def group_values
+ result = {}
+ self.each do |key, value|
+ result[value] = [] unless result.has_key? value
+ result[value] << key
+ end
+ result
+ end
+end
  • Вместо number.remainder(divisor) се предпочита по-простата употреба на "оператора" (то пак е метод) %, т.е. number % divisor
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • нещо % 3 == 0 and нещо % 5 == 0 може да се запише и по-кратичко — нещо % 15 == 0... :) (ред 19)
  • Предпочитай да ползваш Array#<< пред Array#push за добавяне на елементи в списък; т.е. some_list << foo
  • fizzbuzz и densities се получават много добре с map; допълнително, densities се прави на един ред, с този код: map { |item| count item } :)

Като цяло, решението ти е добро за първо. Keep it up! :)