I believe Dan Bron had previously proposed that I. 
should be invertible.  Founders on exactly the
problem that you described.

One way to speed up  (I.x) </.y is to have special
code for   [EMAIL PROTECTED] f/. ]  .



----- Original Message -----
From: Henry Rich <[EMAIL PROTECTED]>
Date: Wednesday, November 5, 2008 6:28
Subject: RE: [Jprogramming] cut on length
To: 'Programming forum' <[email protected]>

> Wait a minute... how would you know how long to make the result
> of I.^:_1 ?
> 
> Never mind.
> 
> Henry Rich 
> 
> > -----Original Message-----
> > From: [EMAIL PROTECTED] 
> > [mailto:[EMAIL PROTECTED] On Behalf Of Henry Rich
> > Sent: Wednesday, November 05, 2008 7:58 AM
> > To: 'Programming forum'
> > Subject: RE: [Jprogramming] cut on length
> > 
> > Another approach would be to implement I.^:_1 - not a bad
> > idea in its own right - and then
> > 
> > (I.^:_1@(|.!.0) x) <;.1 y
> > 
> > I.^:_1 would run in linear time.
> > 
> > Henry Rich
> > 
> > > -----Original Message-----
> > > From: [EMAIL PROTECTED] 
> > > [mailto:[EMAIL PROTECTED] On Behalf Of 
> Roger Hui
> > > Sent: Wednesday, November 05, 2008 3:06 AM
> > > To: Programming forum
> > > Subject: Re: [Jprogramming] cut on length
> > > 
> > > It has been a long quest in APL/J to make
> > > x e. y  as fast as  1 x1}y1 .  The quest continues.
> > > 
> > > I must say that I like Brian Schott's solution (I.x)</.y 
> > > the best.  The implementation should reward concise
> > > solutions and I'll see if I can make that solution faster.
> > > 
> > > 
> > > 
> > > ----- Original Message -----
> > > From: "Sherlock, Ric" <[EMAIL PROTECTED]>
> > > Date: Tuesday, November 4, 2008 22:57
> > > Subject: RE: [Jprogramming] cut on length
> > > To: Programming forum <[email protected]>
> > > 
> > > > ---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

Reply via email to