Acontinuación se realiza una función para simular el juego de la escalera, la cual contiene basicamente 3 partes:

  1. En la cual se define una matriz vacia para almacenar el avance de los jugadores y se inicia con una semilla la cual es cero indicando que los jugadores estan fuera del tablero.

  2. La segunda parte consiste en generar un lanzamiento del dado con la función sample sobre un dado con valores del 1 al 6.

  3. Se crea el juego con las condicionales de acuerdo con la referencia indicada en la siguiente figura:

Juego de la Escalera

Juego de la Escalera

  1. Se realiza un ciclo while y se confirma el ganador del juego.
##Game Function

sim_game=function(n_players){
  
  ##Empty Data Frame to Store the results
  game=matrix(NA,nrow = 1,ncol = n_players)
  game=data.frame(game)
  names(game)=c("player1","player2")
  
  ##Game seed
  pos_player1=0
  pos_player2=0
  
  game$player1=pos_player1
  game$player2=pos_player2
  
  ##Game loop
    while (max(game$player1,game$player2)<20) {
      
    ##Player 1
      
    dice=1:6
    
    launching1=sample(dice,1)
    
    #Condition do not advance more than 20
    if(pos_player1+launching1<=20){
      pos_player1=pos_player1+launching1
    }
    
    #Conditions - stairs
    
    if(pos_player1==3){
      pos_player1=11
    }
    
    if(pos_player1==15){
      pos_player1=19
    }
    
    #Conditions - slider
    
    if(pos_player1==13){
      pos_player1=5
    }
    
    if(pos_player1==17){
      pos_player1=10
    }
    
    
    ##Player 2
    
    dice=1:6
    
    launching2=sample(dice,1)
    
    #Condition do not advance more than 20
    if(pos_player2+launching2<=20){
      pos_player2=pos_player2+launching2
    }
    
    #Conditions - stairs
    
    if(pos_player2==3){
      pos_player2=11
    }
    
    if(pos_player2==15){
      pos_player2=19
    }
    
    #Conditions - slider
    
    if(pos_player2==13){
      pos_player2=5
    }
    
    if(pos_player2==17){
      pos_player2=10
    }
    
    game$player1=pos_player1
    game$player2=pos_player2
    
  }
  
  winner=which.max(game)
  
  return(winner)
  
}

Ejemplo de Corrida un solo juego

La función retorna el ganador del juego.

#Just one Game
sim_game(2)
## player2 
##       2

Ejemplo multiples corridas del juego

Se generan 1000 juegos y se retorna los ganadores y luego se cuentan el total y porcentaje de ganadores del juego.

##Multiple Games
results=sapply(X = rep(2,1000), FUN = sim_game)
prop.table(table(results))
## results
##     1     2 
## 0.527 0.473

Convergencia del resultado de los Ganadores

Como se observa en la simulación se logra evidenciar que el jugador 1 que es el primer lanzador tiene mayor tendencia a ganar por una diferencia porcentual baja de al rededor del 3%.

##Multiple Games Convengency

game_size=seq(10,10000,200)
prop_wins_player1=array(NA,length(game_size))

for(i in 1:length(game_size)){
results=sapply(X = rep(2,game_size[i]), FUN = sim_game)
prop_wins_player1[i]=prop.table(table(results))[1]
}

graph=data.frame(game_size,prop_wins_player1)
require(ggplot2)
ggplot(graph,aes(x=game_size,y=prop_wins_player1))+geom_line()+theme_bw()+geom_hline(yintercept=0.5,col="red")