I think it's easier to post my code than to try answering your question.
I've run successfully this in a new session, so I think it's self-contained.

Apologies for the verbose code - it's as I wrote it,  and I haven't attempted
to polish it for presentation here.  The function "part2" , not shown here,
was the one I wrote before I remembered there were three throws for
each turn!   I would have preferred to deal with both players in a double-
go,  but gave up.  I do of course realise that there's a lot of reduplicated
code for player 2 - it would have been neater to move the code to an
ecternal function,  but I didn't!

Here it is - I hope it's not too opaque.

m10 =: 10&|&.<:   NB. modulo function for origin 1

die3   =:    ~. /:~,(1 2 3 +/])^:2 ]1 2 3
ctdie3 =:    #/.~/:~,(1 2 3 +/])^:2 ]1 2 3

part2a =: 3 : 0
21 part2a y
:
cts         =. 1   $ 1
'pos1 pos2' =. 2 1 $ y
'scr1 scr2' =. 2 1 $ 0
tgt  =. x
wins =. 0 0
turns=. 0
ndie3=. # die3
while. #cts do.
   NB. player 1
   turns =. >: turns
   pos1  =. m10 , pos1 +/ die3
   cts   =. ,cts <.@*/ ctdie3
   scr1  =. pos1 + ndie3 # scr1
   pscr  =. pos1,. scr1,. ndie3#pos2,. scr2
   cts   =. pscr +//. cts
   'pos1 scr1 pos2 scr2' =. |: pscr =. ~. pscr
   if. +/ win1=. tgt <: scr1 do.
      i1   =. I. win1
      wins =. wins + 2 {. +/ i1{cts
echo 'new 1 wins at turn '; turns; wins
      cts  =. cts#~ -. win1
      pscr =. pscr#~-. win1
      'pos1 scr1 pos2 scr2' =. |: ~. pscr
   end.
   NB. player 2
   turns =. >: turns
   pos2  =. m10 , pos2 +/ die3
   cts   =. ,cts <.@*/ ctdie3
   scr2  =. pos2 + ndie3 # scr2
   pscr  =. (pos2,. scr2),.~ ndie3#pos1,. scr1
   cts   =. pscr +//. cts
   'pos1 scr1 pos2 scr2' =. |: pscr =. ~. pscr
   if. +/ win2=. tgt <: scr2 do.
      i2   =. I. win2
      wins =. wins + _2 {. +/ i2{cts
echo 'new 2 wins at turn '; turns; wins
      cts  =. cts#~ -. win2
      pscr =. pscr#~-. win2
      'pos1 scr1 pos2 scr2' =. |: ~. pscr
   end.
end.
turns; wins
)

Cheers,

Mike

On 11/01/2022 00:17, Raul Miller wrote:
Your 10&|&.<: is probably more comprehensible than my 11 |&.<:

But for part B, how did you handle the smearing of scores that
resulted from those new positions and counts?

Thanks,



--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to