Димитър обнови решението на 14.10.2012 21:03 (преди около 12 години)
+class Hash
+ def group_values
+ result = Hash.new { |hash, key| hash[key] = Array.new }
+ self.each { |key, value| result[value] << key }
+ result
+ end
+end
+
+class Array
+ def densities
+ result = Array.new
+ helpHash = Hash.new { |hash, key| hash[key] = 0 }
+ self.each { |item| helpHash[item] += 1 }
+ self.each { |item| result << helpHash[item] }
+ result
+ end
+end
+
+class Range
+ def fizzbuzz
+ check_division = lambda do |n|
+ if n % 3 == 0 and n % 5 == 0
+ :fizzbuzz
+ elsif n % 3 == 0
+ :fizz
+ elsif n % 5 == 0
+ :buzz
+ else
+ n
+ end
+ end
+
+ self.collect { |item| check_division.call(item) }
+ end
+end
+
+class Integer
+ def prime?
+ max = Math.sqrt self
+ (2..max).each { |n| return false if self % n == 0 }
+ true
+ end
+
+ def prime_divisors
+ raise TypeError, "Choose a number different than 0 or 1" if self == 0 or self == 1
+ result = Array.new
+ self.abs.downto(2) { |n| result << n if n.prime? and self % n == 0 }
+ result.sort
+ end
+end
- Никога, ама никога не пиши просто
Array.new
. Има литерален синтаксис и той е[]
. -
self.
-а на всичките места, на които си го ползвал, е излишен. -
helpHash
е глупаво име на променлива. Отделно, не е в унисон с конвенциите в Ruby. - Нямаш нужда от тази ламбда във
#fizzbuzz
. Ако не друго, само прави кода по-труде за четене. - На едно място можеш да направиш
select
вместо да конструираш списък на ръка.
Благодаря за review'to, предполагам оправянето на кода няма да ми донесе повече точки?
Знам ли. Мотивацията ти трябва да бъде, че искаш кода ти да е максимално добър.
Ако искаш да видиш дали ще получиш бонус точки или ще ти вземем точки ако не го оправиш, може провериш :)