Изабела обнови решението на 15.10.2012 15:40 (преди около 13 години)
+class Integer
+ def is_prime?
+ 2.upto(self-1) { |num| return false if self % num == 0 }
+ true
+ end
+
+ def prime_divisors
+ pr_divisors = []
+ 2.upto(abs) do |num|
+ if abs % num == 0 && num.is_prime?
+ pr_divisors << num
+ end
+ end
+ pr_divisors
+ end
+end
+
+class Range
+ def fizzbuzz
+ collect do |elem|
+ if elem % 15 == 0 then :fizzbuzz
+ elsif elem % 3 == 0 then :fizz
+ elsif elem % 5 == 0 then :buzz
+ else elem
+ end
+ end
+ end
+end
+
+class Hash
+ def group_values
+ groups = Hash.new { |hash, key| hash[key] = [] }
+ each {|key, value| groups[value] << key}
+ groups
+ end
+end
+
+class Array
+ def densities
+ collect { |elem| count(elem) }
+ end
+end
Приятно решение с малко забележки:
-
prime?би било по-добро име отis_prime?. Това е една от причините?да е позволен като последен символ на имена на методи. -
pr_devisorsне звучи добре, избягвай такива съгращения. Мисля че си съкратила заради името на метода (prime_divisors). Дори простоresultвърши работа в такива случаи, избягвай съкращенията като цяло. - Оставяй по една шпация след отваренето и преди затварянето на едноредови блокове. Изпуснала си един такъв :)
-
self-1->self - 1:) - Предпочитай
andпред&&.
В крайна сметка, на мен решението ти ми харесва. Погледни забележките и ги имай в предвид за следващите домашни.
За интервалите по принцип го разбрах, но явно съм ги изтървала някъде, иначе за другите неща вече ще знам, мерси :)
- В
is_prime?можеш да ползвашnone?вместоeach? - Отвъд неоптималния
prime_divisors, на мен решението ти ми харесва, което е +1 точка.
