library(tidyverse)
library(openintro)
PAY RATE =0.54
Generate symbol for slot machine
get_symbols<- function(){
wheel<- c("DD","7","BBB","BB","B","C","0")
sample(wheel, size =3, replace =T,
prob =c(0.03, 0.03, 0.06, 0.1, 0.25, 0.01, 0.52))
}
Slot machine function
score<- function(symbols){
#identify case
slots<- symbols[symbols!="DD"]
same <- all(symbols==symbols[1])
bars <- symbols %in% c("B", "BB", "BBB")
cherries<- symbols =="C"
diamonds<- symbols=="DD"
# get the prize
if (sum(diamonds)==3) {
prize<-100
} else if (same){
payouts <- c("7" = 80,"BBB" = 40,
"BB" = 25,"B" = 10, "C" = 10, "0" = 0)
prize <- unname(payouts[slots[1]])
} else if (all(bars)){
prize <- 5
} else if (sum(cherries)>0){
cher.tot<-sum(cherries)
diam.tot<-sum(diamonds)
prize <- c(0,2,5,10)[cher.tot+diam.tot+1]
} else{
prize<-0
}
#adjust the prize
prize * 2^sum(diamonds)
}
play <-function(){
symbols<-get_symbols()
print(symbols)
score(symbols)
}
play()
## [1] "0" "0" "0"
## [1] 0
Test the expected value of slot machine,for
# make data frame contains all possibilities of slot machine
wheel<- c("DD","7","BBB","BB","B","C","0")
combos<-expand.grid(wheel,wheel,wheel,stringsAsFactors = F)
#look up table
prob<-c("DD"=0.03,"7"=0.03,"BBB"=0.06,"BB"=0.1,"B"=.25,"C"=0.01,"0"=0.52)
#new column in df combos<- ham lookup: lookup table[gia tri lookup]
combos$prob1 <- prob[combos$Var1]
combos$prob2 <- prob[combos$Var2]
combos$prob3 <- prob[combos$Var3]
combos$prob <-combos$prob1 * combos$prob2 * combos$prob3
tail(combos)
## Var1 Var2 Var3 prob1 prob2 prob3 prob
## 338 7 0 0 0.03 0.52 0.52 0.008112
## 339 BBB 0 0 0.06 0.52 0.52 0.016224
## 340 BB 0 0 0.10 0.52 0.52 0.027040
## 341 B 0 0 0.25 0.52 0.52 0.067600
## 342 C 0 0 0.01 0.52 0.52 0.002704
## 343 0 0 0 0.52 0.52 0.52 0.140608
# step3. determine the prize for each combination (tot value of each row)
combos$prize<- NA #create a black column
for (i in 1:nrow(combos)){
symbols<-c(combos[i,1],combos[i,2],combos[i,3])
combos$prize[i] <-score(symbols)
}
head(combos)
## Var1 Var2 Var3 prob1 prob2 prob3 prob prize
## 1 DD DD DD 0.03 0.03 0.03 0.000027 800
## 2 7 DD DD 0.03 0.03 0.03 0.000027 0
## 3 BBB DD DD 0.06 0.03 0.03 0.000054 0
## 4 BB DD DD 0.10 0.03 0.03 0.000090 0
## 5 B DD DD 0.25 0.03 0.03 0.000225 0
## 6 C DD DD 0.01 0.03 0.03 0.000009 40
# find expected prize of the slot machine (Expected value)
sum(combos$prob*combos$prize)
## [1] 0.549336
###S3-display First, look up the value of the symbols attribute and save it as an object named symbols
Next, slot_display uses paste to collapse the three strings in symbols into a singlecharacter string Then, uses paste in a new way to combine symbols with the value of prize as what we want paste combines separate objects into a character string when you give it a sep argument is regular expression for new line (i.e. return or enter)
Final, calls cat on the new string. cat is like print; it displays its input at the command line. However, cat does not surround its output with quotation marks. cat also replaces every with a new line or line break
## [1] "B" "0" "B"
After how many games, go broke (start with a certain amount of $), while
plays_till_broke <- function(start_with) {
cash <- start_with
games <- 0
while (cash > 0) {
cash <- cash - 1 + play()
games <- games + 1
}
games
}
plays_till_broke(2)
## [1] "0" "0" "B"
## [1] "0" "0" "0"
## [1] 2
REPEAT
plays_till_broke1<- function(all_money){
cash<-all_money
game<-0
repeat{
cash<-cash-1+play() #cash -$1 fee + $win
game<-game+1 #count 1 game every time play
if(cash<=0){
break
}
}
game
}
monday<-plays_till_broke1(5)
## [1] "0" "0" "0"
## [1] "DD" "0" "0"
## [1] "0" "0" "0"
## [1] "0" "0" "0"
## [1] "B" "B" "DD"
tues<-plays_till_broke1(5)
## [1] "0" "BB" "0"
## [1] "B" "0" "0"
## [1] "7" "BBB" "7"
## [1] "B" "0" "0"
## [1] "0" "B" "0"
wed<-plays_till_broke1(5)
## [1] "B" "0" "B"
## [1] "BBB" "0" "DD"
## [1] "B" "B" "0"
## [1] "BBB" "0" "B"
## [1] "0" "BBB" "0"
## [1] 5
## [1] 5
## [1] 5
PAY RATE =.93
score <- function(symbols) {
diamonds <- sum(symbols == "DD")
cherries <- sum(symbols == "C")
# identify case
# since diamonds are wild, only nondiamonds
# matter for three of a kind and all bars
slots <- symbols[symbols != "DD"]
same <- length(unique(slots)) == 1
bars <- slots %in% c("B", "BB", "BBB")
# assign prize
if (diamonds == 3) {
prize <- 100
} else if (same) {
payouts <- c("7" = 80, "BBB" = 40, "BB" = 25,
"B" = 10, "C" = 10, "0" = 0)
prize <- unname(payouts[slots[1]])
} else if (all(bars)) {
prize <- 5
} else if (cherries > 0) {
# diamonds count as cherries
# so long as there is one real cherry
prize <- c(0, 2, 5)[cherries + diamonds + 1]
} else {
prize <- 0
}
# double for each diamond
prize * 2^diamonds
}
for (i in 1:nrow(combos)) {
symbols <- c(combos[i, 1], combos[i, 2], combos[i, 3])
combos$prize[i] <- score(symbols)
}
head(combos)
## Var1 Var2 Var3 prob1 prob2 prob3 prob prize
## 1 DD DD DD 0.03 0.03 0.03 0.000027 800
## 2 7 DD DD 0.03 0.03 0.03 0.000027 320
## 3 BBB DD DD 0.06 0.03 0.03 0.000054 160
## 4 BB DD DD 0.10 0.03 0.03 0.000090 100
## 5 B DD DD 0.25 0.03 0.03 0.000225 40
## 6 C DD DD 0.01 0.03 0.03 0.000009 40
sum(combos$prize * combos$prob)
## [1] 0.934356
LS0tDQp0aXRsZTogIkFTU0lHTk1FTlQgMy0gU0xPVCBNQUNISU5FIg0KYXV0aG9yOiAiV0lMTE4iDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydA0KLS0tDQoNCmBgYHtyIGxvYWQtcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkob3BlbmludHJvKQ0KYGBgDQoNCi0tLQ0KdGl0bGU6ICJwcm9qZWN0IDMiDQphdXRob3I6ICJXaWxsTiINCmRhdGU6ICI4LzgvMjAyMCINCm91dHB1dDogaHRtbF9kb2N1bWVudA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMjIyAqKlBBWSBSQVRFID0wLjU0KioNCiMjIyBHZW5lcmF0ZSBzeW1ib2wgZm9yIHNsb3QgbWFjaGluZQ0KYGBge3J9DQpnZXRfc3ltYm9sczwtIGZ1bmN0aW9uKCl7DQogIHdoZWVsPC0gYygiREQiLCI3IiwiQkJCIiwiQkIiLCJCIiwiQyIsIjAiKQ0KICBzYW1wbGUod2hlZWwsIHNpemUgPTMsIHJlcGxhY2UgPVQsDQogICAgICAgICBwcm9iID1jKDAuMDMsIDAuMDMsIDAuMDYsIDAuMSwgMC4yNSwgMC4wMSwgMC41MikpDQp9DQpgYGANCg0KIyMjIFNsb3QgbWFjaGluZSBmdW5jdGlvbg0KYGBge3J9DQpzY29yZTwtIGZ1bmN0aW9uKHN5bWJvbHMpew0KICAjaWRlbnRpZnkgY2FzZQ0KICBzbG90czwtIHN5bWJvbHNbc3ltYm9scyE9IkREIl0NCiAgc2FtZSA8LSBhbGwoc3ltYm9scz09c3ltYm9sc1sxXSkgICANCiAgYmFycyA8LSBzeW1ib2xzICVpbiUgYygiQiIsICJCQiIsICJCQkIiKQ0KICBjaGVycmllczwtICBzeW1ib2xzID09IkMiDQogIGRpYW1vbmRzPC0gc3ltYm9scz09IkREIg0KICAjIGdldCB0aGUgcHJpemUNCiAgaWYgKHN1bShkaWFtb25kcyk9PTMpIHsNCiAgICBwcml6ZTwtMTAwDQogIH0gZWxzZSBpZiAoc2FtZSl7DQogICAgcGF5b3V0cyA8LSBjKCI3IiA9IDgwLCJCQkIiID0gNDAsICANCiAgICAgICAgICAgICAgICAgIkJCIiA9IDI1LCJCIiA9IDEwLCAiQyIgPSAxMCwgIjAiID0gMCkNCiAgICBwcml6ZSA8LSB1bm5hbWUocGF5b3V0c1tzbG90c1sxXV0pDQogIH0gZWxzZSBpZiAoYWxsKGJhcnMpKXsgICAgICAgICAgDQogICAgcHJpemUgPC0gNQ0KICB9IGVsc2UgaWYgKHN1bShjaGVycmllcyk+MCl7DQogICAgY2hlci50b3Q8LXN1bShjaGVycmllcykNCiAgICBkaWFtLnRvdDwtc3VtKGRpYW1vbmRzKQ0KICAgIHByaXplIDwtIGMoMCwyLDUsMTApW2NoZXIudG90K2RpYW0udG90KzFdICAgICAgDQogIH0gZWxzZXsNCiAgICBwcml6ZTwtMA0KICB9DQogICNhZGp1c3QgdGhlIHByaXplIA0KICBwcml6ZSAqIDJec3VtKGRpYW1vbmRzKSANCn0NCg0KcGxheSA8LWZ1bmN0aW9uKCl7DQogIHN5bWJvbHM8LWdldF9zeW1ib2xzKCkNCiAgcHJpbnQoc3ltYm9scykNCiAgc2NvcmUoc3ltYm9scykNCn0NCg0KcGxheSgpDQpgYGANCg0KIyMjIFRlc3QgdGhlIGV4cGVjdGVkIHZhbHVlIG9mIHNsb3QgbWFjaGluZSwqKmZvcioqDQpgYGB7cn0NCiMgbWFrZSBkYXRhIGZyYW1lIGNvbnRhaW5zIGFsbCBwb3NzaWJpbGl0aWVzIG9mIHNsb3QgbWFjaGluZQ0Kd2hlZWw8LSBjKCJERCIsIjciLCJCQkIiLCJCQiIsIkIiLCJDIiwiMCIpDQpjb21ib3M8LWV4cGFuZC5ncmlkKHdoZWVsLHdoZWVsLHdoZWVsLHN0cmluZ3NBc0ZhY3RvcnMgPSBGKQ0KI2xvb2sgdXAgdGFibGUNCnByb2I8LWMoIkREIj0wLjAzLCI3Ij0wLjAzLCJCQkIiPTAuMDYsIkJCIj0wLjEsIkIiPS4yNSwiQyI9MC4wMSwiMCI9MC41MikNCiNuZXcgY29sdW1uIGluIGRmIGNvbWJvczwtIGhhbSBsb29rdXA6IGxvb2t1cCB0YWJsZVtnaWEgdHJpIGxvb2t1cF0NCmNvbWJvcyRwcm9iMSA8LSBwcm9iW2NvbWJvcyRWYXIxXSANCmNvbWJvcyRwcm9iMiA8LSBwcm9iW2NvbWJvcyRWYXIyXQ0KY29tYm9zJHByb2IzIDwtIHByb2JbY29tYm9zJFZhcjNdDQoNCmNvbWJvcyRwcm9iIDwtY29tYm9zJHByb2IxICogY29tYm9zJHByb2IyICogY29tYm9zJHByb2IzDQp0YWlsKGNvbWJvcykNCg0KIyBzdGVwMy4gZGV0ZXJtaW5lIHRoZSBwcml6ZSBmb3IgZWFjaCBjb21iaW5hdGlvbiAodG90IHZhbHVlIG9mIGVhY2ggcm93KQ0KDQpjb21ib3MkcHJpemU8LSBOQSAgICNjcmVhdGUgYSBibGFjayBjb2x1bW4NCmZvciAoaSBpbiAxOm5yb3coY29tYm9zKSl7DQogIHN5bWJvbHM8LWMoY29tYm9zW2ksMV0sY29tYm9zW2ksMl0sY29tYm9zW2ksM10pDQogIGNvbWJvcyRwcml6ZVtpXSA8LXNjb3JlKHN5bWJvbHMpDQp9DQpoZWFkKGNvbWJvcykNCiMgZmluZCBleHBlY3RlZCBwcml6ZSBvZiB0aGUgc2xvdCBtYWNoaW5lIChFeHBlY3RlZCB2YWx1ZSkNCnN1bShjb21ib3MkcHJvYipjb21ib3MkcHJpemUpDQpgYGANCg0KIyMjUzMtZGlzcGxheQ0KRmlyc3QsIGxvb2sgdXAgdGhlIHZhbHVlIG9mIHRoZSBzeW1ib2xzIGF0dHJpYnV0ZSBhbmQgc2F2ZSBpdCBhcyBhbiBvYmplY3QgbmFtZWQgc3ltYm9scyANCg0KTmV4dCwgc2xvdF9kaXNwbGF5IHVzZXMgcGFzdGUgdG8gY29sbGFwc2UgdGhlIHRocmVlIHN0cmluZ3MgaW4gc3ltYm9scyBpbnRvIGEgc2luZ2xlY2hhcmFjdGVyIHN0cmluZyBUaGVuLCB1c2VzIHBhc3RlIGluIGEgbmV3IHdheSB0byBjb21iaW5lIHN5bWJvbHMgd2l0aCB0aGUgdmFsdWUgb2YgcHJpemUgYXMgd2hhdCB3ZSB3YW50IHBhc3RlIGNvbWJpbmVzIHNlcGFyYXRlIG9iamVjdHMgaW50byBhIGNoYXJhY3RlciBzdHJpbmcgd2hlbiB5b3UgZ2l2ZSBpdCBhIHNlcCBhcmd1bWVudCBpcyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIG5ldyBsaW5lIChpLmUuIHJldHVybiBvciBlbnRlcikgDQoNCkZpbmFsLCBjYWxscyBjYXQgb24gdGhlIG5ldyBzdHJpbmcuIGNhdCBpcyBsaWtlIHByaW50OyBpdCBkaXNwbGF5cyBpdHMgaW5wdXQgYXQgdGhlIGNvbW1hbmQgbGluZS4gSG93ZXZlciwgY2F0IGRvZXMgbm90IHN1cnJvdW5kIGl0cyBvdXRwdXQgd2l0aCBxdW90YXRpb24gbWFya3MuIGNhdCBhbHNvIHJlcGxhY2VzIGV2ZXJ5IHdpdGggYSBuZXcgbGluZSBvciBsaW5lIGJyZWFrDQpgYGB7cn0NCm9uZV9wbGF5PC1wbGF5KCkNCmBgYA0KDQojIyMgQWZ0ZXIgaG93IG1hbnkgZ2FtZXMsIGdvIGJyb2tlIChzdGFydCB3aXRoIGEgY2VydGFpbiBhbW91bnQgb2YgJCksICoqd2hpbGUqKg0KDQpgYGB7cn0NCnBsYXlzX3RpbGxfYnJva2UgPC0gZnVuY3Rpb24oc3RhcnRfd2l0aCkgew0KICBjYXNoIDwtIHN0YXJ0X3dpdGgNCiAgZ2FtZXMgPC0gMA0KICB3aGlsZSAoY2FzaCA+IDApIHsNCiAgICBjYXNoIDwtIGNhc2ggLSAxICsgcGxheSgpDQogICAgZ2FtZXMgPC0gZ2FtZXMgKyAxDQogIH0NCiAgZ2FtZXMNCn0NCnBsYXlzX3RpbGxfYnJva2UoMikNCmBgYA0KDQojIyMgUkVQRUFUDQpgYGB7cn0NCnBsYXlzX3RpbGxfYnJva2UxPC0gZnVuY3Rpb24oYWxsX21vbmV5KXsNCiAgY2FzaDwtYWxsX21vbmV5DQogIGdhbWU8LTANCiAgcmVwZWF0ew0KICAgIGNhc2g8LWNhc2gtMStwbGF5KCkgI2Nhc2ggLSQxIGZlZSArICR3aW4NCiAgICBnYW1lPC1nYW1lKzEgICAgICAgICNjb3VudCAxIGdhbWUgZXZlcnkgdGltZSBwbGF5DQogICAgaWYoY2FzaDw9MCl7DQogICAgICBicmVhaw0KICAgIH0NCiAgfQ0KICBnYW1lDQp9DQptb25kYXk8LXBsYXlzX3RpbGxfYnJva2UxKDUpDQp0dWVzPC1wbGF5c190aWxsX2Jyb2tlMSg1KQ0Kd2VkPC1wbGF5c190aWxsX2Jyb2tlMSg1KQ0KbW9uZGF5DQp0dWVzDQp3ZWQNCmBgYA0KDQojIyMgKipQQVkgUkFURSA9LjkzKioNCg0KYGBge3J9DQpzY29yZSA8LSBmdW5jdGlvbihzeW1ib2xzKSB7DQogIGRpYW1vbmRzIDwtIHN1bShzeW1ib2xzID09ICJERCIpDQogIGNoZXJyaWVzIDwtIHN1bShzeW1ib2xzID09ICJDIikNCiAgIyBpZGVudGlmeSBjYXNlDQogICMgc2luY2UgZGlhbW9uZHMgYXJlIHdpbGQsIG9ubHkgbm9uZGlhbW9uZHMNCiAgIyBtYXR0ZXIgZm9yIHRocmVlIG9mIGEga2luZCBhbmQgYWxsIGJhcnMNCiAgc2xvdHMgPC0gc3ltYm9sc1tzeW1ib2xzICE9ICJERCJdDQogIHNhbWUgPC0gbGVuZ3RoKHVuaXF1ZShzbG90cykpID09IDENCiAgYmFycyA8LSBzbG90cyAlaW4lIGMoIkIiLCAiQkIiLCAiQkJCIikNCiAgIyBhc3NpZ24gcHJpemUNCiAgaWYgKGRpYW1vbmRzID09IDMpIHsNCiAgICBwcml6ZSA8LSAxMDANCiAgfSBlbHNlIGlmIChzYW1lKSB7DQogICAgcGF5b3V0cyA8LSBjKCI3IiA9IDgwLCAiQkJCIiA9IDQwLCAiQkIiID0gMjUsDQogICAgICAgICAgICAgICAgICJCIiA9IDEwLCAiQyIgPSAxMCwgIjAiID0gMCkNCiAgICBwcml6ZSA8LSB1bm5hbWUocGF5b3V0c1tzbG90c1sxXV0pDQogIH0gZWxzZSBpZiAoYWxsKGJhcnMpKSB7DQogICAgcHJpemUgPC0gNQ0KICB9IGVsc2UgaWYgKGNoZXJyaWVzID4gMCkgew0KICAgICMgZGlhbW9uZHMgY291bnQgYXMgY2hlcnJpZXMNCiAgICAjIHNvIGxvbmcgYXMgdGhlcmUgaXMgb25lIHJlYWwgY2hlcnJ5DQogICAgcHJpemUgPC0gYygwLCAyLCA1KVtjaGVycmllcyArIGRpYW1vbmRzICsgMV0NCiAgfSBlbHNlIHsNCiAgICBwcml6ZSA8LSAwDQogIH0NCiAgIyBkb3VibGUgZm9yIGVhY2ggZGlhbW9uZA0KICBwcml6ZSAqIDJeZGlhbW9uZHMNCn0NCmZvciAoaSBpbiAxOm5yb3coY29tYm9zKSkgew0KICBzeW1ib2xzIDwtIGMoY29tYm9zW2ksIDFdLCBjb21ib3NbaSwgMl0sIGNvbWJvc1tpLCAzXSkNCiAgY29tYm9zJHByaXplW2ldIDwtIHNjb3JlKHN5bWJvbHMpDQp9DQogIGhlYWQoY29tYm9zKQ0KICANCiAgc3VtKGNvbWJvcyRwcml6ZSAqIGNvbWJvcyRwcm9iKQ0KYGBgDQogIA0KDQo=