Project Euler Problem 084

Statement

The statement of this problem is too long to put it here. This is the link to the original problem.

But basically you have to find the three squares in Monopoly that have more probabilities of being occupied, but instead of 2 dices with 6 faces with 2 dices of 4 faces.

Solution

Simulate a player for 1000000 rolls of dices and see the results.

import random
 
board = [0 for x in range(40)]
cc = 0
ch = 0
doubles = 0
position = 0
rw = (5, 15, 25, 35)
ut = (12, 28)
 
def make_move():
    global board, cc, ch, doubles, position, rw, ut
    dice1 = random.randint(1, 4)
    dice2 = random.randint(1, 4)
    if dice1 == dice2:
        doubles += 1
    else:
        doubles = 0
    if doubles == 3:
        position = 10
        doubles = 0
        return
    position += dice1 + dice2
    position %= 40
    if position == 30:
        position = 10
        return
    elif position == 2 or position == 17 or position == 33:
        cc = (cc + 1) % 15
        if cc == 0:
            position = 0
            return
        elif cc == 1:
            position = 10
            return
    elif position == 7 or position == 22 or position == 36:
        ch = (ch + 1) % 15
        if ch == 0:
            position = 0
            return
        elif ch == 1:
            position = 10
            return
        elif ch == 2:
            position = 11
            return
        elif ch == 3:
            position = 24
            return
        elif ch == 4:
            position = 39
            return
        elif ch == 5:
            position = 5
            return
        elif ch == 6 or ch == 7:
            while position not in rw:
                position += 1
                if position == 40:
                    position = 0
            return
        elif ch == 8:
            while position not in ut:
                position += 1
                if position == 40:
                    position = 0
            return
        elif ch == 9:
            position -= 3
            return
 
if __name__ == '__main__':
    result = ""
    for i in range(10 ** 6):
        make_move()
        board[position] += 1
    max_prob = sorted((-board[i], i) for i in range(len(board)))
    result = "%2d%2d%2d" % (max_prob[0][1], max_prob[1][1], max_prob[2][1])
    print("The result is:", result)

The Python file is available for download here.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License