Note: Your exam will be in a similar format to this (RMarkdown File with Questions and Code chunks for your answers), so make sure you have the process for knitting to html working.

In Class Activity

  1. Write a function to simulate rolling a 6-sided die and returns the result.
roll_six_sided_die <- function(){
  die_rolls <- 1:6
  die_probs <- c(rep(1/6,6))
  rolls <- sample (die_rolls,1, replace = T, prob = die_probs)
  return(rolls)
}

roll_six_sided_die()
## [1] 4
  1. Write a function to simulate rolling 2 6-sided dice that returns the sum of the rolls.
roll_2_six_sided_die <- function(){
  die_rolls <- 1:6
  die_probs <- c(rep(1/6,6))
  roll_1 <- sample (die_rolls,1, replace = T, prob = die_probs)
  roll_2 <- sample (die_rolls,1, replace = T, prob = die_probs)
  total = roll_2 + roll_1
  return(total)
}

roll_2_six_sided_die()
## [1] 5
  1. Write a function that takes two people name’s as strings, simulates rolling a 6-sided die for each of the names, then returns the name of the person with the higher roll. The function should reroll once on a tie, but if there is a second tie, it should return “draw”.
# Your one-roll function goes here
roll_die <- function(name1, name2) {
  die_probs <- c(rep(1/6,6))
  roll <- function() {
    sample(1:6, 1, replace = TRUE, prob = die_probs)
  }
  
  roll1 <- roll()
  roll2 <- roll()
  
  if (roll1 == roll2) {
    roll1 <- roll()
    roll2 <- roll()
  }
  
  if (roll1 > roll2) {
    return(name1)
  } else if (roll2 > roll1) {
    return(name2)
  } else {
    return("draw")
  }
}
# Test
winner <- roll_die("Ann", "Lisa")
print(winner)
## [1] "Ann"
  1. Write a second function (you may start by modifying the first one) that takes two names as strings, simulates both of them rolling die 15 times, and returns the name of the person who “won” more rolls. Don’t reroll ties this time, but don’t count them as “wins”.
roll_die_15 <- function(name1,name2){
  die_probs <- c(rep(1/6,6))
  rolls_15 <- function() {
    sample(1:6,15,replace = T, prob = die_probs)}
  
  rolls1 <- rolls_15()
  rolls2 <- rolls_15()
  
  print(rolls1)
  print(rolls2)
  
  win1 <- sum(rolls1 > rolls2)
  win2 <- sum(rolls2 > rolls1)
  
  print(paste(name1,"wins",win1,"times", sep = " "))
  print(paste(name2,"wins",win2,"times", sep = " "))
  
  if(win1 > win2){
    return (name1)
  }
  else if (win1 <win2){
    return (name2)
  }
  else
    return ("draw")
}

# Test
winner <- roll_die_15("Ann", "Lisa")
##  [1] 6 5 4 4 2 2 4 2 2 3 3 2 1 6 4
##  [1] 5 1 4 4 6 2 2 3 6 3 5 5 2 1 2
## [1] "Ann wins 5 times"
## [1] "Lisa wins 6 times"
print(winner)
## [1] "Lisa"
  1. Modify your function from (2) so that the person in the first argument has a die that is weighted to get higher numbers more often (you may decide the actual percentage change). Run the function ten or so times. Does the second person ever win?
# Your "cheating" function goes here
roll_die_weight <- function(name1,name2){
  
  die_probs1 <- c(rep(0.2,3),0.5,0.6,0.7)
  die_probs2 <- c(rep(1/6,6))
  
  
  rolls1 <- sample(1:6,15,replace = T, prob = die_probs1)
  rolls2 <- sample(1:6,15,replace = T, prob = die_probs2)
  
  win1 <- sum(rolls1 > rolls2)
  win2 <- sum(rolls2 > rolls1)
  
  #print(rolls1)
  #print(rolls2)
  
  #print(paste(name1,"wins",win1,"times", sep = " "))
  #print(paste(name2,"wins",win2,"times", sep = " "))
  
  if(win1 > win2){
    return (name1)
  }
  else if (win1 <win2){
    return (name2)
  }
  else
    return ("draw")
}

# Test
results <- replicate(250,roll_die_weight("Ann", "Lisa"))
print(results)
##   [1] "Ann"  "Ann"  "Lisa" "Ann"  "Ann"  "Ann"  "draw" "Ann"  "draw" "Ann" 
##  [11] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
##  [21] "Lisa" "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
##  [31] "Ann"  "Lisa" "Ann"  "Lisa" "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
##  [41] "Lisa" "Ann"  "Ann"  "draw" "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
##  [51] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
##  [61] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
##  [71] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
##  [81] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "draw" "Lisa" "Ann" 
##  [91] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
## [101] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Lisa"
## [111] "draw" "Ann"  "Ann"  "draw" "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
## [121] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
## [131] "Ann"  "Ann"  "Ann"  "Ann"  "Lisa" "Ann"  "Ann"  "draw" "Ann"  "Ann" 
## [141] "Ann"  "Ann"  "Ann"  "Ann"  "draw" "Ann"  "Ann"  "Ann"  "Ann"  "Ann" 
## [151] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Lisa" "Ann"  "Ann"  "Ann"  "Ann" 
## [161] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Lisa" "Ann" 
## [171] "draw" "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "draw" "Ann" 
## [181] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Lisa" "Ann"  "Ann"  "Ann" 
## [191] "Lisa" "Lisa" "Ann"  "Lisa" "Ann"  "Ann"  "Lisa" "Ann"  "Ann"  "Ann" 
## [201] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Lisa" "Ann" 
## [211] "Ann"  "Lisa" "Ann"  "Ann"  "Ann"  "Lisa" "Ann"  "Ann"  "draw" "Lisa"
## [221] "Ann"  "Ann"  "draw" "Ann"  "Lisa" "Lisa" "Ann"  "Ann"  "Ann"  "Ann" 
## [231] "Lisa" "Ann"  "draw" "Lisa" "Ann"  "Ann"  "draw" "Ann"  "Ann"  "Ann" 
## [241] "Ann"  "Ann"  "Ann"  "Ann"  "Ann"  "Lisa" "Ann"  "Ann"  "Ann"  "draw"
print("After a fews time with less than 25 times run, Ann is winner but i try increase to 250 times run, Lisa wins a few times")
## [1] "After a fews time with less than 25 times run, Ann is winner but i try increase to 250 times run, Lisa wins a few times"