<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -19,37 +19,31 @@ module SequenceRecognizer
       hash.delete_if {|key, sequences| sequences.empty? } 
      
       # reconstruct the shortcodes
-      result = []
-      hash.each do |key, sequences|
-        sequences.each do |sequence|
-          result &lt;&lt; recompose( key =&gt; sequence )
-       end 
-      end
-      result
+      recompose(hash)
     end 
     
     # '1234678' =&gt; ['1234','678']
     def multiplex_sequences_from(string)
       @cache ||= {}
       return @cache[string] if @cache[string]
-      regexps = ordered_sequences.dup
       sequences_found = []
-      regexps.each do |regexp|
+      ordered_sequences.each do |regexp|
 	if string =~ regexp
 	  sequences_found &lt;&lt; $~[0] 
-          remove_recursively(regexp, regexps)	
 	end
       end
+      # remove subsets
+      redundant = []
+      sequences_found.each do |s1|
+        sequences_found.each do |s2|
+          redundant &lt;&lt; s2 if s1 != s2 &amp;&amp; !s1.index(s2).nil?
+        end
+      end
+      sequences_found.delete_if {|sequence| redundant.include? sequence}
       @cache[string] = sequences_found
       return sequences_found
     end 
 
-    def remove_recursively(regexp, regexps) 
-      regexps.delete(regexp)
-      dependent = hashed_sequences[regexp]
-      dependent.each {|r| remove_recursively(r, regexps)} 
-    end
-    
     # [81602, 81702, 81802, 81902] #=&gt; {'81x82' =&gt; &quot;6789&quot;}
     def decompose(shortcodes, n = 5)
       shortcodes.map! {|s| s.to_s}
@@ -57,7 +51,7 @@ module SequenceRecognizer
       n.times do |index|
         shortcodes.each do |shortcode|
           digit = shortcode[index].chr
-          key = shortcode.to_s.dup
+          key = shortcode.dup
           key[index] = 'x' 
           result[key] ||= ''
           result[key] &lt;&lt; digit
@@ -66,67 +60,56 @@ module SequenceRecognizer
       result
     end 
  
-    # {'66x77' =&gt; '123'} #=&gt; ['66177', '66277', '66377']
+    # {'66x77' =&gt; ['123', 678]} #=&gt; [['66177', '66277', '66377'], ['66677', 66777, 66877]]
     def recompose(hash)
-      result = [] 
-      hash.each do |key, sequence|
-	sequence.each_byte do |digit|
-          result &lt;&lt;  key.sub('x', digit.chr)	
-	end
+      results = [] 
+      hash.each do |key, sequences|
+	results += sequences.map {|seq| seq.unpack('a'*seq.size).map {|digit| key.tr('x',digit)}}
       end 
-      result.sort
+      results
     end 
 
     private 
 
-    def hashed_sequences
-      return @hashed_sequences if @hashed_sequences 
-      @hashed_sequences = {
-        /0123456789/ =&gt; [ /012345678/, /123456789/ ],
-        /012345678/  =&gt; [ /01234567/, /12345678/ ],
-        /123456789/  =&gt; [ /12345678/, /23456789/ ],
-        /01234567/   =&gt; [ /0123456/, /1234567/ ],
-        /12345678/   =&gt; [ /1234567/, /2345678/ ],
-        /23456789/   =&gt; [ /2345678/, /3456789/ ],
-        /0123456/    =&gt; [ /012345/, /123456/ ],
-        /1234567/    =&gt; [ /123456/, /234567/ ],
-        /2345678/    =&gt; [ /234567/, /345678/ ],
-        /3456789/    =&gt; [ /345678/, /456789/ ],
-        /012345/     =&gt; [ /01234/, /12345/ ],
-        /123456/     =&gt; [ /12345/, /23456/ ],
-        /234567/     =&gt; [ /23456/, /34567/ ],
-        /345678/     =&gt; [ /34567/, /45678/ ],
-        /456789/     =&gt; [ /45678/, /56789/ ],
-        /01234/      =&gt; [ /0123/, /1234/ ],
-        /12345/      =&gt; [ /1234/, /2345/ ],
-        /23456/      =&gt; [ /2345/, /3456/ ],
-        /34567/      =&gt; [ /3456/, /4567/ ],
-        /45678/      =&gt; [ /4567/, /5678/ ],
-        /56789/      =&gt; [ /5678/, /6789/ ],
-        /0123/       =&gt; [ /012/, /123/ ],
-        /1234/       =&gt; [ /123/, /234/ ],
-        /2345/       =&gt; [ /234/, /345/ ],
-        /3456/       =&gt; [ /345/, /456/ ],
-        /4567/       =&gt; [ /456/, /567/ ],
-        /5678/       =&gt; [ /567/, /678/ ],
-        /6789/       =&gt; [ /678/, /789/ ],
-        /012/        =&gt; [],
-        /123/        =&gt; [],
-        /234/        =&gt; [],
-        /345/        =&gt; [],
-        /456/        =&gt; [],
-        /567/        =&gt; [],
-        /678/        =&gt; [],
-        /789/        =&gt; []
-      }
-      return @hashed_sequences
-    end
-
     def ordered_sequences 
       return @ordered_sequences if @ordered_sequences 
-      @ordered_sequences = [/0123456789/,/012345678/,/123456789/,/01234567/,/12345678/,/23456789/,/0123456/,/1234567/,/2345678/,
-	/3456789/,/012345/,/123456/,/234567/,/345678/,/456789/,/01234/,/12345/,/23456/,/34567/,/45678/,/56789/,/0123/,/1234/,
-	/2345/,/3456/,/4567/,/5678/,/6789/,/012/,/123/,/234/,/345/,/456/,/567/,/678/,/789/]
+      @ordered_sequences = [
+	      /0123456789/,
+	      /012345678/,
+	      /123456789/,
+	      /01234567/,
+	      /12345678/,
+	      /23456789/,
+	      /0123456/,
+	      /1234567/,
+	      /2345678/,
+	      /3456789/,
+	      /012345/,
+	      /123456/,
+	      /234567/,
+	      /345678/,
+	      /456789/,
+	      /01234/,
+	      /12345/,
+	      /23456/,
+	      /34567/,
+	      /45678/,
+	      /56789/,
+	      /0123/,
+	      /1234/,
+	      /2345/,
+	      /3456/,
+	      /4567/,
+	      /5678/,
+	      /6789/,
+	      /012/,
+	      /123/,
+	      /234/,
+	      /345/,
+	      /456/,
+	      /567/,
+	      /678/,
+	      /789/]
       return @ordered_sequences
     end 
   end </diff>
      <filename>sequence_recognizer.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>0e97505613f4564e4ae8bfde03c031fe63565205</id>
    </parent>
  </parents>
  <author>
    <name>Paolo Dona</name>
    <email>paolo.dona@gmail.com</email>
  </author>
  <url>http://github.com/paolodona/sequence_recognizer/commit/67174ad5c05b3468fb90fd73cadb4f91f4d13c00</url>
  <id>67174ad5c05b3468fb90fd73cadb4f91f4d13c00</id>
  <committed-date>2008-12-11T19:10:08-08:00</committed-date>
  <authored-date>2008-12-11T19:10:08-08:00</authored-date>
  <message>simplified</message>
  <tree>36eba035e68ea7a069e4eb7c5f5d167062cfa21d</tree>
  <committer>
    <name>Paolo Dona</name>
    <email>paolo.dona@gmail.com</email>
  </committer>
</commit>
