All, Wow! Chris Burke's suggestion about rounddist works better than what I expected.
g=.1 rounddist "1 (* 172 % +/"1)"1 ] f01 +/172=+/"1 g 100000 NB. Now ALL the 6-digit vectors generated sum to 172!! NB. To check: >./,g 145 <./,g 0 NB. However, some of the vectors contain integers > 70, and/or some include a zero, which is out-of-spec: NB. Find & count 6 integer vectors in g that have integers > 70 in them #g#~+./"1]100000 6 $70<,g 5006 NB. So there are still about 5% of the 6 integer vectors that miss the original spec of integers 1-70 #g#~+./"1]100000 6 $0=,g 4250 And another 4.2% that contain zeros Skip Skip Cave Cave Consulting LLC On Wed, Jun 27, 2018 at 6:09 PM chris burke <cbu...@jsoftware.com> wrote: > Perhaps use the distributed rounding function from the numeric script? For > example: > > load 'numeric' > > (+/,]) 1 rounddist a * 172 % +/a=. 42 23 5 20 41 40 > 172 42 23 5 21 41 40 > > (+/,]) 1 rounddist a * 172 % +/a=. 50 35 50 8 19 11 > 172 50 35 49 8 19 11 > > > On Wed, Jun 27, 2018 at 3:47 PM, Skip Cave <s...@caveconsulting.com> > wrote: > > > Devon, > > > > That 0-1 fraction method is a really nice way to generate lots of sets > of 6 > > random integers 1-70 that sum to 172. > > That got me to thinking -- shouldn't we be able to make all the generated > > 6-integer sets sum to 172? > > > > f01=. 1e5 6?@$0 NB. Generating the fractions > > > > NB. Now if we instument your verb a bit more: > > > > itt1=. f01#~c=.172=+/"1 b=.([: <. 0.5 + ] * 172 % +/"1)"1 ] f01 > > > > $itt1 > > > > 55085 6 > > > > NB. Not bad. Over half of the strings sum to 172. > > > > > > NB. What about the other half (invert the c selection vector)? > > > > 5{.b#~-.c > > > > 42 23 5 20 41 40 > > > > 50 35 50 8 19 11 > > > > 37 34 34 17 22 27 > > > > 49 10 25 2 34 53 > > > > 30 14 44 15 32 38 > > > > > > How far off are the rest of these strings ? > > > > d=.172-+/"1 b#~-.-.c > > > > 20{.d > > > > 1 _1 1 _1 _1 _1 1 1 _1 1 1 _1 1 1 1 1 1 1 _1 1 > > > > _20{.d > > > > 1 1 _1 _1 1 1 _1 _1 _1 _1 _1 1 _1 2 _2 1 1 _1 _1 1 > > > > > > >./d > > > > 2 > > > > <./d > > > > _2 > > > > NB. Looks like the rest of the strings are off by as much as +/- 2 > > > > > > So we should be able find the discrepancy in the remaining strings, and > > randomly pick one or more of the integers in each of the strings to add > or > > subtract 1 or 2 to. Then all the strings will sum to 172. > > > > > > I'll leave that exercise to the reader... > > > > > > Skip > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm