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
<[email protected]> wrote:
> this has wrong results
>
> peermm 1 1 ; 2 2 ; 1 1 ; 2 2 ;3
>
>
>
> ----- Original Message -----
> From: Raul Miller <[email protected]>
> To: Programming forum <[email protected]>
> 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
> <[email protected]> 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 <[email protected]>
>> To: Programming forum <[email protected]>
>> 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 <[email protected]>
>> 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 <[email protected]> wrote:
>>>
>>>> On Fri, Apr 24, 2015 at 7:03 PM, Roger Hui <[email protected]>
>>>> 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