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

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

Към профила на Ростислав Градинаров

Резултати

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

Код

#!/usr/bin/env ruby
class Integer
def prime_divisors
(2..self.abs).select { |n| self%n == 0 && n.prime? }
end
def prime?
(2..self/2).inject(0) { |count, n| count+=1 if self%n == 0; count } == 0
end
end
class Range
def fizzbuzz
array = []
self.each do |n|
if n%3 == 0 && n%5 == 0
array<<:fizzbuzz
elsif n%3 == 0
array<<:fizz
elsif n%5 == 0
array<<:buzz
else array<<n
end
end
array
end
end
class Array
def densities
map { |item| count(item) }
end
end
class Hash
def group_values
inject({}) { |hash, pair| hash[pair[1]] = [] unless hash[pair[1]]; hash[pair[1]]<<pair[0]; hash }
end
end

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

........

Finished in 0.00997 seconds
8 examples, 0 failures

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

Ростислав обнови решението на 13.10.2012 00:53 (преди над 11 години)

+#!/usr/bin/env ruby
+
+class Integer
+ def prime_divisors
+ (2..self.abs).select { |n| self%n == 0 && n.prime? }
+ end
+
+ def prime?
+ (2..self/2).inject(0) { |count, n| count+=1 if self%n == 0; count } == 0
+ end
+end
+
+class Range
+ def fizzbuzz
+ array = []
+ self.each do |n|
+ if n%3 == 0 && n%5 == 0
+ array<<:fizzbuzz
+ elsif n%3 == 0
+ array<<:fizz
+ elsif n%5 == 0
+ array<<:buzz
+ else array<<n
+ end
+ end
+ array
+ end
+end
+
+class Array
+ def densities
+ map { |item| count(item) }
+ end
+end
+
+class Hash
+ def group_values
+ inject({}) { |hash, pair| hash[pair[1]] = [] unless hash[pair[1]]; hash[pair[1]]<<pair[0]; hash }
+ end
+end

Ползвал си ;, което е официално анатемосано в указания, ако държиш да напишеш (2..self/2).inject(0) { |count, n| count+=1 if self%n == 0; count } == 0 Може би ще изглежда по-добре като (2..self/2).count { |number| sefl % number == 0 } == 0 Ако разгледаш enumerable ще видиш методи и като all?, които са по-близо до това, което си имал предвид

  • Във fizzbuzz също си имал предвид map вместо each
  • Погледни Hash.new - мисля, че group_values ще изглежда по-добре без първата част на inject блока
  • self. е излишен на повечето места
  • Не поставяш интервали около операторите. array<<:fizz и n%3 изглежда ужасно. Пиши ги array << :fizz и n % 3.
  • inject-а в group_values е неприятен. Май не ни остана време да го кажем на лекция, но не се прави така. Ако искаш да направиш хеш от масив, по-добре ползвай each_with_object
  • Използваш inject там, където count ти върши работа
  • Иван е прав, ако имаш ;, вероятно правиш нещо грешно