I have two binary patterns, e. g.
a =. 0 1 0 [ b =. 0 0 1 0 0
with a <&$ b
Here is a simple way to get what I want:
a2 =. (a *&$ b) $ a [ b2 =. (a *&$ b) $ b
NB. I need the whole (a *&$ b) patterns
NB. for a and b are of relatively prime $s
or1 =. a2 +. b2
with my example patterns that’s:
a2: 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0
b2: 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0
or1: 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0
the first (a <. b) entries are fixed now
I want to +. or1 with itself shifted
both ($a) and ($b) items, like this
or2 =. +./ or1 |.!.0"0 1~ - 0, ($ a), $ b
resulting in
0 1 1 0 1 1 1 1 0 1 1 0 1 1 0
Now I repeat
or3 =. +./ or2 |.!.0"0 1~ - 0, ($ a), $ b
0 1 1 0 1 1 1 1 1 1 1 1 1 1 1
this obviously won’t change anymore,
I repeat until convergence.
This will eventually be ^:_ so I call this
or_inf =. or3
Now at each place p with p > a >.&$ b,
(p { or_inf) = (p-$a) +.&({&or_inf) p-$b
That’s what I wanted to get.
How to find the resulting bit pattern
(called or_inf here) effitiently when
the $s of a and b get large?
--
----------------------
mail written using NEO
neo-layout.org
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm