Dice roll results - Printable Version +- HP Forums (https://www.hpmuseum.org/forum) +-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html) +--- Forum: HP Prime (/forum-5.html) +--- Thread: Dice roll results (/thread-15051.html) |
Dice roll results - Tonig00 - 05-24-2020 04:05 PM Hello I am blocked. Any help welcome. I want to put in a matrix the possible variations of throwing t dice of c sides. For 3 dice of 3 sides will be something like (3^3 lines): [[111][112][113][121][122][123][131][132][133][211]….[333]] My initial aproach is: EXPORT TossDice(toss,sides) BEGIN LOCAL i,j,k,f,c,p,r; f:=sides^toss; c:= toss; MAKEMAT(f,c)▶r; p:=1; FOR i FROM 1 TO f DO FOR j FROM c+1-p DOWNTO 1 DO FOR k FROM 1 TO c DO r[i+k-1,j]:=k; END; END; END; END; It is a function similar to rolldie() in R software (prob package). It does not work and it seems to me that I would have to nest a lot of "for" loops to get it. I do not think is the way to get it. May be in the forum it has appeared before, if so tell me where. Thanks very much for your help Toni RE: Dice roll results - victorvbc - 05-24-2020 06:02 PM So you want a deterministic matrix with all the possibilities, not a random distribution, is that it? RE: Dice roll results - ijabbott - 05-24-2020 09:15 PM You should be able to do it with a couple of loops: EXPORT TossDice(toss,sides) BEGIN LOCAL i,j,f,p,r; f := sides^toss; MAKEMAT(f,toss)▶r; FOR i FROM 1 to f DO p := i-1; FOR j FROM 1 to toss DO r[i,j] := 1 + p MOD sides; p := IP(p / sides); END; END; END; I haven't tested it. RE: Dice roll results - Carlos295pz - 05-24-2020 11:28 PM Code: EXPORT TossDice(toss,sides) RE: Dice roll results - Tonig00 - 05-25-2020 06:28 PM Thanks very very much to all. Beautiful, simple, just much better than what I have finally done with a big mess: EXPORT RollDi(toss,dice) BEGIN LOCAL v,v1,j,k,d,f; LOCAL t,p,p1,r,r1,l; d:=dice; v:=MAKEMAT(J+K,1,d); v1:=MAKEMAT(0,1,d); t:=toss; f:=d^t; r:=MAKEMAT(0,t,f); r1:=MAKEMAT(0,1,f); p:=1; FOR k FROM 1 TO t DO //loop de t columnas WHILE p<f DO //rellena cada columna FOR j FROM 1 TO d DO MAKEMAT(v[1,j],1,d^(k-1))▶v1; l:=length(transpose(v1)); CAS.REPLACE(r1,p,v1); p:=p+l END; END; p:=1; CAS.REPLACE(r,{t+1-k,1},r1); r1:=MAKEMAT(0,1,f); END; RETURN transpose(r); END; It works, at least for low numbers. Just for future nights with no sleeping, could you tell me how to jump from one point to another while debugging a program? Just to do a complete "loop" for example. Bye RE: Dice roll results - pinkman - 05-25-2020 10:04 PM Just insert this in your program code where you need to (re)start debugging : Code:
RE: Dice roll results - pinkman - 05-25-2020 10:08 PM To be more precise: the DEBUG instruction launches the debugger and halt at the point your program execution is. This acts like a breakpoint. If you need conditional breakpoint, simply insert this instruction in a conditional statement : IF .. THEN DEBUG(); Thibault RE: Dice roll results - Tonig00 - 05-26-2020 11:05 PM Thanks very much. Easy and very helpful RE: Dice roll results - lmmt61 - 05-28-2020 07:03 AM Hello, just to add extra information, if you want to check your results there is this web page: https://anydice.com/ There, you can play with any number of n-sided dice. Very interesting!, at least for me. Bye! RE: Dice roll results - Tonig00 - 05-30-2020 03:31 PM Hello Following with the probability I am using a book called: "Introduction to Pobability and Statistics Using R" by Jay Kerns. It is full of examples not very complicated. So my intention when I have free time is to practice with the Prime to do the same functions as described in it. I have already written some with your help. I try to attach the initial program, is my first time so I hope I do it properly. Thanks Toni |