Решение на Първа задача от Снежана Спасова

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

Към профила на Снежана Спасова

Резултати

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

Код

class Integer
def is_prime?
numbers = (2..self**0.5)
numbers.each { |numb| return false if self % numb == 0 }
true
end
def prime_divisors
array = []
prime_div = (2..self.abs).each { |n| array << n if self.abs % n == 0 and n.is_prime? }
array
end
end
class Range
def fizzbuzz
result = self.to_a
result.each_with_index do |n, i|
case
when n % 15 == 0
result[i] = :fizzbuzz
when n % 3 == 0
result[i] = :fizz
when n % 5 == 0
result[i] = :buzz
end
end
result
end
end
class Hash
def group_values
newhash = {}
each do |n,i|
if newhash.has_key? i
newhash[i] << n
else
newhash[i] = [n]
end
end
newhash
end
end
class Array
def densities
newarray = []
each { |n| newarray << count(n) }
newarray
end
end

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

........

Finished in 0.00741 seconds
8 examples, 0 failures

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

Снежана обнови решението на 15.10.2012 15:55 (преди над 11 години)

+class Integer
+ def is_prime?
+ numbers = (2..self**0.5)
+ numbers.each { |numb| return false if self % numb == 0 }
+ true
+ end
+
+ def prime_divisors
+ array = []
+ prime_div = (2..self.abs).each { |n| array << n if self.abs % n == 0 and n.is_prime? }
+ array
+ end
+end
+
+class Range
+ def fizzbuzz
+ result = self.to_a
+ result.each_with_index do |n, i|
+ case
+ when n % 15 == 0
+ result[i] = :fizzbuzz
+ when n % 3 == 0
+ result[i] = :fizz
+ when n % 5 == 0
+ result[i] = :buzz
+ end
+ end
+ result
+ end
+end
+
+class Hash
+ def group_values
+ newhash = {}
+ each do |n,i|
+ if newhash.has_key? i
+ newhash[i] << n
+ else
+ newhash[i] = [n]
+ end
+ end
+ newhash
+ end
+end
+
+class Array
+ def densities
+ newarray = []
+ each { |n| newarray << count(n) }
+ newarray
+ end
+end
  • Кодът ти е чист и добре подреден, което ме радва :)
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция; при теб го има на 1-2 места, напр. ред 10 и 17
  • Шаблонът list = []; ...each { |x| list << x }; list се нарича map и трябва да ползваш него :)
  • fizzbuzz и densities се получават много добре с map; допълнително, densities се прави на един ред, с този код: map { |item| count item } :)
  • Не, че е неприемлив вариант, но ред 36 до 40 обикновено се записват така: newhash[i] ||= []; newhash[i] << n (на два реда и не с тези имена на променливи, но схващаш идеята)
  • Ако беше на последната лекция, сигурно вече знаеш, че променливи, кръстени numb, prime_div и прочее не са много добри имена; сходно е положението донякъде и с еднобуквените имена; например, на 35-ти ред ползваш n и i, като по-скоро очаквам да видя там key и value и тези имена ме изненадват; не е добре да изненадваш човека, който чете кода по този начин :)
  • is_prime? по-скоро се кръщава prime?, тъй като въпросителната накрая достатъчно ясно показва, че методът е предикат

На сбирката днес ще си говорим за Enumerable и ще видиш как с помощта на някои други методи като any?, all? и прочее може да се пренапишат някои от твоите, например, is_prime?