The document discusses strategies for calculating the payout from a slot machine game based on the symbols in each window. It describes three cases: when all windows show the same symbol, when all windows show bar symbols, and when the windows contain cherries and/or diamonds. Code is presented to write a function that takes the window values as input and returns the correct payout amount by checking for these cases. The document concludes by noting an issue with the scoring function and assigning related readings on group work.
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
07 Problem Solving
1. Stat405 Problem solving
Hadley Wickham
Wednesday, 16 September 2009
2. Homework
Great improvement. A few tips:
Headings should be in sentence case, and be a
single sentence summary of the section.
Include ggsave calls in your code.
Don’t use " and " to get “ and ”.
Use ` ` and ' '.
(Also, I think I’ve been grading quite hard. Think
of a 5 as an A+, a 4 as an A, and a 3 as an A-/B+)
Wednesday, 16 September 2009
3. Feedback
Speed seems about right.
Frustration is a natural part of the learning
experience. You will get better! In
particularly, it will get easier to find
interesting plots (helps to start homework
early!)
Split homework help session? Also, feel
free to email me to set up time to talk.
Wednesday, 16 September 2009
4. 1. Recap of problem
2. Task
3. Basic strategy
4. Turning ideas into code
Wednesday, 16 September 2009
5. Slots
Casino claims that slot machines have
prize payout of 92%. Is this claim true?
mean(slots$payoff)
t.test(slots$prize, mu = 0.92)
qplot(prize, data = slots, binwidth = 1)
Can we do better?
Wednesday, 16 September 2009
6. Bootstrapping
Slot machine is basically a random
number generator - three numbers
between 1 and 7. We can generate a new
number by sampling from the data.
Doing that lots of times, and calculating
the payoff should give us a better idea of
the payoff. But first we need some way to
calculate the prize from the windows
Wednesday, 16 September 2009
7. DD DD DD 800
windows <- c("DD", "C", "C")
7 7 7 80
# How can we calculate the
BBB BBB BBB 40 # payoff?
B B B 10
C C C 10
Any bar Any bar Any bar 5
C C * 5
C * C 5
C * * 2
* C * 2 DD doubles any winning
combination. Two DD
* * C 2 quadruples.
Wednesday, 16 September 2009
8. Your turn
There are three basic cases of prizes.
What are they? Take 3 minutes to
brainstorm with a partner.
Wednesday, 16 September 2009
9. Cases
1. All windows have same value
2. A bar (B, BB, or BBB) in every window
3. Cherries and diamonds
Wednesday, 16 September 2009
11. Same values
1. Determine that all windows are the
same. How?
Wednesday, 16 September 2009
12. Same values
1. Determine that all windows are the
same. How?
2. Given single window, look up prize
value. How?
Wednesday, 16 September 2009
13. Same values
1. Determine that all windows are the
same. How?
2. Given single window, look up prize
value. How?
With a partner, brainstorm
for 2 minutes on how to
solve one of these problems
Wednesday, 16 September 2009
14. # Same value
same <- length(unique(windows)) == 1
# OR
same <- windows[1] == windows[2] &&
windows[2] == windows[3]
if (same) {
# Lookup value
}
Wednesday, 16 September 2009
15. If
if (cond) expression
Cond should be a logical vector of length 1
Use && and || to combine sub-conditions
Not & and | - these work on vectors
&& and || are “short-circuiting”: they
do the minimum amount of work
Wednesday, 16 September 2009
16. if (TRUE) {
# This will be run
}
if (FALSE) {
# This won't be run
} else {
# This will be
}
# Single line form: (not recommended)
if (TRUE) print("True!)
if (FALSE) print("True!)
Wednesday, 16 September 2009
17. if (TRUE) {
# This will be run
}
if (FALSE) {
# This won't be run
} else {
# This will be
}
Note indenting.
Very important!
# Single line form: (not recommended)
if (TRUE) print("True!)
if (FALSE) print("True!)
Wednesday, 16 September 2009
18. x <- 5
if (x < 5) print("x < 5")
if (x == 5) print("x == 5")
x <- 1:5
if (x < 3) print("What should happen here?")
if (x[1] < x[2]) print("x1 < x2")
if (x[1] < x[2] && x[2] < x[3]) print("Asc")
if (x[1] < x[2] || x[2] < x[3]) print("Asc")
Wednesday, 16 September 2009
20. Your turn
Complete the previous code so that if all
the values in win are the same, then prize
variable will be set to the correct amount.
Wednesday, 16 September 2009
21. All bars
How can we determine if all of the
windows are B, BB, or BBB?
(windows[1] == "B" ||
windows[1] == "BB" ||
windows[1] === "BBB") && ... ?
Wednesday, 16 September 2009
22. All bars
How can we determine if all of the
windows are B, BB, or BBB?
(windows[1] == "B" ||
windows[1] == "BB" ||
windows[1] === "BBB") && ... ?
Take 2 minutes to brainstorm
possible solutions
Wednesday, 16 September 2009
23. windows[1] %in% c("B", "BB", "BBB")
windows %in% c("B", "BB", "BBB")
allbars <- windows %in% c("B", "BB", "BBB")
allbars[1] & allbars[2] & allbars[3]
all(allbars)
# See also ?any for the complement
Wednesday, 16 September 2009
24. Your turn
Complete the previous code so that the
correct value of prize is set if all the
windows are the same, or they are all
bars
Wednesday, 16 September 2009
26. Cherries
Need numbers of cherries, and numbers
of diamonds (hint: use sum)
Then need to look up values (like for the
first case) and multiply together
Wednesday, 16 September 2009
29. Writing a function
Now we need to wrap up this code in to a
reusable fashion. We need a function
Have used functions a lot, and this will be
our first time writing one
Wednesday, 16 September 2009
30. Basic structure
• Name
• Input arguments
• Names/positions
• Defaults
• Body
• Output value
Wednesday, 16 September 2009
32. Homework
What did we miss? Find out the problem
with our scoring function and fix it.
Also, some readings related to group
work.
Wednesday, 16 September 2009