Решение на Първа задача от Явор Лилянов

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

Към профила на Явор Лилянов

Резултати

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

Код

#Първа задача
class Integer
def prime?
var = Math.sqrt(self.abs).ceil
return true if self == 2
(2..var).each do |n|
return false if self % n == 0
end
true
end
def prime_divisors
(2..self.abs).to_a.select { |n| n.prime? and (self % n == 0) }
end
end
#Втора задача
class Range
def fizzbuzz
self.to_a.map do |n|
if (n % 5 == 0) and (n % 3 == 0)
n = :fizzbuzz
elsif n % 5 == 0
n = :buzz
elsif n % 3 == 0
n = :fizz
else
n
end
end
end
end
#Трета задача
class Hash
def group_values
hash = {}
buff = []
self.each do |key, value|
unless buff.include? value
hash[value] = self.select { |k, v| v == value }.keys
buff << value
end
end
hash
end
end
#Четвърта задача
class Array
def densities
buff = []
self.each { |n| buff << self.count(n) }
buff
end
end

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

........

Finished in 0.00764 seconds
8 examples, 0 failures

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

Явор обнови решението на 13.10.2012 17:17 (преди над 11 години)

+#Първа задача
+class Integer
+ def prime?
+ var = Math.sqrt(self.abs).ceil
+ return true if self == 2
+ (2..var).each do |n|
+ return false if self % n == 0
+ end
+ true
+ end
+
+ def prime_divisors
+ (2..self.abs).to_a.select { |n| n.prime? and (self % n == 0) }
+ end
+end
+
+#Втора задача
+class Range
+ def fizzbuzz
+ self.to_a.map do |n|
+ if (n % 5 == 0) and (n % 3 == 0)
+ n = :fizzbuzz
+ elsif n % 5 == 0
+ n = :buzz
+ elsif n % 3 == 0
+ n = :fizz
+ else
+ n
+ end
+ end
+ end
+end
+
+#Трета задача
+class Hash
+ def group_values
+ hash = {}
+ buff = []
+ self.each do |key, value|
+ unless buff.include? value
+ hash[value] = self.select { |k, v| v == value }.keys
+ buff << value
+ end
+ end
+ hash
+ end
+end
+
+#Четвърта задача
+class Array
+ def densities
+ buff = []
+ self.each { |n| buff << self.count(n) }
+ buff
+ end
+end
  • Не разбирам защо правиш n = във fizzbuz. Ако очакваш това присвояване да промени нещо, грешиш. Изтрий го и метода ти пак ще работи. Ако се чудиш защо - проучи.
  • Нямаш нужда от self. никъде
  • n % 3 == 0 and n % 5 == 0 се записва като n % 15 == 0
  • Защо имаш променлива, която се казва buff? Речниковото значение на думата е "a stout, dull yellow leather with a velvety surface.". Не виждам логика. Може би си имал предвид buffer, обаче в това също не виждам никаква локига, понеже какво буферираш? Мисли повече при даването на имена.
  • В Array#densities можеш да ползваш map вместо each и ще се получи по-добре.
  • prime? метода ти е сложен. Можеш да минеш с any? вместо с each

Разбира се, че има как - просто изтрий self.. Как прочете това, което написах?

Не ползваш променливата като буфер, понеже не буферираш нищо. Просто натрупваш резултатите там. Това не е буфер. Това е просто масив, в който събираш резултати. Което прави името грешно.