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

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

Към профила на Атанас Пройчев

Резултати

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

Код

class Integer
def prime_divisors
prime = []
n = 2
if self > 0
x = self
else
x = - self
end
while n <= x
if x % n == 0 and n.prime?
prime << n
end
n = n + 1
end
prime
end
def prime?
n = self - 1
while n > 1
if self % n == 0
return false
end
n = n - 1
end
true
end
end
class Range
def fizzbuzz
arr = []
self.each do |n|
if n.prime_divisors.include? 3 and n.prime_divisors.include? 5
arr << :fizzbuzz
elsif n.prime_divisors.include? 3
arr << :fizz
elsif n.prime_divisors.include? 5
arr << :buzz
else
arr << n
end
end
arr
end
end
class Hash
def group_values
key = []
h = {}
self.each_value do |v|
self.each_key do |k|
if self[k] == v
key << k
end
end
h[v] = key
key = []
end
h
end
end
class Array
def densities
arr = []
self.each { |n| arr << self.count(n) }
arr
end
end

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

........

Finished in 0.01159 seconds
8 examples, 0 failures

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

Атанас обнови решението на 14.10.2012 18:49 (преди около 12 години)

+class Integer
+
+ def prime_divisors
+ prime = []
+ n = 2
+ if self > 0
+ x = self
+ else
+ x = - self
+ end
+ while n <= x
+ if x % n == 0 and n.prime?
+ prime << n
+ end
+ n = n + 1
+ end
+ prime
+ end
+
+ def prime?
+ n = self - 1
+ while n > 1
+ if self % n == 0
+ return false
+ end
+ n = n - 1
+ end
+ true
+ end
+
+end
+
+class Range
+
+ def fizzbuzz
+ arr = []
+ self.each do |n|
+ if n.prime_divisors.include? 3 and n.prime_divisors.include? 5
+ arr << :fizzbuzz
+ elsif n.prime_divisors.include? 3
+ arr << :fizz
+ elsif n.prime_divisors.include? 5
+ arr << :buzz
+ else
+ arr << n
+ end
+ end
+ arr
+ end
+end
+
+class Hash
+
+ def group_values
+ key = []
+ h = {}
+ self.each_value do |v|
+ self.each_key do |k|
+ if self[k] == v
+ key << k
+ end
+ end
+ h[v] = key
+ key = []
+ end
+ h
+ end
+end
+
+class Array
+
+ def densities
+ arr = []
+ self.each { |n| arr << self.count(n) }
+ arr
+ end
+end
  • За ред 6 до 10 има метод abs
  • while-циклите в prime_divisors и prime? по-добре се записватИ с map/select
  • Идентацията ти на места не е съвсем наред; понеже като цяло си я спазвал и това ти е първо домашно, за това няма да ти вземем точки, но внимавай занапред; също оставяш празни редове където не трябва; за справка виж ръководството за стил на курса
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Това, което правиш в Range#fizzbuzz и Array#densities, се нарича map... :) Виж документацията на метода и го ползвай занапред
  • Въпреки, че не е много оптимално, това да ползваш Integer#prime_divisors в Range#fizzbuzz е хитра идея, така че ти се разминава наказанието за лоша идентация този път :)