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

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

Към профила на Филарета Йорданова

Резултати

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

Код

class Integer
def prime?(i)
2.upto(i-1).all? { |j| i % j != 0 }
end
def prime_divisors
result = Array.new
2.upto(self.abs) do |i|
if self % i == 0
if prime?(i) then result.push(i)
end
end
end
result
end
end
class Range
def divide(num,rez)
if (num % 3 == 0 && num % 5 == 0) then rez.push(:fizzbuzz)
elsif num % 3 == 0 then rez.push(:fizz)
elsif num % 5 == 0 then rez.push(:buzz)
else rez.push num
end
end
def fizzbuzz
result = Array.new
self.each { |digit| divide(digit,result) }
result
end
end
class Hash
def group_values
result = Hash.new
self.each_value do |v|
arr = self.keys.map{ |k| if self[k] == v then k end }
result.store(v,arr.compact)
end
result.each{ |k,v| puts "#{k}=>#{v}" }
end
end
class Array
def densities
result = Array.new
self.each { |i| result << self.count(i) }
result
end
end

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

....1=>[:a]
.1=>[:a, :c]
2=>[:b]
...

Finished in 0.00772 seconds
8 examples, 0 failures

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

Филарета обнови решението на 14.10.2012 15:17 (преди около 12 години)

+class Integer
+ def prime?(i)
+ 2.upto(i-1).all? { |j| i % j != 0 }
+ end
+ def prime_divisors
+ result = Array.new
+ 2.upto(self.abs) do |i|
+ if self % i == 0
+ if prime?(i) then result.push(i)
+ end
+ end
+ end
+ result
+ end
+end
+class Range
+ def divide(num,rez)
+ if (num % 3 == 0 && num % 5 == 0) then rez.push(:fizzbuzz)
+ elsif num % 3 == 0 then rez.push(:fizz)
+ elsif num % 5 == 0 then rez.push(:buzz)
+ else rez.push num
+ end
+ end
+ def fizzbuzz
+ result = Array.new
+ self.each { |digit| divide(digit,result) }
+ result
+ end
+end
+class Hash
+ def group_values
+ result = Hash.new
+ self.each_value do |v|
+ arr = self.keys.map{ |k| if self[k] == v then k end }
+ result.store(v,arr.compact)
+ end
+ result.each{ |k,v| puts "#{k}=>#{v}" }
+ end
+end
+class Array
+ def densities
+ result = Array.new
+ self.each { |i| result << self.count(i) }
+ result
+ end
+end
  • Следния формат на подравняване не е ОК по никакъв начин: if prime?(i) then result.push(i) end
  • rez и arr са лоши имена, понеже са съкращения. rez дори не е съкращение (думата е result, не rezult). digit значи цифра, а не число.
  • Integer#prime? не трябва да взема аргумент, а да проверява self.
  • Оставяй по един празен ред между методи и класове
  • Array.new се записва като []
  • Не е ОК да имаш код, който извежда неща на екрана