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

Reply via email to