After reading this thread from September, I couldn't resist an "elementary school" version, shown twice below:
f=: 13 :'>:?y$6' ]A=:f 20 NB. Original rolls 5 1 4 1 5 2 2 6 2 4 5 6 1 3 6 2 1 4 4 2 }:1,6~:A 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 ]B=:(}:1,6~:A)<;.1 A NB. Boxes show extra rolls --T-T-T-T-T-T-T---T-T-T---T-T---T-T-T-T-┐ │5│1│4│1│5│2│2│6 2│4│5│6 1│3│6 2│1│4│4│2│ L-+-+-+-+-+-+-+---+-+-+---+-+---+-+-+-+-- ]C=:+/"1 >B NB. Value of rolls 5 1 4 1 5 2 2 8 4 5 7 3 8 1 4 4 2 $C NB. Usable answers 17 f=: 13 :'>:?y$6' ]A=:f 20 NB. Original rolls 1 2 6 6 6 5 3 5 1 6 6 3 1 4 2 6 4 1 2 2 }:1,6~:A 1 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 1 1 1 ]B=:(}:1,6~:A)<;.1 A NB. Boxes show extra rolls --T-T-------T-T-T-T-----T-T-T-T---T-T-T-┐ │1│2│6 6 6 5│3│5│1│6 6 3│1│4│2│6 4│1│2│2│ L-+-+-------+-+-+-+-----+-+-+-+---+-+-+-- ]C=:+/"1 >B NB. Value of rolls 1 2 23 3 5 1 15 1 4 2 10 1 2 2 $C NB. Usable answers 14 Linda -----Original Message----- From: programming-boun...@forums.jsoftware.com [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Raul Miller Sent: Friday, September 26, 2014 11:50 PM To: Programming forum Subject: Re: [Jprogramming] Repeated rolling dice In addition to Pascal's comments, "0 can sometimes run into an issue with word formation rules (when the argument to the right begins with a number). Thanks, -- Raul On Fri, Sep 26, 2014 at 12:05 PM, Johann Hibschman < <mailto:jhibsch...@gmail.com> jhibsch...@gmail.com> wrote: > Thanks, that's helpful, although the tacit version of "bulk" is a bit > too much for me to parse. > > I imagine factor of 2 helps because it gets you over the expected 6r5 > rolls per "game", assuming I did that recurrence right > (e=(5r6*1)+1r6*(1+e)). > > I do have some lingering style questions though: > > 1. It looks to me like David Lambert's solution used both (&>) and > (">) to force a verb to apply to the atoms, which I would write ("0). > Are there any particular reasons to prefer one over the other? ("0) > may require a ([) to avoid merging with a follow-up literal, (&>) > seems a little like exploiting a side-effect of (>), and (">) could > just as easily be ("+) or any other 0 0 0 verb. > > 2. Is there any difference between (bind) and (@:)? They look to me > like they would be identical. > > Thanks, > Johann > > On Thu, Sep 25, 2014 at 3:10 PM, Raul Miller < <mailto:rauldmil...@gmail.com> rauldmil...@gmail.com> > wrote: > > 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@[))^:( <mailto:0=6&|@%7b:@%7b.)%5e:_~> 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 < > > <mailto:programm...@jsoftware.com> programm...@jsoftware.com> wrote: > > > >> this works > >> > >> (, >:@?@6:)^:((0=#) +. 6={:)^:_ i.0 > >> > >> ([: +/ (, >:@?@6:)^:((0=#) +. 6={:)^:_) i.0 > >> 11 > >> > >> > >> > >> ----- Original Message ----- > >> From: Johann Hibschman < <mailto:jhibsch...@gmail.com> jhibsch...@gmail.com> > >> To: Programming forum < <mailto:programm...@jsoftware.com> 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> http://www.jsoftware.com/forums.htm > >> > >> ------------------------------------------------------------------- > >> --- For information about J forums see > >> <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm > >> > > -------------------------------------------------------------------- > > -- For information about J forums see > > <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see <http://www.jsoftware.com/forums.htm> http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm