Advertisement
Guest User

Array groupings

a guest
Jun 23rd, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.37 KB | None | 0 0
  1. class Array_groupings
  2.   def initialize(args)
  3.     @args = args
  4.     @arr = @args[:arr]
  5.     @debug = @args[:debug]
  6.   end
  7.  
  8.   def parse
  9.     return Enumerator.new do |yielder|
  10.       prev_ele = @arr.shift
  11.       chunk = [prev_ele]
  12.       chunks = [chunk]
  13.       print "First ele: #{prev_ele}\n" if @debug
  14.      
  15.       @arr.each do |ele|
  16.         print "Ele: '#{ele}'\n" if @debug
  17.         deletes = []
  18.         adds = []
  19.        
  20.         chunks.each do |chunk_i|
  21.           res_last = yield(chunk_i.last, ele)
  22.           res_first = yield(chunk_i.first, ele)
  23.          
  24.           if res_first and res_last
  25.             chunk_i << ele
  26.           elsif !res_last and !res_first
  27.             yielder << chunk_i
  28.             deletes << chunk_i
  29.             adds << [ele]
  30.           elsif res_last and !res_first
  31.             new_add = []
  32.             chunk_i.each do |chunk_i_ele|
  33.               if yield(chunk_i_ele, ele)
  34.                 new_add << chunk_i_ele
  35.               end
  36.             end
  37.             new_add << ele
  38.            
  39.             yielder << chunk_i
  40.             adds << new_add
  41.             deletes << chunk_i
  42.           else
  43.             raise "Dont know what to do here..."
  44.           end
  45.         end
  46.        
  47.         chunks -= deletes
  48.         chunks += adds
  49.       end
  50.      
  51.       chunks.each do |chunk|
  52.         yielder << chunk
  53.       end
  54.     end
  55.   end
  56. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement