Денислав обнови решението на 15.10.2012 02:06 (преди около 13 години)
+
+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 ще е по добре:)
Айде, чакам следващата :)
