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
