Решение на Първа задача от Методи Димитров

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

Към профила на Методи Димитров

Резултати

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

Код

class Integer
def prime?
array_of_integers = (2..self.abs/2).to_a
array_of_integers.each do |i|
if self % i == 0 and i != self
return false
end
end
true
end
def prime_divisors
(2..self.abs-1).collect {|n| n if self % n == 0 and n.prime?}.compact.to_a
end
end
class Range
def fizzbuzz
s = self.collect do |n|
if n % 3 == 0 and n % 5 == 0
:fizzbuzz
elsif n % 3 == 0
:fizz
elsif n % 5 == 0
:buzz
else
n
end
end
s.compact.to_a
end
end
class Hash
def group_values
result_hash = Hash.new()
self.each do |key, value|
result_hash[value] = self.collect {|key1, value1| key1 if self[key1] == value}.compact.to_a
end
result_hash
end
end
class Array
def densities
self.collect { |n| self.count(n)}.to_a
end
end

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

........

Finished in 0.00954 seconds
8 examples, 0 failures

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

Методи обнови решението на 15.10.2012 16:20 (преди около 12 години)

+class Integer
+ def prime?
+ array_of_integers = (2..self.abs/2).to_a
+ array_of_integers.each do |i|
+ if self % i == 0 and i != self
+ return false
+ end
+ end
+ true
+ end
+ def prime_divisors
+ (2..self.abs-1).collect {|n| n if self % n == 0 and n.prime?}.compact.to_a
+ end
+end
+class Range
+ def fizzbuzz
+ s = self.collect do |n|
+ if n % 3 == 0 and n % 5 == 0
+ :fizzbuzz
+ elsif n % 3 == 0
+ :fizz
+ elsif n % 5 == 0
+ :buzz
+ else
+ n
+ end
+ end
+ s.compact.to_a
+ end
+end
+class Hash
+ def group_values
+ result_hash = Hash.new()
+ self.each do |key, value|
+ result_hash[value] = self.collect {|key1, value1| key1 if self[key1] == value}.compact.to_a
+ end
+ result_hash
+ end
+end
+class Array
+ def densities
+ self.collect { |n| self.count(n)}.to_a
+ end
+end
  • Идентацията ти не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • На места на един ред си сгъчкал твърде много логика и кодът ти е станал трудно разбираем; това трябва да се избягва
  • В densities нямаш нужда от to_a накрая
  • Предпочитай map пред collect (синоними са, но първото се предпочита)
  • В Range#fizzbuzz можеш спокойно да пропуснеш 28-ми ред
  • Не разбирам и кавка е тази обсесия да викаш ненужни методи, напр. compact на няколко места
  • На 3-4-ти ред не ти трябва да правиш списък, можеш направо да си обхождаш с each range-а
  • нещо % 3 == 0 and нещо % 5 == 0 може да се запише и по-кратичко — нещо % 15 == 0... :)