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

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

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

Резултати

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

Код

class Integer
def prime?
(2..abs-1).each { |x| if self % x == 0
return false
end
}
true
end
def prime_divisors
divisors = []
(2..abs).each { |x| if x.prime? and self%x == 0
divisors<<x
end
}
divisors
end
end
class Range
def fizzbuzz
fuzzbuzz = []
each do |x| if x % 15 == 0 then fuzzbuzz<<:fizzbuzz
elsif x % 5 == 0 then fuzzbuzz<<:buzz
elsif x % 3 == 0 then fuzzbuzz<<:fizz
else fuzzbuzz<<x
end
end
fuzzbuzz
end
end
class Hash
def group_values
group_values = {}
each do |key, value| group_values[value] ||= []
group_values[value] << key
end
group_values
end
end
class Array
def densities
collect {|x| count x}
end
end
#Мисля, че така е по-добре, не бях погледнала, че са се
# разбъркали индентациите при paste-а.

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

........

Finished in 0.00743 seconds
8 examples, 0 failures

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

Светлана обнови решението на 13.10.2012 23:01 (преди над 11 години)

+class Integer
+ def prime?
+ (2..self.abs-1).each { |x|
+ if self % x == 0
+ return false
+ end
+ }
+
+ true
+ end
+ def prime_divisors
+ divisors = []
+ (2..self.abs).each { |x| if x.prime? and self%x == 0
+ divisors<<x
+ end }
+ divisors
+ end
+end
+
+class Range
+ def fizzbuzz
+ fuzzbuzz = []
+ self.each do |x| if x % 15 == 0 then fuzzbuzz<<:fizzbuzz
+ elsif x % 5 == 0 then fuzzbuzz<<:buzz
+ elsif x % 3 == 0 then fuzzbuzz<<:fizz
+ else fuzzbuzz<<x
+ end
+ end
+ fuzzbuzz
+ end
+end
+
+class Hash
+ def group_values
+ group_values = {}
+ self.each do |key, value| if group_values.has_key?(value)
+ (group_values[value])<<key
+ else group_values[value] = [key]
+ end
+ end
+ group_values
+ end
+end
+
+class Array
+ def densities
+ densities = []
+ self.each { |x| densities<<self.count(x) }
+ densities
+ end
+end
  • Много, много спешно е да си идентираш и подредиш правилно кода. Следвай указанията в https://github.com/fmi/ruby-style-guide
  • Изпускай self., в твоя случай никъде не е нужно и обикновено се изпуска в тези ситуации
  • За #densities добре си се сетила за Enumerable#count; сега виж дали можеш да го комбинираш някак с map

За group_values има една типична конструкция, нещо от типа на:

group_values[value] ||= []
group_values[value] << key

След като подредиш кода, ще стане значително по-добре :)

Светлана обнови решението на 14.10.2012 15:58 (преди над 11 години)

class Integer
def prime?
- (2..self.abs-1).each { |x|
- if self % x == 0
- return false
- end
- }
-
- true
+ (2..abs-1).each { |x| if self % x == 0
+ return false
+ end
+ }
+ true
end
+
def prime_divisors
divisors = []
- (2..self.abs).each { |x| if x.prime? and self%x == 0
- divisors<<x
- end }
- divisors
- end
+ (2..abs).each { |x| if x.prime? and self%x == 0
+ divisors<<x
+ end
+ }
+ divisors
+ end
end
class Range
- def fizzbuzz
- fuzzbuzz = []
- self.each do |x| if x % 15 == 0 then fuzzbuzz<<:fizzbuzz
- elsif x % 5 == 0 then fuzzbuzz<<:buzz
- elsif x % 3 == 0 then fuzzbuzz<<:fizz
- else fuzzbuzz<<x
- end
- end
- fuzzbuzz
- end
+ def fizzbuzz
+ fuzzbuzz = []
+ each do |x| if x % 15 == 0 then fuzzbuzz<<:fizzbuzz
+ elsif x % 5 == 0 then fuzzbuzz<<:buzz
+ elsif x % 3 == 0 then fuzzbuzz<<:fizz
+ else fuzzbuzz<<x
+ end
+ end
+ fuzzbuzz
+ end
end
class Hash
- def group_values
- group_values = {}
- self.each do |key, value| if group_values.has_key?(value)
- (group_values[value])<<key
- else group_values[value] = [key]
- end
- end
- group_values
- end
+ def group_values
+ group_values = {}
+ each do |key, value| group_values[value] ||= []
+ group_values[value] << key
+ end
+ group_values
+ end
end
class Array
- def densities
- densities = []
- self.each { |x| densities<<self.count(x) }
- densities
- end
+ def densities
+ collect {|x| count x}
+ end
end
+#Мисля, че така е по-добре, не бях погледнала, че са се
+# разбъркали индентациите при paste-а.
  • Кодът все още ти е лошо идентиран. Фигурни скоби, когато блока е на един ред и do/end, когато е на повече. Това ще ти струва точка.
  • В Integer#prime? можеш да ползваш any? или none?. По-добре ще стане.
  • На места правиш each, вместо map. На повечето места е по-добре да направиш map.
  • Интервали около вътрешната част на фигурните скоби при ламбди: collect { |x| count x }
  • Имаш променлива fuzzbuzz във функция, която се казва fizzbuzz. Warum? :)