On Jan 12, 2008, at 10:24 AM, Bil Kleb wrote:
> unused.each do |source,routines|
>   orphans = routines.uniq
>   orphans.delete_if do |orphan|
>     repeated = routines.find_all{ |routine| routine == orphan }.size
>     repeated != MagicNumber
>   end
>   unused[source] = orphans
> end
> unused.delete_if{ |h,k| k.empty? }

Here is my attempt.  It uses Symbol#to_proc.

module Enumerable
   def frequency
     inject(Hash.new(0)) { |r, e| r[e] += 1; r }
   end
end

def clense(data, magic)
   data.inject({}) { |r, (src, rlist)|
     l = rlist.frequency.select { |r, c| c == magic }.map(&:first)
     r[src] = l unless l.empty?
     r
   }
end

data = {
   :gone => [ 0, 1, 2 ],
   :dups => [ 0, 0, 1, 1, 2, 2],
   :onedups => [ 0, 1, 1, 2, 2, 2],
   :threes => [ 0, 0, 0, 1, 1, 1, 2,2,2]
}

p clense(data, 2)