comb=: 4 : 0
 k=. i.>:d=.y-x
 z=. (d$<i.0 0),<i.1 0
 for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
 ; z
)

cmbcomb=: 3 :0
 a=. |.#/.~ y
 b=. |.(] <@comb"0 +/\) a
 c=. ; ([:,/  [,"1"1 _1 ]{"1"_ 1 [-.~"1 i.@(+&({:@$)))L:0/ b
 y {~ /:"1 c
)

   cmbcomb 2#>:i.2
1 1 2 2
1 2 1 2
1 2 2 1
2 1 1 2
2 1 2 1
2 2 1 1

the number of such permutations is determined by 
   (!@(+/)% [:*/ !)x: 2#2
6

   (!@(+/)% [:*/ !)x: 5#2
113400

   ts'Treb=.cmbcomb 2#>:i.5'
0.043948924 50340608

   #Treb
113400

   ts'Tpj=.rperm2 2#>:i.5'
0.20252285 42215296

   #Tpj
113400

   Tpj-: Treb
0

   Tpj-:&(/:~) Treb
1

   (!@(+/)% [:*/ !)x: 6#2
7484400

   ts'rperm2 2#>:i.6'
15.864774 4.8486253e9

   ts'cmbcomb 2#>:i.6'
3.8703475 3.2212362e9


R.E. Boss

(Add your info to http://www.jsoftware.com/jwiki/Community/Demographics )


> -----Original Message-----
> From: programming-boun...@forums.jsoftware.com [mailto:programming-
> boun...@forums.jsoftware.com] On Behalf Of R.E. Boss
> Sent: zondag 26 april 2015 8:59
> To: programm...@jsoftware.com
> Subject: Re: [Jprogramming] Permutations with repeats (combinations?)
> 
> 
>    peermm 'ababc'
> |length error: peermm
> |   m=.,/(u*e)+"1/"_1(1-e)    #inv"1/m
> 
> 
> R.E. Boss
> 
> 
> > -----Original Message-----
> > From: programming-boun...@forums.jsoftware.com
> [mailto:programming-
> > boun...@forums.jsoftware.com] On Behalf Of Raul Miller
> > Sent: zondag 26 april 2015 3:22
> > To: Programming forum
> > Subject: Re: [Jprogramming] Permutations with repeats (combinations?)
> >
> > That's an error on my part.
> >
> > It' not unique to boxed data, you can see the same flaw with:
> >
> > peermm 'ababc'
> >
> > Basically, I did not spend enough time exploring the boundaries
> > between the two abstractions I was using.
> >
> > I think this fixes that problem:
> >
> > comb=: 4 : 0
> >  k=. i.>:d=.y-x
> >  z=. (d$<i.0 0),<i.1 0
> >  for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
> >  ; z
> > )
> >
> > peermm=:3 :0
> >   Y=. ;(/: #@>)</.~y
> >   arg=. </.~i.~Y
> >   n1=. 0 i.~1=#@> arg
> >   m=. (i.@! A. i.)n1
> >   for_d.n1}.arg do.
> >     u=.{.s=.>d
> >     n=.i.(#s)+{:$m
> >     e=.n e."1 s comb&#n
> >     m=.,/(u*e)+"1/"_1 (1-e)#inv"1/m
> >   end.
> >   m{Y
> > )
> >
> > There might be a better (more concise and faster) way of setting this
up?
> >
> > Thanks,
> >
> > --
> > Raul
> >
> >
> > On Sat, Apr 25, 2015 at 8:29 PM, 'Pascal Jasmin' via Programming
> > <programm...@jsoftware.com> wrote:
> > > this has wrong results
> > >
> > > peermm 1 1 ; 2 2 ; 1 1 ; 2 2 ;3
> > >
> > >
> > >
> > > ----- Original Message -----
> > > From: Raul Miller <rauldmil...@gmail.com>
> > > To: Programming forum <programm...@jsoftware.com>
> > > Cc:
> > > Sent: Saturday, April 25, 2015 8:24 PM
> > > Subject: Re: [Jprogramming] Permutations with repeats (combinations?)
> > >
> > > What problem does it have with boxed data? (It worked fine on boxed
> > > data when I tested it that way.)
> > >
> > > Thanks,
> > >
> > > --
> > > Raul
> > >
> > > On Sat, Apr 25, 2015 at 8:05 PM, 'Pascal Jasmin' via Programming
> > > <programm...@jsoftware.com> wrote:
> > >> Its even faster, and handles text, but not boxed data
> > >>
> > >> one use case for boxes is keeping some items together as a group
> > >>
> > >>   ;"1 rperm2 1 2 ; 1 2 ; 3 ;3 ; 3
> > >> 3 3 1 2 1 2 3
> > >> 3 3 1 2 3 1 2
> > >> 3 3 3 1 2 1 2
> > >> 3 1 2 3 1 2 3
> > >> 3 1 2 3 3 1 2
> > >> 3 1 2 1 2 3 3
> > >> 1 2 3 3 1 2 3
> > >> 1 2 3 3 3 1 2
> > >> 1 2 3 1 2 3 3
> > >> 1 2 1 2 3 3 3
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >>
> > >> ----- Original Message -----
> > >> From: Raul Miller <rauldmil...@gmail.com>
> > >> To: Programming forum <programm...@jsoftware.com>
> > >> Cc:
> > >> Sent: Saturday, April 25, 2015 2:02 PM
> > >> Subject: Re: [Jprogramming] Permutations with repeats
> (combinations?)
> > >>
> > >> My first attempt at implementing like that ran into a problem with
> > >> mix-matched types in r for some cases, so I reworked the thing to
> > >> support arguments of any type:
> > >>
> > >> comb=: 4 : 0
> > >> k=. i.>:d=.y-x
> > >> z=. (d$<i.0 0),<i.1 0
> > >> for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
> > >> ; z
> > >> )
> > >>
> > >> peermm=:3 :0
> > >>   arg=. (/: #@>)</.~i.~y
> > >>   n1=. 0 i.~1=#@> arg
> > >>   m=. (i.@! A. i.)n1
> > >>   for_d.n1}.arg do.
> > >>     u=.{.s=.>d
> > >>     n=.i.(#s)+{:$m
> > >>     e=.n e."1 s comb&#n
> > >>     m=.,/(u*e)+"1/"_1 (1-e)#inv"1/m
> > >>   end.
> > >>   m{y
> > >> )
> > >>
> > >> I have no idea if this is actually faster. I'll let someone else
worry
> > >> about that.
> > >>
> > >> --
> > >> Raul
> > >>
> > >> On Sat, Apr 25, 2015 at 12:58 PM, Roger Hui
> > <rogerhui.can...@gmail.com> wrote:
> > >>> The peermm function can be made faster by doing the actual
> > permutations of
> > >>> those cells of </.~y having only a single element.
> > >>>
> > >>>
> > >>> On Fri, Apr 24, 2015 at 10:46 PM, Raul Miller
<rauldmil...@gmail.com>
> > wrote:
> > >>>
> > >>>> On Fri, Apr 24, 2015 at 7:03 PM, Roger Hui
> > <rogerhui.can...@gmail.com>
> > >>>> wrote:
> > >>>> > The details of implementing this algorithm are left as an
exercise
> for
> > >>>> the
> > >>>> > reader. :-)
> > >>>>
> > >>>> Do I qualify as a reader?
> > >>>>
> > >>>> comb=: 4 : 0
> > >>>>  k=. i.>:d=.y-x
> > >>>>  z=. (d$<i.0 0),<i.1 0
> > >>>>  for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
> > >>>>  ; z
> > >>>> )
> > >>>>
> > >>>> peermm=:3 :0
> > >>>>   r=.i.1 0
> > >>>>   for_d.</.~y do.
> > >>>>     u=.{.s=.>d
> > >>>>     n=.i.(#s)+{:$r
> > >>>>     e=.n e."1 s comb&#n
> > >>>>     r=.,/(u*e)+"1/"_1 (1-e)#inv"1/r
> > >>>>   end.
> > >>>> )
> > >>>>
> > >>>>    peermm 1 1 2 2
> > >>>> 2 2 1 1
> > >>>> 2 1 2 1
> > >>>> 2 1 1 2
> > >>>> 1 2 2 1
> > >>>> 1 2 1 2
> > >>>> 1 1 2 2
> > >>>>
> > >>>> --
> > >>>> Raul
> > >>>>
> ----------------------------------------------------------------------
> > >>>> For information about J forums see
> > http://www.jsoftware.com/forums.htm
> > >>
> > >>>>
> > >>>
----------------------------------------------------------------------
> > >>> For information about J forums see
> > http://www.jsoftware.com/forums.htm
> > >
> > >>
----------------------------------------------------------------------
> > >> For information about J forums see
> > http://www.jsoftware.com/forums.htm
> > >>
----------------------------------------------------------------------
> > >> For information about J forums see
> > http://www.jsoftware.com/forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see
> > http://www.jsoftware.com/forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see
> > http://www.jsoftware.com/forums.htm
> > ----------------------------------------------------------------------
> > For information about J forums see
> http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to