It probably won't generalize, but in this particular case, the following works:

           gu  =.  1 : '(u/~ u/\@:|.@:({.~ >:@:#))~'
           L + gu R
         0  1
         2  3
        
        10 11
        12 13
        
        18 19
        20 21
        
        24 25
        26 27
        
        28 29
        30 31
        
        30 31
        32 33

Some timings:

           'a1 b1'=:4!:5&.> i.2
        
           recf    =. 1 : 0
        :
                   s =. y
                   r =. ,:y
                   for_i.
                     i. # x
                    do. s =. (i{x) u s
                        r =. r,s
                   end.
                   r
        )
        
           jackson0=:  + recf f.
        
           seq     =.  ((&.>) /) (@:((|.@:[) , (<@:]))) (>@:)  NB.  Due to 
Quintana
           bron0   =:  (+ seq f.~ <"_1)~  NB.  No intermediate results
        
           seq     =.  <"_1@|[EMAIL PROTECTED] , <@]
           update  =.  (] ,(+&.> {:))/
           phil0   =:  [: > [EMAIL PROTECTED] f.  NB.  Doesn't meet spec
        
           reboss0 =:  [: > [: +&.>/\.&.|. <@],<"[EMAIL PROTECTED]
        
           ug      =.  2 : '[: >@:({."1) (2&(u&.>/@:{. , }.)^:(1 < #)^:n @: (; 
<"_1@:|.)~)'
           bron1   =:  + ug a: f.
        
           gu      =.  1 : '(u/~ u/\@:|.@:({.~ >:@:#))~'
           bron2   =:  + gu f.  
        
           enshape =.  ] , ($"_ _1~ $)
           oleg0   =:  +/[EMAIL PROTECTED] f.
        
           'a1 b1' =:  4!:5&.> i._2
           b1      =:  (;:'a1 b1') -.~(#~ =&({.;:'_base_'))/ |: (split~ 
i:&2@:(* +/\.)@:=&'_')&> a1
        
           small   =:  (+: i. 5  ) 1000 H b1 i. 2 2 
           medium  =:  (+: i. 500)   10 H b1 i. 2 2 
           large   =:  (+: i. 5000)   1 H b1 i. 2 2 
        
           ]A      =: (cmpr_rpt ".&.>) ;: 'small medium large'

          set     alg      time    space  
         ------ -------- -------- ------- 
                                          
                bron0        1.57    1.50 
                bron1        5.18    2.15 
                bron2        1.00    1.00 
         small  jackson0     6.28    2.85 
                oleg0        1.01    1.15 
                phil0        2.75    1.65 
                reboss0      2.09    2.30 
                                          
                bron0       16.07    3.50 
                bron1     2269.77  300.23 
                bron2        1.00    1.00 
         medium jackson0   109.90    1.54 
                oleg0        3.96    1.55 
                phil0      680.41    7.10 
                reboss0     20.33   13.02 
                                          
                bron0       18.57    2.79 
                bron1    26203.71 2205.21 
                bron2        1.00    1.00 
         large  jackson0   128.87    1.41 
                oleg0        4.63    1.60 
                phil0     7851.63    4.84 
                reboss0     62.41    9.17 
                                          
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to