Емил обнови решението на 15.10.2012 16:50 (преди около 12 години)
+class Integer
+ def prime_divisors
+ array = []
+ pos_self = self.abs
+ pos_self.downto(2) { |n| array << n if pos_self % n == 0 and n.prime? }
+ array.sort!
+ return array unless array.empty?
+ nil
+ end
+
+ def prime?
+ is_prime = true
+ self.downto 2 do |n|
+ is_prime = false if self % n == 0 and n != self
+ end
+ is_prime
+ end
+end
+
+class Range
+ def fizzbuzz
+ array = []
+ self.each do |n|
+ if n % 3 == 0 and n % 5 == 0
+ array << :fizzbuzz
+ elsif n % 3 == 0
+ array << :fizz
+ elsif n % 5 == 0
+ array << :buzz
+ else
+ array << n
+ end
+ end
+ array
+ end
+end
+
+class Hash
+ def group_values
+ values = Hash.new { |hash, key| hash[key]=[] }
+ self.keys.each do |n|
+ values[self[n]] << n
+ end
+ values
+ end
+end
+
+class Array
+ def densities
+ self.collect do |item|
+ if item.is_a? Integer
+ return item
+ end
+ counter = 0
+ self.each do |n|
+ if n == item
+ counter+=1
+ end
+ end
+ counter
+ end
+ end
+end
- Идентацията ти не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
-
self.
е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция - Хешът, който връщаш на потребителя в
group_values
има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместоnil
; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя - В
Range#fizzbuzz
можеш спокойно да ползвашmap
и да си опростиш кода -
нещо % 3 == 0 and нещо % 5 == 0
може да се запише и по-кратичко —нещо % 15 == 0
... :) - Ред 6-8 не са окей: правиш излишни неща, които условието не иска; човек трябва да се стреми да не пише излишен код, защото колкото повече код, толкова повече проблеми :) Още повече, че ползваш мутиращ метод,
Array#sort!
, което може да се избегне, като пренапишеш малко редовете по-горе; най-малкото като направиш2.upto(pos_self)
, а иpos_self
е неподходящо име на променлива; поне да бешеpositive_self
. - В
densities
правиш купчина излишни неща, например товаis_a?
, което е "миризма" в Руби и като цяло се избягва