Денислав обнови решението на 15.10.2012 02:06 (преди около 12 години)
+
+class Array
+
+ def densities
+ element_count = self.count_elements
+ map { |x| element_count[x
+class Array
+
+ def densities
+ element_count = self.count_elements
+ map { |x| element_count[x] }
+ end
+
+ def count_elements
+ result = {}
+ each do |x|
+ result[x] ? result[x] = result[x] + 1 : result[x] = 1
+ end
+ result
+ end
+
+end
+
+
+class Hash
+
+ def group_values
+ result = {}
+ each do |key,value|
+ result[value] ? result[value] << key : result[value] = [key]
+ end
+ result
+ end
+
+end
+
+
+class Integer
+
+ def prime_divisors
+ integer = abs
+ return[2] if integer == 2
+ result = []
+ (2..integer).each { |x| result<< x if x.prime? and self % x == 0 }
+ result
+ end
+
+ def prime?
+ divisors = []
+ (1..self).each { |x| divisors << x if self % x == 0 }
+ divisors == [1, self]
+ end
+
+end
+
+
+class Range
+
+ def fizzbuzz
+ to_a.map { |x| bizzfuzz x }
+ end
+
+ private
+ def bizzfuzz number
+ if number % 15 == 0
+ :fizzbuzz
+ elsif number % 5 == 0
+ :buzz
+ elsif number % 3 == 0
+ :fizz
+ else
+ number
+ end
+ end
+
+end
Деджо, май видя вече, че си омазал copy/paste-a и вероятно няма да ти мине автоматизирания тест :) Но това не е толкова важно, ето малко коментари:
-
densities
ти е много близо до идеалното решение, с тази бележка, че вместо да имплементирашcount_elements
сам, можеше да ползваш вградения методcount
... :) - Не оставяй празен ред след
class X
или предиend
-а на клас; другите ти употреби на конвенции са окей - На ред 60 няма нужда да правиш
to_a.map
, може направо да викнешmap
на обект от типRange
и резултатът ще бъдеArray
- Окей е, че си извел private метод в
Range
, но името му е малко криво... :) - В
prime?
можеше да циклиш по(2..self - 1)
(забележи, че приоритетът на..
е подходящ и няма да има проблем) и съответно в края да провериш далиdivisors.empty?
; макар че разликата не е голяма, и по твоя начин става - В
prime_divisors
по-подходяща е употребата наselect
- На ред 30 обикновено нещата се записват така:
result[value] ||= []; result[value] << key
(на два реда)
Като цяло, решението ти е прилично, само да не беше омазал copy/paste-а... :) Нищо — следващия път :)
Да, още не съм усвоил стандартната библиотека :)
За реда след Class, така ми се видя по четимо, но просто трябва да свикна с другия начин.
bizzfuzz беше шега, вероятно to_fizzbuzz или Integer#fizzbuz ще е по добре:)
Айде, чакам следващата :)