Мирослав обнови решението на 15.10.2012 16:56 (преди около 12 години)
+# prime_divisors implementation
+class Integer
+ def is_prime? n
+ half_of_n = n / 2
+ (2..half_of_n).each do |x|
+ return false if n % x == 0
+ end
+ return true
+ end
+
+ def prime_divisors
+ result = Array.new([])
+ half_of_self = abs / 2
+ (2..half_of_self).each do |x|
+ if is_prime?(x) == true
+ result << x if abs % x == 0
+ end
+ end
+ result << abs if result == []
+ result
+ end
+end
+
+
+# fizzbuzz implementation
+class Range
+ def fizzbuzz
+ trace = 0
+ range = self.to_a
+ until trace >= range.length
+ if range[trace] % 3 == 0 and range[trace] % 5 == 0
+ range[trace] = :fizzbuzz
+ elsif range[trace] % 3 == 0
+ range[trace] = :fizz
+ elsif range[trace] % 5 == 0
+ range[trace] = :buzz
+ end
+ trace += 1
+ end
+ range
+ end
+end
+
+
+# group_values implementation
+class Hash
+ def group_values
+ result = Hash.new { |hash, key| hash[key] = [] }
+ self.each { |key, value| result[value] << key }
+ result
+ end
+end
+
+
+# densities implementation
+class Array
+ def densities
+ result = Array.new([])
+ (0..(length - 1)).each { |x| result << self.count(self[x]) }
+ result
+ end
+end
- Идентацията ти не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
-
self.
е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция - Хешът, който връщаш на потребителя в
group_values
има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместоnil
; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя - Това е невероятно крив начин да направиш празен списък:
Array.new([])
; прави се така:[]
- Употребата на
until
вRange#fizzbuzz
е ужасно неидиоматична; ползвайmap
там -
range[trace] % 3 == 0 and range[trace] % 5 == 0
може да се запише и по-кратичко —range[trace] % 15 == 0
... :) -
trace
е доста неподходящо име на променлива -
return
-ът на 7-ми ред е излишен -
if is_prime?(x) == true
се записва катоif is_prime?(x)