ip is just /:

   ip x=: 10?10
0 1 3 9 7 8 4 5 2 6
   /: x
0 1 3 9 7 8 4 5 2 6

If you substitute then tacitize, ip@baa becomes one 
of the Rich/Boss creations of earlier today.



----- Original Message -----
From: Ian Clark <[email protected]>
Date: Sunday, May 1, 2011 7:12
Subject: Re: [Jprogramming] A permutation of i.y
To: Programming forum <[email protected]>

> ...Y'know, once you ask the question in the right way, the answer
> becomes obvious...
> 
> I already have a verb around to invert permutations:
>    ip=: ] i. [: i. #
> Now the inverse of the permutation we want is easy to define. We
> simply extract x and haul it to the front:
>    baa=: 4 : 'x,(i.y)-.x'
> Hey presto!
>    3 ip@baa 10
> 1 2 3 0 4 5 6 7 8 9
> 
> Tacitly:
>    foo=: (] i. [: i. #)@([ , [ -.~ [: i. ])
>    timer '3 foo 10'
> 2.79236e_5
> 
> ...which I think is one of the fastest.
> 
> On Sun, May 1, 2011 at 2:01 PM, Ian Clark 
> <[email protected]> wrote:
> >> btw: why is this useful?
> >
> > I was waiting for someone to ask...
> >
> > I often find I'm interactively editing a list t of strings -- often
> > large, and often (though not always) a 2D char matrix -- frequently
> > sorting them to promote or demote a given entry. It's 
> convenient for
> > me to rearrange t using a permutation, p, like so:
> >   p{t
> > especially as successive p's can be multiplied together to 
> apply in
> > one-shot, or to apply as the inverse-perm to revert to a previous
> > stage.
> > And to add a new line at position (i) in a comparable way:
> >   p=. i foo >:#t
> >   p{ newline,t
> > rather than like so:
> >   (i{.t),newline, i}.t
> > which growing up on smaller and slower computers distresses me.
> >
> > What I've been asking for is help towards an efficient p.
> >
> > You can also do:
> >   p{ t,newline
> > which is why I'm also interested in solutions floating the last
> > element down to position i, as well as the first element up.
> >
> > Succint float-down solutions seem to be easier to find. I 
> suspect this
> > is thanks to the way A. orders permutations lexicographically, ie
> > back-to-front from the way I'd do it.
> >
> > Now you know what I want to use it for, am I barking up the wrong
> > tree: is there a far better approach to the problem of rearranging
> > large lists?
> >
> >
> > On Sun, May 1, 2011 at 2:59 AM, Steven Taylor 
> <[email protected]> wrote:
> >> 3 /:@:(([,-.~) i.) 10
> >> neat.  I liked Henry's sneaky version:
> >>
> >> 3 /:@(0} i.) 9
> >> I need to catch up with the thread and think through the C. 
> and A.
> >> approaches a little more.
> >>
> >> btw: why is this useful?
> >>
> >> -Steven
> >>
> >>
> >> On 30 April 2011 23:49, Marshall Lochbaum 
> <[email protected]>wrote:>>
> >>> Probably not very fast, but this one is cool:
> >>>   3 /:@:(([,-.~) i.) 10
> >>> 1 2 3 0 4 5 6 7 8 9
> >>>
> >>> Marshall
> >>>
> >>> -----Original Message-----
> >>> From: [email protected]
> >>> [mailto:[email protected]] On Behalf Of R.E. Boss
> >>> Sent: Saturday, April 30, 2011 4:48 PM
> >>> To: 'Programming forum'
> >>> Subject: Re: [Jprogramming] A permutation of i.y
> >>>
> >>> This revealed an error in my solution.
> >>> It should be
> >>>
> >>>      3 7 (+/@:!@(]->:@([+ i.@-~)/@[) A. i.@] )10
> >>> 0 1 2 4 5 6 7 3 8 9
> >>>
> >>>      0 3 (+/@:!@(]->:@([+ i.@-~)/@[) A. i.@] )10
> >>> 1 2 3 0 4 5 6 7 8 9
> >>>
> >>> If only the first item has to be moved, then you get the simpler
> >>>
> >>>      3 (+/@:!@(]->:@i.@[) A. i.@] )10
> >>> 1 2 3 0 4 5 6 7 8 9
> >>>
> >>>
> >>> R.E. Boss
> >>>
> >>>
> >>> > -----Oorspronkelijk bericht-----
> >>> > Van: [email protected] [mailto:programming-
> >>> > [email protected]] Namens Brian Schott
> >>> > Verzonden: zaterdag 30 april 2011 17:40
> >>> > Aan: Programming forum
> >>> > Onderwerp: Re: [Jprogramming] A permutation of i.y
> >>> >
> >>> > Yet another approach?
> >>> >
> >>> >    foo0=: +/@:!@:>:@:i.
> >>> >    foo =: (<:@]-&foo0-~) A. i.@]
> >>> >    3 foo 9
> >>> > 1 2 0 3 4 5 6 7 8
> >>> >
> >>> >
> >>> > On Fri, Apr 29, 2011 at 10:05 AM, Raul Miller 
> <[email protected]>>>> wrote:
> >>> > > This might be what you want:
> >>> > >
> >>> > >   foo=: (C.~ <)&i.~
> >>> > >
> >>> > >   3 (C.~ <)&i.~ 9
> >>> > > 1 2 0 3 4 5 6 7 8

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to