Uma implementação possível que eu fiz baseado na ideia do prof. Cajueiro:
# Definindo os quadrados especiais
snakes = [(32,6),(74,22),(86,41),(99,39)]
ladders = [(9,31),(16,45),(18,64),(48,66),(50,93),(63,81)]
sl = snakes + ladders
#Mapeando os quadrados do jogo
mapState = {}
for state in range(1,101):
print(state)
result = list(filter(lambda x: x[0] == state, sl))
if len(result) != 0:
mapState[state] = result[0][1]
else:
mapState[state] = state
# Simulando:
import random as rd
def snakes_ladders_mc(simulacoes, dado,step=1):
durations = []
for i in range(simulacoes):
#print(i)
state = 1
game_duration = 0
while(state != 100):
state = state + rd.randrange(1,dado+1,step)
game_duration += 1
if state<100: # Se cai em algum quadrado sem finalizar o jogo
state = mapState[state] # Toma o quadrado final onde ele cai de acordo com o mpapa
else:
durations.append(game_duration)
break # sai do while, passa pra próxima iteração do for
return (sum(durations)/simulacoes,durations)
result1 = snakes_ladders_mc(1000,6) # Testando com um dado de 6 faces
result2 = snakes_ladders_mc(1000,7) # Testando com um dado de 7 faces
result3 = snakes_ladders_mc(1000,6,2) # Testando só com resultados ímpares de um dado de 6 faces
Com o dado de 6 faces, a duração média foi de 32 aproximadamente. Com o de 7 faces, foi de 27 aproximadamente. Restringindo o dado de 6 faces a apenas número ímpares, o resultado foi de 37 aproximadamente.