Михаил обнови решението на 13.10.2012 18:46 (преди около 12 години)
+require 'mathn'
+
+class Integer
+ def prime_divisors
+ array = []
+ (2..self).to_a.each {|n| array << n if is_prime(n) && self % n == 0}
+ array
+ end
+
+ def is_prime number
+ i = 2
+ while i < number / 2
+ if number % i == 0 then return false else i += 1 end
+ end
+ return true
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.to_a.map! {|x| if x%3 == 0 && x%5 == 0 then :fizzbuzz elsif x%3 == 0 then :fizz elsif x%5 == 0 then :buzz else x end}
+ end
+end
+
+class Array
+ def densities
+ self.inject([]){|array, elements| array << self.select{ |current_element| current_element == elements }.size }
+ end
+end
+
+class Hash
+ def group_values
+ values = Hash.new {|h,k| h[k] = []}
+ each {|k,v| values[v] << k}
+ values
+ end
+end
-
(2..self).to_a.each
няма нужда от to_a. За по-четливо се възприема2.upto(self)
. Като цяло тук си имал предвидselect
. - Слагай си по-смислени имена на променливите
- Нямаш смислена причина да използваш
self.
-
self.to_a.map!
е малко странен начин да напишешmap
. На същото място ще изглежда по-добре да го направиш на няколко реда. -
select {}.size
е доста дълъг начин да напишешcount
. В същия ред на мисли,inject
в тази ситуация би изглеждал по-добре катоmap
- Какво прави този
require
там горе? Не го ползваеш? - Каквото Иван каза.
- Не спазваш конвенциите. Най-вече, не идентираш с два интервала, което за тази задача струва точки.
- Кодът на 21 ред е ужасно труден за четене. Трябваше да го напишеш на няколко реда
- Добавянето на такъв метод
is_prime
вInteger
е глупаво, но за това ще си говорим в сряда. - Това в
prime_divisors
трябва да еselect
, а неeach