Елена обнови решението на 10.10.2012 23:15 (преди около 12 години)
+class Integer
+ def prime?
+ (2...self).each do |i|
+ return false if self % i == 0
+ end
+ true
+ end
+ def prime_divisors
+ numbers = []
+ num = self.abs
+ (2..num).each do |i|
+ if i.prime? and self % i == 0
+ numbers << i
+ end
+ end
+ numbers
+ end
+end
+class Range
+ def fizzbuzz
+ res = []
+ self.each do |i|
+ el = choose i
+ res << el
+ end
+ res
+ end
+ def choose(i)
+ if i % 3 == 0 && i % 5 == 0
+ :fizzbuzz
+ elsif i % 3 == 0
+ :fizz
+ elsif i % 5 == 0
+ :buzz
+ else
+ i
+ end
+ end
+end
+class Hash
+ def group_values
+ hash = Hash.new{|hash, key| hash[key] = []}
+ self.each do |key,value|
+ hash[value] <<= key
+ end
+ hash
+ end
+end
+class Array
+ def count(n)
+ cnt = 0
+ self.each do |i|
+ if i == n
+ cnt += 1
+ end
+ end
+ cnt
+ end
+ def densities
+ counts = []
+ i = 0
+ self.each do |item|
+ counts[i] = self.count(item)
+ i += 1
+ end
+ counts
+ end
+end
Ето малко коментари:
- Индентираш с табулации. Това е грубо нарушение на всичко мило и свято. В Ruby се индентира с два интервала. Консултирай се със style guide-а.
- Monkey patch-а на
Array#count
е грубо проявление, понеже има метод с такова име. Има и метод, който прави това, което ти трябва. - Но повечето места, на които правиш
.each
, можеш да ползвашmap
,select
или нещо подобно и ще стане по-добре. -
self.
е излишно навсякъде, където го ползваш.
И допълнително, res
е лошо име на променлива. Ако имаш предвид резултата, кръсти го result
. Нищо няма да му стане, ако е с три символа по-дълго.