## Strange Die

Posted by ragknot on October 3, 2011 – 2:45 am

Just like Chris’s #4 (previous post) but …

you have a strange die. Half the time you roll a six, it apprears as a seven. What is the average number of rolls of a die to have got each number (1 to 7) at least once?Знакомства

October 3rd, 2011 at 10:00 am

infinity

as you’ll never get a 6

October 3rd, 2011 at 10:26 am

Hi ragknot. Good problem, thanks. I’ll have a bash later (8+ hours from now). I won’t be using a program (except maybe to verify).

Hi Your name. I’m pretty sure that ragknot means that you are equally likely to get a 6 or a 7.

October 3rd, 2011 at 2:27 pm

I tried to pass this on. The die has only six sides, so 1/6th of the rolls should be a one. This will make the problem similiar to others. But the deal is this.. one time out of six the “strange” side will be up… and 1/2 of the time it will be a six, the other half, it will be a seven.

It is NOT like a seven sided die. Funny huh?

October 4th, 2011 at 6:27 am

yeah but you probably should have calculated the answer by hand first. if you did that you would not have posted the problem. i am half way and my sub answer is 125661/6930, the expected time it takes to roll all if you have already rolled a 6.

i bet you used a computer program.

October 4th, 2011 at 6:59 am

prob 99% chance that i made a mistake somewhere, but my guess is 49817/2310=21.5658.

October 4th, 2011 at 7:15 am

Hi Jan. Ragknot almost always uses a computer program, he is not mathematically minded, but he does like practical engineering solutions to problems. You have the correct answer. Unlike you, I resorted to decimals rather than exact numbers.

I’m quite shocked at how difficult the problem became with such a seemingly small change from a normal die.

—-

Call faces 1,2,3,4 and 5 type 1 and faces 6 and 7 type 2. The probability of throwing a particular type 1 face is 1/6 and a type 2 face is 1/12. The probability of rolling any one of x type 1 faces is x/6 and of rolling any one of y type 2 faces is y/12.

NB I’m using [] rather than () for function brackets. Define n[x,y] as the average number of rolls required to see all x type 1 faces and all y type 2 faces. We want n[5,2]. While there are unseen faces, we must make a roll. If we roll a previously unseen type x or y face, then x or y is reduced by 1 and we have n[x-1,y] or n[x,y-1] rolls to do. If we roll a previously seen face, then we still have n[x,y] rolls to do, and the probability of that is (1 – x/6 – y/12).

Altogether that =>

n[x,y] = 1 +n[x-1,y] x/6 +n[x,y-1] y/12 +n[x,y] (1 – x/6 – y/12)

Solving for n[x,y] =>

n[x,y] = (12 + 2x n[x-1,y] +y n[x,y-1])/(2x + y) {E1}

{E1} fails if x = y = 0. However, it is clear that n[0,0] = 0

Let y = 0. Then {E1} becomes

n[x,0] = (12 + 2x n[x-1,0]) / 2x = 6/x + n[x-1,0]

Letting x = 1,2,3,… =>

n[1,0] = 6/1 + n[0,0] = 6 + 0 = 6 (as expected)

n[2,0] = 6/2 + n[1,0] = 3 + 6 = 9

n[3,0] = 6/3 + n[2,0] = 2 + 9 = 11

n[4,0] = 6/4 + n[3,0] = 1.5 + 11 = 12.5

n[5,0] = 6/5 + n[4,0] = 1.2 + 12.5 = 13.7

and for fun

n[6,0] = 6/6 + n[5,0] = 1 + 13.7 = 14.7 (which should look familiar).

Let y = 1. Then {E1} becomes

n[x,1] = (12 + 2x n[x-1,1] + n[x,0]) / (2x + 1)

Letting x = 0,1,2,3,… =>

n[0,1] = (12 + 0 + 0) / 1 = 12 (as expected)

n[1,1] = (12 +2 n[0,1] +n[1,0])/3 = (12 +2*12 + 6)/3 = 14

n[2,1] = (12 +4 n[1,1] +n[2,0])/5 = (12 +4*14 + 9)/5 = 15.4

n[3,1] = (12 +6 n[2,1] +n[3,0])/7 = (12 +6*15.4 +11)/7 = 16.48…

n[4,1] = (12 +8 n[3,1] +n[4,0])/9 = (12 +8*16.48… +12.5)/9 =17.37…

n[5,1] = (12 +10 n[4,1] +n[5,0])/11 = (12 +10*17.37…+13.7)/11 =18.13…

Let y = 2. The {E1} becomes (after removing the common factor of 2)

n[x,2] = (6 + x n[x-1,2] +n[x,1]) / (x+1)

Letting x = 0,1,2,3,… =>

n[0,2] = (6 + 0 + n[0,1]) / 1 = (6 +12) = 18

n[1,2] = (6 + n[0,2] + n[1,1])/2 = (6 + 18 +14)/2 = 19

n[2,2] = (6 + 2n[1,2] +n[2,1])/3 = (6 +2*19 +15.4)/3 = 19.8

n[3,2] = (6 + 3n[2,2] +n[3,1])/4 = (6 +3*19.8 +16.48…)/4 = 20.47…

n[4,2] = (6 + 4n[3,2] +n[4,1])/5 = (6 +4*20.471… +17.38…)/5 = 21.05…

n[5,2] = (6 + 5n[4,2] +n[5,1])/6 = (6 +5*21.052… +18.13…)/6 = 21.56…

High precision … values are

16.485714285714285714285714285714

17.37619047619047619047619047619

18.1329004329004329004329004329

20.471428571428571428571428571429

21.052380952380952380952380952381

21.565800865800865800865800865801

The last being the value required by ragknot

Although I did it the hard way (using Windows calculator), the recursion lends itself to coding very well indeed, as shown by the following quick and dirty:

Sub Strange()

Dim x As Integer

Dim y As Integer

Dim n(-1 To 5, -1 To 2) As Double

n(0, 0) = 0#

For y = 0 To 2

For x = 0 To 5

If x+y<>0 Then n(x, y) = (12+2*x*n(x-1,y)+y*n(x,y-1))/(2*x+y)

Next x

Next y

Debug.Print n(5, 2)

End Sub

October 4th, 2011 at 11:24 am

Wow Chris, that is a lot of programming.

Tell me if this is right.

1/6 of the rolls should be a one

1/6 of the rolls should be a two

1/6 of the rolls should be a three

1/6 of the rolls should be a four

1/6 of the rolls should be a five

1/12 of the rolls should be a six

1/12 of the rolls should be a seven

Doesn’t this make it easy?

October 4th, 2011 at 11:39 am

Hi ragknot. I used that information. I only tacked on a tiny bit of code at the end of my comment, and I only did that after calculating the answer by hand.

October 4th, 2011 at 2:46 pm

Chris, I am going to review your code, but this was my code.

And “Yes” both your answer and Jan’s are good.

Sub test5()

Randomize

Dim b, t, r As Long

Dim got(7) As Integer

Dim i As Long

Do

i = i + 1

r = Int(Rnd() * 6 + 1)

If r = 6 Then

If Rnd() > 0.5 Then r = 7

End If

got(r) = 1

t = 0

For r = 1 To 7

t = t + got(r)

Next r

If t = 7 Then

b = b + 1

For r = 1 To 7

got(r) = 0

Next r

If i > 1000000 Then Debug.Print i / b: Exit Do

End If

Loop

End Sub

October 4th, 2011 at 2:59 pm

that was smart, and complex code Chris.

October 4th, 2011 at 3:31 pm

Hi ragknot. The bulk of my post wasn’t [computer] code, it was mathematics.

Your code and mine do completely different things. Yours is a Monte Carlo simulation, mine is simply calculating the recursion relation

n[x,y] = (12 + 2x n[x-1,y] +y n[x,y-1])/(2x + y). It is not an iterative approximation to the result. I had really solved the problem when I derived the recursion equation {E1} about one quarter of the way into my post.

If I had written the tiny bit of code that I posted in Mathematica, it would have given me the exact result 125661/6930 that Jan found.

I’ll check the Lambert W page to see what you mean. However, I only use Internet Explorer.

October 4th, 2011 at 6:16 pm

When I read your code, I found it was not what I expected. I was at work, and glanced a then long comment and thought it was vba code. When I got home and actually read it. I would have to spend more time to understand how you were doing it. I did run the short VBA where it ended, but did not understand it either, BUT I saw it did work, and had the right results.

My method it just to roll the dice and evaluate the results. In about 10 seconds I can see about one million results and assume it is right maybe to a couple of decimal places. I try it a couple of more times and see how close the results were.

Also I should not mentioned something else. I think I was wrong. I am going to remove it.

October 4th, 2011 at 8:28 pm

Hi ragknot. I finally realised that you hadn’t studied my post.

I guess you sorted out the Lambert W stuff.

The “exact” calculation is done in the blink of an eye. Now I’ve used more sensible variables etc (see Strange die 2), I realise that I should have been able to generate the recursion equation and write the code in 15 minutes or less.

October 5th, 2011 at 4:55 am

NB. There is little or no hope of making a

usefulclosed form of the function n[x,y]. Even the simplest case of a regular die requires the harmonic series “function”, which although “closed”, isn’t a proper function i.e. it is a sum where the number of terms is dependendent on the data.For the simple die, n[6] = 6 H[6], where H[n] = Sum[k = 1 to n, 1/k]