Решение на Първа задача от Мартина Величкова

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

Към профила на Мартина Величкова

Резултати

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

Код

class Integer
def prime?(number)
(2...number).each do |current|
if number % current == 0
return false
end
end
true
end
def prime_divisors
divisors = []
(2..self.abs).each do |element|
divisors << element if self.abs % element == 0
end
prime_divisors = []
divisors.each do |element|
prime_divisors << element if prime?(element)
end
prime_divisors
end
end
class Range
def fizzbuzz
result = []
self.each do |element|
if element % 3 == 0 && element % 5 == 0
result << :fizzbuzz
elsif element % 3 == 0
result << :fizz
elsif element % 5 == 0
result << :buzz
else
result << element
end
end
result
end
end
class Hash
def group_values
result = Hash.new { |hash, key| hash[key] = [] }
self.each { |key, value| result[value].push key }
result
end
end
class Array
def densities
result = self.collect { |element| self.count(element) }
end
end

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

........

Finished in 0.00731 seconds
8 examples, 0 failures

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

Мартина обнови решението на 14.10.2012 20:47 (преди около 12 години)

+class Integer
+ def prime?(number)
+ (2...number).each do |current|
+ if number % current == 0
+ return false
+ end
+ end
+ true
+ end
+
+ def prime_divisors
+ divisors = []
+ (2..self.abs).each do |element|
+ divisors << element if self.abs % element == 0
+ end
+
+ prime_divisors = []
+ divisors.each do |element|
+ prime_divisors << element if prime?(element)
+ end
+
+ prime_divisors
+ end
+end
+
+class Range
+ def fizzbuzz
+ result = []
+
+ self.each do |element|
+ if element % 3 == 0 && element % 5 == 0
+ result << :fizzbuzz
+ elsif element % 3 == 0
+ result << :fizz
+ elsif element % 5 == 0
+ result << :buzz
+ else
+ result << element
+ end
+ end
+
+ result
+ end
+end
+
+class Hash
+ def group_values
+ result = Hash.new { |hash, key| hash[key] = [] }
+ self.each { |key, value| result[value].push key }
+
+ result
+ end
+end
+
+class Array
+ def densities
+ result = self.collect { |element| self.count(element) }
+ end
+end
  • Не спазваш изискванията за идентация. Ако не си го сторила, може да се консултираш с ръководството за стил на курса.
  • За предпочитане е да ползваш 2.upto(self.abs) вместо (2..self.abs). Най-вече заради скобите.
  • Вместо да мутираш в следния фрагмент:

      divisors = []
      (2..self.abs).each do |element| 
        divisors << element if self.abs % element == 0 
      end
    
  • Можеш да филтрираш например с 2.upto(self.abs).select { |element| self.abs % element == 0 }. По този начин кода е много по-четим, защото при select е ясно какво се прави - оставят се част от елементите на някакво множество. При each това не е толкова ясно. Освен това е прието за филтриране да се ползва select и ако се използва нещо друго, то човек би се опитал да разбере защо не е използван нормалния начин.

  • За fizzbuzz сякаш по-удачно е да използваш map/collect, вместо да мутираш result. Също така, ако нямаме специфична нужда, предпочитаме да пишем and и or вместо && и ||.

Здрасти. Ивайло е един от нашите хора. Опълномощен е, демек.

Точката съм ти я взел (аз) заради неспазване на конвенции. По-точно, на места идентацията ти е неточна. Щях да ти я простя ако в поне едно от решенията ти всичко беше пушка, но навсякъде има нещо излишно, макар и малко.