That said, note:

   #3 nparts 5
25
   #3 par 5
6

It's probably worth verifying, again, that I'm on the right track here...

Thanks,

-- 
Raul


On Fri, Oct 20, 2017 at 7:27 PM, Raul Miller <[email protected]> wrote:
> Hmm... quite the set of constraints...
>
> But, if I understand right, here's a reference implementation:
>
>    nparts=: (#~ 1 - a: e."1 ])@~.@([: /:~"1 i.@] </."1~ [ #.^:_1 [ i.@^ ])
>    2 nparts 3
> ┌───┬───┐
> │0 1│2  │
> ├───┼───┤
> │0 2│1  │
> ├───┼───┤
> │0  │1 2│
> └───┴───┘
>    3 nparts 4
> ┌───┬───┬───┐
> │0 1│2  │3  │
> ├───┼───┼───┤
> │0 2│1  │3  │
> ├───┼───┼───┤
> │0  │1 2│3  │
> ├───┼───┼───┤
> │0 3│1  │2  │
> ├───┼───┼───┤
> │0  │1 3│2  │
> ├───┼───┼───┤
> │0  │1  │2 3│
> └───┴───┴───┘
>
> Thanks,
>
> --
> Raul
>
>
> On Fri, Oct 20, 2017 at 7:06 PM, 'Skip Cave' via Programming
> <[email protected]> wrote:
>> Perhaps here is a better way to describe the problem I was trying to solve:
>>
>> 1. I have y unique objects. I have x containers. I want to find all the
>> different ways I can put those y unique objects into x containers.
>>
>> 2. A single trial is defined as distributing *all* y of the objects into
>> all of the x containers. After the trial, the objects are removed from the
>> containers and redistributed in the containers for the next trial. Objects
>> can not be duplicated.
>>
>> 3. Empty containers are not allowed in any trial. There must be at least
>> one object in every container in every trial.
>>
>> 4. There is no order requirement for objects in a container. If two trials
>> are identical except for the order of the objects in any of the containers,
>> those two trials are considered as one trial.
>>
>> 5. There is no order requirement for the containers. If two trials are
>> identical in that both trials have the same number of objects in each of
>> the x containers, but the order of the containers is different, those two
>> trials are considered as one trial.
>>
>> Skip
>>
>> Skip Cave
>> Cave Consulting LLC
>>
>> On Fri, Oct 20, 2017 at 3:54 AM, Raul Miller <[email protected]> wrote:
>>
>>> With that description, I think I might do something like this:
>>>
>>>    nparts=: ~.@([: /:~"1 i.@] </."1~ [ #.^:_1 [ i.@^ ])
>>>    2 nparts 3
>>> ┌───┬─────┐
>>> │   │0 1 2│
>>> ├───┼─────┤
>>> │0 1│2    │
>>> ├───┼─────┤
>>> │0 2│1    │
>>> ├───┼─────┤
>>> │0  │1 2  │
>>> └───┴─────┘
>>>
>>> I should be able to do something more efficient, but before I attempt
>>> that, I would like to clarify something:
>>>
>>> In your examples, you do not have any empty partitions, so is that a
>>> part of the specification also?
>>>
>>> I am unsure if I should be paying close attention to your examples
>>> because you said "The order of the objects in each partition is not
>>> important" but your examples also omit partitions which contain the
>>> objects out of order.
>>>
>>> Actually... there's several kinds of order here which we could be
>>> discussing:
>>>
>>> (1) the order of objects within a partition.
>>> (2) the order of objects across partitions.
>>> (3) the order of partitions.
>>>
>>> In other words:
>>>
>>> NB. (1) the order of objects within a partition
>>>    \:~each 2 nparts 3
>>> ┌───┬─────┐
>>> │   │2 1 0│
>>> ├───┼─────┤
>>> │1 0│2    │
>>> ├───┼─────┤
>>> │2 0│1    │
>>> ├───┼─────┤
>>> │0  │2 1  │
>>> └───┴─────┘
>>>
>>> NB. (2) the order of objects across partitions
>>>    2 ~.@([: \:~"1 i.@] </."1~ [ #.^:_1 [ i.@^ ]) 3
>>> ┌─────┬───┐
>>> │0 1 2│   │
>>> ├─────┼───┤
>>> │2    │0 1│
>>> ├─────┼───┤
>>> │1    │0 2│
>>> ├─────┼───┤
>>> │1 2  │0  │
>>> └─────┴───┘
>>>
>>> NB. (3) the order of partitions
>>>    2 ((i.@[ ,"1 [ #.^:_1 i.@^) <@}./."1 {. , i.@]) 3
>>> ┌─────┬─────┐
>>> │0 1 2│     │
>>> ├─────┼─────┤
>>> │0 1  │2    │
>>> ├─────┼─────┤
>>> │0 2  │1    │
>>> ├─────┼─────┤
>>> │0    │1 2  │
>>> ├─────┼─────┤
>>> │1 2  │0    │
>>> ├─────┼─────┤
>>> │1    │0 2  │
>>> ├─────┼─────┤
>>> │2    │0 1  │
>>> ├─────┼─────┤
>>> │     │0 1 2│
>>> └─────┴─────┘
>>>
>>> I have presumed that you are thinking of both the partition contents
>>> and the partitions themselves as sets. In other words, I think that
>>> none of these orders matter. But... this kind of thing is worth
>>> verifying?
>>>
>>> Thanks,
>>>
>>> --
>>> Raul
>>>
>>> On Fri, Oct 20, 2017 at 12:19 AM, 'Skip Cave' via Programming
>>> <[email protected]> wrote:
>>> > Mike,
>>> >
>>> > I wasn't very thorough in my definition of the original problem. I
>>> thought
>>> > that the example I gave was enough to clarify the requirements, but
>>> looking
>>> > back, more definition would have been good.
>>> >
>>> > The original problem I posted was to develop a dyadic verb that would
>>> take
>>> > y objects and show all the ways that those y objects could be partitioned
>>> > into x groups. Each partition set must include all objects exactly once.
>>> > Duplication of objects is not allowed. The order of the objects in each
>>> > partition is not important.
>>> >
>>> > Erling got the right idea in his previous post:
>>> >
>>> >   par=: 4 : '(1,.2</\"1(i.x)#/~(y=+/"1 o)#o=.((x$v)#:i.v^x){1+i.v=.1+
>>> > y-x)<;.1[1+i.y'
>>> >
>>> >    2 par 3
>>> > ┌───┬───┐
>>> > │1  │2 3│
>>> > ├───┼───┤
>>> > │1 2│3  │
>>> > └───┴───┘
>>> >    2 par 4
>>> > ┌─────┬─────┐
>>> > │1    │2 3 4│
>>> > ├─────┼─────┤
>>> > │1 2  │3 4  │
>>> > ├─────┼─────┤
>>> > │1 2 3│4    │
>>> > └─────┴─────┘
>>> >    2 par 5
>>> > ┌───────┬───────┐
>>> > │1      │2 3 4 5│
>>> > ├───────┼───────┤
>>> > │1 2    │3 4 5  │
>>> > ├───────┼───────┤
>>> > │1 2 3  │4 5    │
>>> > ├───────┼───────┤
>>> > │1 2 3 4│5      │
>>> > └───────┴───────┘
>>> >    3 par 4
>>> > ┌───┬───┬───┐
>>> > │1  │2  │3 4│
>>> > ├───┼───┼───┤
>>> > │1  │2 3│4  │
>>> > ├───┼───┼───┤
>>> > │1 2│3  │4  │
>>> > └───┴───┴───┘
>>> >    3 par 5
>>> > ┌─────┬─────┬─────┐
>>> > │1    │2    │3 4 5│
>>> > ├─────┼─────┼─────┤
>>> > │1    │2 3  │4 5  │
>>> > ├─────┼─────┼─────┤
>>> > │1    │2 3 4│5    │
>>> > ├─────┼─────┼─────┤
>>> > │1 2  │3    │4 5  │
>>> > ├─────┼─────┼─────┤
>>> > │1 2  │3 4  │5    │
>>> > ├─────┼─────┼─────┤
>>> > │1 2 3│4    │5    │
>>> > └─────┴─────┴─────┘
>>> >    3 par 6
>>> > ┌───────┬───────┬───────┐
>>> > │1      │2      │3 4 5 6│
>>> > ├───────┼───────┼───────┤
>>> > │1      │2 3    │4 5 6  │
>>> > ├───────┼───────┼───────┤
>>> > │1      │2 3 4  │5 6    │
>>> > ├───────┼───────┼───────┤
>>> > │1      │2 3 4 5│6      │
>>> > ├───────┼───────┼───────┤
>>> > │1 2    │3      │4 5 6  │
>>> > ├───────┼───────┼───────┤
>>> > │1 2    │3 4    │5 6    │
>>> > ├───────┼───────┼───────┤
>>> > │1 2    │3 4 5  │6      │
>>> > ├───────┼───────┼───────┤
>>> > │1 2 3  │4      │5 6    │
>>> > ├───────┼───────┼───────┤
>>> > │1 2 3  │4 5    │6      │
>>> > ├───────┼───────┼───────┤
>>> > │1 2 3 4│5      │6      │
>>> > └───────┴───────┴───────┘
>>> >
>>> > Skip Cave
>>> > Cave Consulting LLC
>>> >
>>> > On Thu, Oct 19, 2017 at 5:47 PM, 'Mike Day' via Programming <
>>> > [email protected]> wrote:
>>> >
>>> >> Skip,  in your actual Quora Problem,  why not include other triads,
>>> >> such as 1 1 24,  2 3 4 etc;   or, otherwise,  why include both 2 4 3
>>> and 4
>>> >> 2 3 ?
>>> >>
>>> >> Anyway,  this is (quite) short and brutish but not too nasty to solve
>>> your
>>> >> Quora problem for quite small numbers and numbers of factors:
>>> >>
>>> >>    |: 24 ([ ( (= */"1)#])  [:>:[#.inv i.@^ ) 3  NB. transpose
>>> gratuitous!
>>> >>  1  1 1 1 1 1  1  1  2 2 2 2 2  2 3 3 3 3 4 4 4 4 6 6 6 8 8 12 12 24
>>> >>  1  2 3 4 6 8 12 24  1 2 3 4 6 12 1 2 4 8 1 2 3 6 1 2 4 1 3  1  2 1
>>> >> 24 12 8 6 4 3  2  1 12 6 4 3 2  1 8 4 2 1 6 3 2 1 4 2 1 3 1  2  1 1
>>> >>
>>> >> It builds triads 1 1 1 , 1 1 2 ,...1 1 24, ... up to 24 24 24, and keeps
>>> >>
>>> >> just those whose product is 24.
>>> >>
>>> >>
>>> >> No points for space or time, filtering 30 out of 13824 candidates, but
>>> it's
>>> >>
>>> >> quite straightforward,  and it does yield all 30 permutations,  which
>>> some
>>> >>
>>> >> of the Quora corresondents appear to consider the requirement.
>>> >>
>>> >>
>>> >> NB - it's not clear to me what the problem actually is - is 30 the
>>> required
>>> >>
>>> >> answer (number of permutations of 3 suitable factors),  or 6 (number of
>>> >>
>>> >> combinations of same)?
>>> >>
>>> >>
>>> >> Mike
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>>
>>> >>>
>>> > ----------------------------------------------------------------------
>>> > 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