1. What is the highest score you can obtain in a standard game of bowling if your cumulative score in
each of the ten frames is required to be a prime number?
2. What is the lowest score you can obtain in a standard game of bowling if your cumulative score in
each of the ten frames is required to be a prime number and for each throw you knock
down a prime number of pins?
The next two questions refer to 3-6-9 bowling. The difference in 3-6-9 bowling and the standard game is the 3rd, 6th and 9th frame already have strikes recorded.
3. What is the highest score you can obtain in a game of 3-6-9 bowling if your cumulative score in each of the ten frames is required to be a prime number?
4. What is the lowest score you can obtain if your cumulative score in each of the ten frames is required to be a prime number and for each throw (
excluding the pre-recorded throws) you knock down a prime number of pins?
The first score sheet represents Games #1 and #2.
The second is for use with Games #3 and #4.
| 1 | | | 2 | | | 3 | | | 4 | | | 5 | | | 6 | | | 7 | | | 8 | | | 9 | | | 10 | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| 1 | | | 2 | | | 3 | | | 4 | | | 5 | | | 6 | | | 7 | | | 8 | | | 9 | | | 10 | | | | | |
| | | | | | | X | | | | | | | | | X | | | | | | | | | X | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
One Scoring reference is
here should you need one.
(In reply to
and just part 2. by Leming)
With part 2's added restriction to prime values for each throw, pruning the tree of possibilities was faster, so the program could go to completion:
(don't be fooled by the name maxScore--it contains the minimum score, but the name was held over from the first program).
Private Sub cmdStart_Click()
maxScore = 99999
goingBack = ""
Play 1
Print sCtr
Print "ended"
End Sub
Sub ReportIt()
If Frame(10) > maxScore Then Exit Sub
maxScore = Frame(10)
Cls
sCtr = sCtr + 1
For I = 1 To throwNo
If I > throwNo Then Exit For
If Throw(I) = 10 Then Print " x "; Else Print Throw(I);: I = I + 1: Print Throw(I);
Next
Print
For I = 1 To 10
Print Frame(I);: Print " ";
Next
Print: Print sCtr
End Sub
Sub Play(Fr)
DoEvents
spareFlag = 0
For n = 1 To 10
If fnIsPrime(n) Then
throwNo = throwNo + 1
Throw(throwNo) = n
If n < 10 Then
For n2 = 0 To 10 - n
If fnIsPrime(n2) Then
throwNo = throwNo + 1
Throw(throwNo) = n2
If goingBack = "xx" Then
Frame(Fr - 2) = Frame(Fr - 2) + n
Frame(Fr - 1) = Frame(Fr - 1) + n + n2
Frame(Fr) = Frame(Fr - 1) + n + n2
If n2 = 10 - n Then goingBack = "/" Else goingBack = ""
If fnIsPrime(Frame(Fr - 2)) And fnIsPrime(Frame(Fr - 1)) Then
If goingBack = "/" Or fnIsPrime(Frame(Fr)) Then
If Fr = 10 Then
If goingBack = "/" Then
For n3 = 0 To 10 - N1 - n2
throwNo = throwNo + 1
Throw(throwNo) = n3
Frame(Fr) = Frame(Fr) + n3
If fnIsPrime(Frame(Fr)) Then ReportIt
Frame(Fr) = Frame(Fr) - n3
throwNo = throwNo - 1
Next
Else
ReportIt
End If
Else
Play Fr + 1
End If
End If
End If
Frame(Fr - 2) = Frame(Fr - 2) - n
Frame(Fr - 1) = Frame(Fr - 1) - n - n2
Frame(Fr) = 0
goingBack = "xx"
ElseIf goingBack = "x" Then
If n2 < 10 - n Or spareFlag = 0 Then
Frame(Fr - 1) = Frame(Fr - 1) + n + n2
Frame(Fr) = Frame(Fr - 1) + n + n2
If n2 = 10 - n Then goingBack = "/": spareFlag = 1 Else goingBack = ""
If fnIsPrime(Frame(Fr - 1)) Then
If goingBack = "/" Or fnIsPrime(Frame(Fr)) Then
If Fr = 10 Then
If goingBack = "/" Then
For n3 = 0 To 10 - N1 - n2
throwNo = throwNo + 1
Throw(throwNo) = n3
Frame(Fr) = Frame(Fr) + n3
If fnIsPrime(Frame(Fr)) Then ReportIt
Frame(Fr) = Frame(Fr) - n3
throwNo = throwNo - 1
Next
Else
ReportIt
End If
Else
Play Fr + 1
End If
End If
End If
Frame(Fr - 1) = Frame(Fr - 1) - n - n2
Frame(Fr) = 0
goingBack = "x"
End If
ElseIf goingBack = "/" Then
Frame(Fr - 1) = Frame(Fr - 1) + n
Frame(Fr) = Frame(Fr - 1) + n + n2
If n2 = 10 - n Then goingBack = "/" Else goingBack = ""
If fnIsPrime(Frame(Fr - 1)) Then
If goingBack = "/" Or fnIsPrime(Frame(Fr)) Then
If Fr = 10 Then
If goingBack = "/" Then
For n3 = 0 To 10 - N1 - n2
throwNo = throwNo + 1
Throw(throwNo) = n3
Frame(Fr) = Frame(Fr) + n3
If fnIsPrime(Frame(Fr)) Then ReportIt
Frame(Fr) = Frame(Fr) - n3
throwNo = throwNo - 1
Next
Else
ReportIt
End If
Else
Play Fr + 1
End If
End If
End If
Frame(Fr - 1) = Frame(Fr - 1) - n
Frame(Fr) = 0
goingBack = "/"
Else
If n2 < 10 - n Or spareFlag = 0 Then
Frame(Fr) = Frame(Fr - 1) + n + n2
If n2 = 10 - n Then goingBack = "/": spareFlag = 1 Else goingBack = ""
If goingBack = "/" Or fnIsPrime(Frame(Fr)) Then
If Fr = 10 Then
If goingBack = "/" Then
For n3 = 0 To 10 - N1 - n2
throwNo = throwNo + 1
Throw(throwNo) = n3
Frame(Fr) = Frame(Fr) + n3
If fnIsPrime(Frame(Fr)) Then ReportIt
Frame(Fr) = Frame(Fr) - n3
throwNo = throwNo - 1
Next
Else
ReportIt
End If
Else
Play Fr + 1
End If
End If
Frame(Fr) = 0
goingBack = ""
End If
End If
throwNo = throwNo - 1
End If
Next
Else
' have a strike
If goingBack = "xx" Then
Frame(Fr - 2) = Frame(Fr - 2) + 10
Frame(Fr - 1) = Frame(Fr - 1) + 10
Frame(Fr) = Frame(Fr - 1) + 10
If Fr = 10 Then
If fnIsPrime(Frame(Fr - 2)) Then
For n2 = 0 To 10
If fnIsPrime(n2) Then
For n3 = 0 To 10
If fnIsPrime(n3) Then
Frame(Fr - 1) = Frame(Fr - 1) + n2
Frame(Fr) = Frame(Fr - 1) + 10 + n2 + n3
Throw(throwNo + 1) = n2: Throw(throwNo + 2) = n3
throwNo = throwNo + 2
If fnIsPrime(Frame(Fr - 1)) And fnIsPrime(Frame(Fr)) Then
ReportIt
End If
throwNo = throwNo - 2
Frame(Fr - 1) = Frame(Fr - 1) - n2
Frame(Fr) = 0
End If
Next
End If
Next
End If
Else
Play Fr + 1
End If
Frame(Fr - 2) = Frame(Fr - 2) - 10
Frame(Fr - 1) = Frame(Fr - 1) - 10
Frame(Fr) = 0
ElseIf goingBack = "x" Then
Frame(Fr - 1) = Frame(Fr - 1) + 10
Frame(Fr) = Frame(Fr - 1) + 10
If Fr = 10 Then
For n2 = 0 To 10
If fnIsPrime(n2) Then
For n3 = 0 To 10
Frame(Fr - 1) = Frame(Fr - 1) + n2
Frame(Fr) = Frame(Fr - 1) + 10 + n2 + n3
Throw(throwNo + 1) = n2: Throw(throwNo + 2) = n3
throwNo = throwNo + 2
If fnIsPrime(Frame(Fr - 1)) And fnIsPrime(Frame(Fr)) Then
ReportIt
End If
throwNo = throwNo - 2
Frame(Fr - 1) = Frame(Fr - 1) - n2
Frame(Fr) = 0
Next
End If
Next
Else
goingBack = "xx"
Play Fr + 1
goingBack = "x"
End If
Frame(Fr - 1) = Frame(Fr - 1) - 10
Frame(Fr) = 0
ElseIf goingBack = "/" Then
Frame(Fr - 1) = Frame(Fr - 1) + 10
Frame(Fr) = Frame(Fr - 1) + 10
If Fr = 10 Then
For n2 = 0 To 10
If fnIsPrime(n2) Then
For n3 = 0 To 10
If fnIsPrime(n3) Then
Frame(Fr) = Frame(Fr - 1) + 10 + n2 + n3
Throw(throwNo + 1) = n2: Throw(throwNo + 2) = n3
throwNo = throwNo + 2
If fnIsPrime(Frame(Fr - 1)) And fnIsPrime(Frame(Fr)) Then
ReportIt
End If
throwNo = throwNo - 2
Frame(Fr) = 0
End If
Next
End If
Next
Else
goingBack = "x"
Play Fr + 1
goingBack = "/"
End If
Frame(Fr - 1) = Frame(Fr - 1) - 10
Frame(Fr) = 0
Else
Frame(Fr) = Frame(Fr - 1) + 10
If Fr = 10 Then
For n2 = 0 To 10
If fnIsPrime(n2) Then
For n3 = 0 To 10
If fnIsPrime(n3) Then
Frame(Fr) = Frame(Fr - 1) + 10 + n2 + n3
Throw(throwNo + 1) = n2: Throw(throwNo + 2) = n3
throwNo = throwNo + 2
If fnIsPrime(Frame(Fr)) Then
ReportIt
End If
throwNo = throwNo - 2
Frame(Fr) = 0
End If
Next
End If
Next
Else
goingBack = "x"
Play Fr + 1
goingBack = ""
End If
Frame(Fr) = 0
End If
End If
throwNo = throwNo - 1
End If
Next
End Sub
Function fnIsPrime(Num)
Select Case Num
Case 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, _
257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401
r = 1
Case Else
r = 0
End Select
fnIsPrime = r
End Function
This completed and found:
Part 2. 192:
5 2 3 3 3 3 2 2 5 3 3 3 3 3 2 2 3 3 3 3
7 13 19 23 31 37 43 47 53 59
Alternate of part 2 -- trying for highest score:
5 2 3 7 2 2 5 3 3 7 2 2 3 3 5 3 3 3 3 7 2
7 19 23 31 43 47 53 61 67 79
|
Posted by Charlie
on 2007-11-28 15:52:14 |