Simon Kröger
12/13/2005 8:04:00 PM
Christer Nilsson wrote:
> Kroeger, Simon (ext) wrote:
>
>>Hi Christer,
>>
>>don't take this to serious:
>>
>>a = [[1,3],[1,4,5]]
>>p (0...a.size).zip(a).inject([]){|s, b| b[1].each{|i| (s[i] ||= []) <<
>>b[0]}; s}
>>
>>=> [nil, [0, 1], nil, [0], [1], [1]]
>>
>>cheers
>>
>>Simon
>
>
> Ruby is so fun, it's impossible to be serious :-)
>
> a.invert works but not a.invert.invert
>
> Can you fix that in your amazing oneliner ?
> Clue: nil.each is the bummer.
>
> Christer
rofl!
i will give you two:
class Array
def invert
zip([*(0...size)]).inject([]){|s, b| (b.first || []).each{|i| (s[i]
||= []) << b.last}; s}
end
end
or (even worse):
class Array
def invert
Array.new(flatten.compact.max.succ){|i|
zip([*(0...size)]).find_all{|b, j| b && b.include?(i)}.transpose[1]}
end
end
cheers
Simon