HP Forums

Full Version: Dice roll results
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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
So you want a deterministic matrix with all the possibilities, not a random distribution, is that it?
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.
Tongue
Code:
EXPORT TossDice(toss,sides)
BEGIN
  MAKEMAT(IP((I-1)/(sides^(toss-J))) MOD sides+1,sides^toss,toss);
END;
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
Just insert this in your program code where you need to (re)start debugging :
Code:

DEBUG();
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
Thanks very much.
Easy and very helpful
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!
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
Reference URL's