Светлин обнови решението на 15.10.2012 13:54 (преди около 12 години)
+class Integer
+ def prime_divisors
+ prime_divisors = []
+ number = self.abs
+
+ (2..number).each do |number_from_range|
+ if prime?(number_from_range) && number % number_from_range == 0
+ prime_divisors << number_from_range
+ end
+ end
+
+ return prime_divisors
+ end
+
+ def prime?(number)
+ (2..number - 1).each do |number_from_range|
+ return false if number % number_from_range == 0
+ end
+
+ return true
+ end
+ end
+
+ class Range
+ def fizzbuzz
+ fizzbuzz_array = []
+
+ self.each do |generated_number|
+ if generated_number % 3 == 0 && generated_number % 5 == 0
+ fizzbuzz_array << :fizzbuzz
+ elsif generated_number % 5 == 0
+ fizzbuzz_array << :buzz
+ elsif generated_number % 3 == 0
+ fizzbuzz_array << :fizz
+ else
+ fizzbuzz_array << generated_number
+ end
+ end
+
+ return fizzbuzz_array
+ end
+ end
+
+ class Hash
+ def group_values
+ grouped_values_hash = Hash.new{ |hash, key| hash[key] = [] }
+
+ self.each { |hash_key, hash_value| grouped_values_hash[hash_value] << hash_key }
+
+ return grouped_values_hash
+ end
+ end
+
+ class Array
+ def densities
+ densities_array = []
+
+ self.each{ |element| densities_array << get_count_in_array(self, element) }
+
+ return densities_array
+ end
+
+ def get_count_in_array(array, element)
+ element_count = 0
+
+ array.each { |n_element| element_count += 1 if n_element === element }
+
+ return element_count
+ end
+ end
- Идентацията и употребата ти на whitespace не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
-
self.
е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция - Хешът, който връщаш на потребителя в
group_values
има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместоnil
; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя -
fizzbuzz
иdensities
се получават много добре сmap
; допълнително,densities
се прави на един ред, с този код:map { |item| count item }
и не е имало голяма нужда да имплементираш самget_count_in_array
:) -
return
пред последния израз в метод е излишен и се изпуска; това важи за редове 12, 20, 40, 50, 60, 68 -
(2..number - 1)
може да се запише и така:(2...number)
, т.е. с non-inclusive range -
prime_divisors
става добре съсselect