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