Изабела обнови решението на 15.10.2012 15:40 (преди около 12 години)
+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 точка.