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

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

Към профила на Илия Ячев

Резултати

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

Код

class Integer
def prime?
(2..self/2).each { |n| return false if self % n == 0 }
true
end
def prime_divisors
puts "prime_divisors not defined for -1,0,1" if self.abs<2
(2..self.abs).select { |n| n.prime? and self % n == 0 }
end
end
class Range
def fizzbuzz
collect do |n|
case
when n % 15 == 0 then :fizzbuzz
when n % 3 == 0 then :fizz
when n % 5 == 0 then :buzz
else n
end
end
end
end
class Hash
def group_values
result = {}
each do |key,value|
result[value] ||= []
result[value] << key
end
result
end
end
class Array
def densities
result = []
each { |x| result << select { |y| x == y } .size }
result
end
end

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

........

Finished in 0.00729 seconds
8 examples, 0 failures

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

Илия обнови решението на 15.10.2012 04:39 (преди над 11 години)

+class Integer
+ def prime?
+ (2..self/2).each { |n| return false if self % n == 0 }
+ true
+ end
+
+ def prime_divisors
+ puts "prime_divisors not defined for -1,0,1" if self.abs<2
+ (2..self.abs).select { |n| n.prime? and self % n == 0 }
+ end
+end
+
+class Range
+ def fizzbuzz
+ collect do |n|
+ case
+ when n % 15 == 0 then :fizzbuzz
+ when n % 3 == 0 then :fizz
+ when n % 5 == 0 then :buzz
+ else n
+ end
+ end
+ end
+end
+
+class Hash
+ def group_values
+ result = {}
+ each do |key,value|
+ result[value] ||= []
+ result[value] << key
+ end
+ result
+ end
+end
+
+class Array
+ def densities
+ result = []
+ each { |x| result << select { |y| x == y } .size }
+ result
+ end
+end

Хубаво решение! Забележките са:

  • Не оставяй странични ефекти в решенията. Пуцането в следващите задачи няма да се толерира :)
  • Погледни Array#map :)
  • case израза във Range#fizzbuzz изглежда добре, но не винаги case без условие е добра идея.
  • Малко стилистични забележки: оставяй разстояния между операторите; |key,value| -> |key, value|; select { |y| x == y } .size -> select { |y| x == y }.size; Погледни блок секцията на https://github.com/fmi/ruby-style-guide#syntax

Освен това, всичко е много добре!

За протокола, puts-а там не е ОК. Ако 0 и 1 са невалидни стойности за твоята функция, тогава хвърляй изключение, вместо да извеждаш нещо на екрана и да продължаваш изпълнението на програмата.