Илиян обнови решението на 13.10.2012 22:18 (преди около 12 години)
+class Integer
+ def prime_divisors
+ (2..self).to_a.select do |divisor|
+ if self % divisor == 0
+ div = (2...divisor).to_a.select { |n| divisor % n == 0 }
+ div.empty?
+ end
+ end
+ end
+end
+
+class Range
+ def fizzbuzz
+ ret_arr = []
+ self.each do |n|
+ if n % 3 == 0 && n % 5 == 0
+ ret_arr.push :fizzbuzz
+ elsif n % 3 == 0
+ ret_arr.push :fizz
+ elsif n % 5 == 0
+ ret_arr.push :buzz
+ else
+ ret_arr.push n
+ end
+ end
+ ret_arr
+ end
+end
+
+class Hash
+ def group_values
+ swaped = {}
+ self.each do |key, value|
+ if swaped.has_key? value and not swaped[value].include? key
+ swaped[value].push key
+ else
+ swaped[value]=[key]
+ end
+ end
+ swaped
+ end
+end
+
+class Array
+ def densities
+ ret_arr = []
+ self.each do |n|
+ ret_arr.push self.count n
+ end
+ ret_arr
+ end
+end
- Идентацията ти е притеснително неправилна (може би използваш tab?) - щом го забелязвам аз, @Стефан ще получи удар :)
-
select
работи достатъчно успешно и върхуRange
, спокойно можеш да си спестишto_a
в(2...divisor).to_a.select
- Слагай си нормални имена на променливите
- При тази организация не виждам причина и да си присвояваш масива(
div
) във временна променлива - Във
fizbuzz
си искал да напишешmap
. Вdensities
също.
- Удар не, но идентацията ти определено е омазана. Което за тази задача струва една точка.
-
ret_arr
е много глупаво име на променлива. Дори го има на две места. Първо, има съкращения. Второ, можеш просто да го кръстишresult
. -
n % 3 == 0 and n % 5 == 0
се записва катоn % 15 == 0
- Няма дума
swaped
. Правописните грешки в променливите изглеждат мърляво. - В един блок имаш променливи
div
иdivisor
. Това е ужасно.