That is very close to what I came up with, for the case where we want only a single value from our result:
d6=:1 + ? bind 6 repd6=: [:+/(,d6)^:(6={:)@d6 Here's a variation on Roger Hui's approach, for the case where we want N values from our result: d6s=: 1 + [: ? #&6 bulk=:{.#&0(],~(+/;.1~1:}:@,0~:6&|)@(],d6s@[))^:(0=6&|@{:@{.)^:_~] Example use: bulk 20 5 5 5 4 3 3 2 3 3 9 1 4 16 3 3 1 3 17 3 4 This would probably be much clearer if implemented explicitly rather than tacitly, and probably would be more efficient also. So: bulkd6s=:3 :0 r=. i. 0 while. y >: #r do. r=. r, d6s y mask=. }: 1, 0~:6|r r=. mask +/;.1 r end. y{.r ) But statistically speaking, this is still not as efficient as it could be. I think we'd do better with: bulkd6=:3 :0 r=. i. 0 while. y >: #r do. r=. r, d6s 2*y mask=. }: 1, 0~:6|r r=. mask +/;.1 r end. y{.r ) Do you see why this tends to be more efficient? Thanks, -- Raul On Thu, Sep 25, 2014 at 11:50 AM, 'Pascal Jasmin' via Programming < programm...@jsoftware.com> wrote: > this works > > (, >:@?@6:)^:((0=#) +. 6={:)^:_ i.0 > > ([: +/ (, >:@?@6:)^:((0=#) +. 6={:)^:_) i.0 > 11 > > > > ----- Original Message ----- > From: Johann Hibschman <jhibsch...@gmail.com> > To: Programming forum <programm...@jsoftware.com> > Cc: > Sent: Thursday, September 25, 2014 9:06 AM > Subject: [Jprogramming] Repeated rolling dice > > Hi all, > > For fun, I've been running some statistics for a game with an unusual > rule for rolling dice: if a 6 is rolled, roll again and add the > result, repeating on any subsequent 6s. I wanted to implement this in > J, collecting all the individual rolls (rather than just the sum.) > > It seems like there should be a more clever and elegant way to do > this, but this is what I have: > > NB. Simple roll. > roll0 =: >:@? > > NB. This seems to work, but it's not very clever. > roll =: 3 : 0 > r =. >:?y > if. r=y do. r=. r,(roll y) end. > r > ) > > NB. Attempt at iterating via power. Fails because repeats > NB. signal termination. > roll0^:(6&=)^:(<_) 6 > > NB. Attempt at iterating via agenda. Not even close yet. > NB. ]`(]+$:) @. (=&6) NB. where to stick in the roll? > > This gives what I expect: > > roll"0 ] 10#6 > 6 1 0 > 3 0 0 > 3 0 0 > 2 0 0 > 5 0 0 > 2 0 0 > 6 6 2 > 2 0 0 > 1 0 0 > 6 3 0 > > But is there a better way to do this? Also, are there any known issues > with the RNG? I've not gathered enough statistics to prove it, but the > results look clumpier (more identical values in a row) than I expect. > Now, I know that's a common cognitive bias, so it may just be me, but > is there a discussion of the quality of the RNG somewhere? > > Thanks, > Johann > ---------------------------------------------------------------------- > 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