---Roger Hui wrote:
> f0=: 4 : '(I.x)</.y'
> f1=: 4 : '((i.#y) e. +/\0,x) <;.1 y'
>
> x=: 1+1e4 [EMAIL PROTECTED] 100
> y=: t {~ (+/x) [EMAIL PROTECTED] #t=. 'barack obama'
>
> x (f0 -: f1) y
> 1
> ts=: 6!:2 , 7!:[EMAIL PROTECTED]
>
> ts 'x f0 y'
> 0.0700156 1.09591e7
> ts 'x f1 y'
> 0.00778395 4.20992e6
When I saw Brian's solution I wasn't going to post mine - his was so much
simpler (BTW I have only used monadic I. to turn a boolean into an index of 1s
and hadn't realised what it did with integers). Roger's post prompted me to
time mine and the result surprised me.
f2=: 4 : '(1 (<:+/\x)} (#y)$0) <;.2 y'
x (f1 -: f2) y
1
50 ts 'x f0 y'
0.030942459167 10976256
50 ts 'x f1 y'
0.0077791269561 4227072
50 ts 'x f2 y'
0.0060425808308 2654272
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm