Sorry about the wrong terminology. What i meant was:

Given a vector of random integers (there may be duplicates), what is the
most concise and or efficient way to
generate a list of the numbers along with the sum of all combinations of
the numbers in a single vector? How about the   products of all
combinations?

Skip Cave
Cave Consulting LLC

On Mon, Oct 2, 2017 at 1:51 PM, Raul Miller <[email protected]> wrote:

> Prime factors of an integer are not, in the general case, a set. And
> you really should be careful to avoid specifying a set when what you
> want is not a set.
>
> You might be interested in
> https://rosettacode.org/wiki/Factors_of_an_integer#J ?
>
> That said, refinement is an important part of the specification
> process, so - since it seems you were looking for something different
> - maybe it's worth redoing the specification?
>
> Thanks,
>
> --
> Raul
>
>
> On Mon, Oct 2, 2017 at 2:09 PM, Skip Cave <[email protected]> wrote:
> > My original approach was even more naive than Marc's:
> >
> > NB. from     Roger Hui's Combinations essay on the J website:
> > https://goo.gl/WL4nXn
> >
> > c=: ((= +/"1) |.@:I.@# ]) #:@i.@(2&^)       NB. Roger called this
> 'comb2'
> >
> > NB. I used this definition because I could cut & paste one line, and not
> > require an editor
> >
> >       a =. 2 2 5 5
> >
> > ~.(*/"1(4 c 4){a),(*/"1(3 c 4){a),(*/"1(2 c 4){a),, |:(1 c 4){a
> >
> > 100 20 50 4 10 25 2 5
> >
> >
> > I like to sort it:
> >
> >       /:~~.(*/"1(4 c 4){a),(*/"1(3 c 4){a),(*/"1(2 c 4){a),, |:(1 c 4){a
> >
> > 2 4 5 10 20 25 50 100
> >
> >
> > The final goal of this exercise was to find all the divisors of an
> integer
> > (not just the prime divisors).
> >
> >
> > So you need to find the prime factors of the integer, for example 100:
> >
> >
> >       ]a =. q:100
> >
> > 2 2 5 5
> >
> >           /:~~.(*/"1(4 c 4){a),(*/"1(3 c 4){a),(*/"1(2 c 4){a),, |:(1 c
> 4){a
> >
> > 2 4 5 10 20 25 50 100
> >
> >
> > So these are all the divisors of 100.
> >
> >
> > To use Raul's verb, it needs some mods. I can't do the unique until the
> > end, because prime factors of an integer are often duplicated.
> >
> >
> >       F1=:1 :'u@#~ #:@i.@(2^#)'     NB. Here's Raul's verb minus the
> initial
> > unique
> >
> > */F1 q:100       NB. we take the product
> >
> > 1 5 5 25 2 10 10 50 2 10 10 50 4 20 20 100
> >
> > ~.*/F1 q:100     NB. Now we take the unique
> >
> > 1 5 25 2 10 50 4 20 100
> >
> > /:~~.*/F1 q:100       NB. Sort it to make it pretty
> >
> > 1 2 4 5 10 20 25 50 100
> >
> >
> > Didn't really need the 1, but Raul likes the empty combination.
> >
> >
> > Now we put it all in one verb:
> >
> >
> >       F2=. /:~~.*/F1 q:
> >
> >       F2 100
> >
> > |length error: F2
> >
> > | F2 100
> >
> >       F2=. /:~~.*/F1 q:]
> >
> >       F2 100
> >
> > |domain error: F2
> >
> > | F2 100
> >
> >
> > So this is above my pay grade. I'll have to stick with my inline code:
> >
> >
> >       /:~~.*/F1 q:110
> >
> > 1 2 5 10 11 22 55 110
> >
> >       /:~~.*/F1 q:43
> >
> > 1 43
> >
> >       /:~~.*/F1 q:45
> >
> > 1 3 5 9 15 45
> >
> >       /:~~.*/F1 q:444
> >
> > 1 2 3 4 6 12 37 74 111 148 222 444
> >
> >
> > So I can find all the divisors of an integer.
> >
> >
> > Skip
> >
> >
> >
> >
> >
> >
> > Skip Cave
> > Cave Consulting LLC
> >
> > On Mon, Oct 2, 2017 at 12:15 PM, Marc Simpson <[email protected]> wrote:
> >
> >> More naive than Raul's approach, first pass using the 'stats' lib:
> >>
> >>       a=.2 5 7
> >>       require'stats'
> >>       combv=: ] {~ (comb #@])
> >>       3 combv a
> >> 2 5 7
> >>       2 combv a
> >> 2 5
> >> 2 7
> >> 5 7
> >>       1 combv a
> >> 2
> >> 5
> >> 7
> >>       combos=: (1 + i.@#) <@combv"0 1 ]
> >>       combos a
> >> ┌─┬───┬─────┐
> >> │2│2 5│2 5 7│
> >> │5│2 7│         │
> >> │7│5 7│         │
> >> └─┴───┴─────┘
> >>       f=: 1 : ';u/"1 each combos y'
> >>       +f a
> >> 2 5 7 7 9 12 14
> >>       *f a
> >> 2 5 7 10 14 35 70
> >>
> >> /M
> >>
> >> On Mon, Oct 2, 2017 at 10:06 AM, Raul Miller <[email protected]>
> >> wrote:
> >> > For a first effort, I would go with
> >> >
> >> >       F=:1 :'(u@#~ #:@i.@(2^#))@~.'
> >> >       f=: /F
> >> >
> >> > Hopefully that makes the issues obvious - the specification here calls
> >> > for a result which grows exponentially with the size of the argument
> >> > set.
> >> >
> >> > Also:
> >> >
> >> > The ~. might be extra work, but for typical cases the effort of
> >> > ensuring that the argument is a set is trivial compared to the effort
> >> > of constructing the result.
> >> >
> >> > You did not include the empty combination in your example results, but
> >> > given your specification my initial inclination is to treat that as an
> >> > oversight.
> >> >
> >> > I defined F instead of going straight for f because for testing
> >> > purposes I want to be able to do (<F a), and perhaps similar things.
> >> >
> >> > Thanks,
> >> >
> >> > --
> >> > Raul
> >> >
> >> >
> >> > On Mon, Oct 2, 2017 at 12:49 PM, Skip Cave <[email protected]>
> >> wrote:
> >> >> Given a set of integers, what is the most concise and or efficient
> way
> >> to
> >> >> list the numbers along with the sum of all combinations of the
> numbers?
> >> the
> >> >> products of all combinations?
> >> >>
> >> >> for example:
> >> >>
> >> >> a =. 2 5 7
> >> >> + f a       NB. 2, 5, 7, (2+5), (2+7), (5+7), (2+5+7)
> >> >> 2 5 7 7 9 12 14
> >> >>
> >> >> * f a       NB. 2, 5, 7, (2*5), (2*7), (5*7), (2*5*7)
> >> >> 2 5 7 10 14 35 70
> >> >>
> >> >> The function 'f' should work for any verb and any size right argument
> >> noun
> >> >> vector.
> >> >>
> >> >> Skip
> >> >>
> >> >> Skip Cave
> >> >> Cave Consulting LLC
> >> >> ------------------------------------------------------------
> ----------
> >> >> 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