Решение на Първа задача от Живко Чобанов

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

Към профила на Живко Чобанов

Резултати

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

Код

class Integer
def prime_divisors
res = []
number = self.abs
upper_limit = ( number / 2 ).ceil
2.upto( upper_limit ) do |divisor|
if number % divisor == 0
skip = 0
res.each do |old_divisor|
if divisor % old_divisor == 0
skip = 1
break;
end
end
if skip != 1
res.push divisor
end
end
end
if res == []
res = [number]
end
res
end
end
class Range
def fizzbuzz
self.collect do |n|
if n % 3 == 0 and n % 5 == 0
:fizzbuzz
elsif n % 5 == 0
:buzz
elsif n % 3 == 0
:fizz
else
n
end
end
end
end
class Hash
def group_values
res = {}
self.each do |key, val|
if res.has_key?(val)
res[val].push key
else
res[val] = [key]
end
end
res
end
end
class Array
def densities
self.collect do |item|
self.select { |item2| item2 == item }.size
end
end
end

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

........

Finished in 0.00729 seconds
8 examples, 0 failures

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

Живко обнови решението на 15.10.2012 14:34 (преди около 12 години)

+class Integer
+ def prime_divisors
+ res = []
+ number = self.abs
+ upper_limit = ( number / 2 ).ceil
+ 2.upto( upper_limit ) do |divisor|
+ if number % divisor == 0
+ skip = 0
+ res.each do |old_divisor|
+ if divisor % old_divisor == 0
+ skip = 1
+ break;
+ end
+ end
+ if skip != 1
+ res.push divisor
+ end
+ end
+ end
+ if res == []
+ res = [number]
+ end
+ res
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.collect do |n|
+ if n % 3 == 0 and n % 5 == 0
+ :fizzbuzz
+ elsif n % 5 == 0
+ :buzz
+ elsif n % 3 == 0
+ :fizz
+ else
+ n
+ end
+ end
+ end
+end
+
+class Hash
+ def group_values
+ res = {}
+ self.each do |key, val|
+ if res.has_key?(val)
+ res[val].push key
+ else
+ res[val] = [key]
+ end
+ end
+ res
+ end
+end
+
+class Array
+ def densities
+ self.collect do |item|
+ self.select { |item2| item2 == item }.size
+ end
+ end
+end
  • Живко, Живкооо... :) Идентацията и употребата ти на whitespace не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса Другият път ще спазваш конвенциите, сигурен съм :)
  • res, val, item2 и подобни са лоши имена на променливи (вероятно си наясно с това, ако си присъствала на последната лекция) :)
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Предпочитай да ползваш Array#<< пред Array#push за добавяне на елементи в списък; т.е. some_list << foo
  • Предпочитай map пред collect (синоними са, но първото се предпочита)
  • Това, което си направил в densities със select и после size е готино и близо до целта, но следващия път просто позлвай count :)
  • prime_divisors е станал малко тлъстичък и може би е добра идея да се разбие на два метода, както някои твои колеги са направили, добавяйки метод prime?

Като цяло, решението ти е сравнително прилично като за първо домашно. Ако и идентацията ти беше наред, щях да се замисля и за бонус точки :) Следващия път ще очакваме да си безгрешен ;)