Кристиан обнови решението на 13.10.2013 00:10 (преди около 12 години)
+class Integer
+  def prime?
+    return false if self < 2
+    not (2..(self / 2).ceil).map { |x| self % x == 0 }.any?
+  end
+
+  def times_divisible_by(x, current = self)
+    if current % x == 0
+      1 + times_divisible_by(x , current / x)
+    else
+      0
+    end
+  end
+
+  def prime_factors
+    primes = (2..self.abs).select(&:prime?)
+    primes.map { |x| Array.new(self.times_divisible_by(x), x) }.flatten
+  end
+
+  def harmonic
+    (1..self).map { |x| 1r/ x }.reduce(:+)
+  end
+
+  def digits
+    self.abs.to_s.chars.map { |x| Integer(x) }
+  end
+end
+
+class Array
+  def frequencies
+    self.reduce(Hash.new(0)) do |map, x|
+      map[x] += 1
+      map
+    end
+  end
+
+  def average
+    self.reduce(0.0, :+) / self.length
+  end
+
+  def drop_every(n)
+    self.each_with_index.select { |_ , i| (1 + i) % n != 0 }.map(&:first)
+  end
+
+  def combine_with(other)
+    if self.length < other.length
+      first = self
+      left_over = other.drop(first.length)
+    else
+      first = self.take(other.length)
+      left_over = self.drop(first.length)
+    end
+
+    (first.zip(other) << left_over).flatten
+  end
+end
Ето малко бележки:
- На ред 4, 
any?може да се извиква и с блок; виж дали има как да го ползваш; освен това, вместоnot ...any?, може да ползвашnone? - Недостатъчно добре четим е този израз в range-а на ред 4; изведи горната граница в променлива
 - Допълнително, предпочитаме вариантите с думи на проверката за делимост, т.е. 
remainder(number)и методитеzero?иnonzero? - 
xне е добро име;numberе по-добро - Доста извратен начин си намерил да напишеш 
prime_factors- трудно се разбира :) Между другото, може да ползвашflat_mapтам, вместоmap { ... }.flatten - 
self.се "подразбира", когато предшества извикване на метод (ще го кажем по-натам) и е излишен; в почти всички такива случаи се пропуска (напр. ред 16, 17, 25, 31, 38...) - Ред 21, трябва интервал преди 
/ - Ред 25, методът, който търсиш, е 
String#to_i - Ред 31, 
mapе лошо име;frequenciesе по-добро; предпочитам иxда е кръстеноelement - Ред 42, 
rejectе по-близо до идеята наdrop_every, отколкотоselect, според мен; дургото е интересно решение - "leftover" е една дума :) и някак си не ми се връзва с "first"; пробвай да намериш друга комбинация от думи; може би "head" + "tail" ми звучи по-добре, дори, отколкото тези двете
 
Иначе, решението ти е прилично, поздравления!
