Data update
This commit is contained in:
parent
0df55f9f24
commit
aec8ed51b6
1045 changed files with 18889 additions and 2777 deletions
141
Task/Poker-hand-analyser/FreeBASIC/poker-hand-analyser.basic
Normal file
141
Task/Poker-hand-analyser/FreeBASIC/poker-hand-analyser.basic
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
Const As String FACES = "23456789tjqka"
|
||||
Const As String SUITS = "shdc"
|
||||
|
||||
Type card
|
||||
face As Integer ' FACES map to 0..12 respectively
|
||||
suit As String
|
||||
End Type
|
||||
|
||||
Dim Shared As card cards(4)
|
||||
|
||||
Sub insertionSort(arr() As card, Byval n As Integer)
|
||||
Dim As Integer i, key, j
|
||||
For i = 1 To n-1
|
||||
key = arr(i).face
|
||||
j = i-1
|
||||
While j >= 0 And arr(j).face > key
|
||||
arr(j+1) = arr(j)
|
||||
j = j-1
|
||||
Wend
|
||||
arr(j+1).face = key
|
||||
Next i
|
||||
End Sub
|
||||
|
||||
Function compareCard(Byval a As card, Byval b As card) As Integer
|
||||
Return a.face - b.face
|
||||
End Function
|
||||
|
||||
Function equalsCard(Byval c1 As card, Byval c2 As card) As Integer
|
||||
If c1.face = c2.face And c1.suit = c2.suit Then Return True
|
||||
Return False
|
||||
End Function
|
||||
|
||||
Function areDistinct() As Integer
|
||||
Dim As Integer i, j
|
||||
For i = 0 To 3
|
||||
For j = i + 1 To 4
|
||||
If equalsCard(cards(i), cards(j)) = True Then Return False
|
||||
Next j
|
||||
Next i
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Function isStraight() As Boolean
|
||||
insertionSort(cards(), 5)
|
||||
If cards(0).face + 4 = cards(4).face Then Return True
|
||||
If cards(4).face = 12 And cards(0).face = 0 And cards(3).face = 3 Then Return True
|
||||
Return False
|
||||
End Function
|
||||
|
||||
Function isFlush() As Boolean
|
||||
Dim As String suit = cards(0).suit
|
||||
For i As Integer = 1 To 4
|
||||
If cards(i).suit <> suit Then Return False
|
||||
Next i
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Function analyzeHand(Byval hand As String) As String
|
||||
Dim As Integer i, j, cp, gs = 0
|
||||
Dim As String suit
|
||||
Dim As Integer found, flush, straight
|
||||
Dim As Integer groups(12)
|
||||
|
||||
If Len(hand) <> 14 Then Return "invalid"
|
||||
For i = 0 To 13 Step 3
|
||||
cp = Instr(FACES, Lcase(Mid(hand, i + 1, 1)))
|
||||
If cp = 0 Then Return "invalid"
|
||||
j = i \ 3
|
||||
cards(j).face = cp - 1
|
||||
suit = Lcase(Mid(hand, i + 2, 1))
|
||||
cp = Instr(SUITS, suit)
|
||||
If cp = 0 Then Return "invalid"
|
||||
cards(j).suit = suit
|
||||
Next i
|
||||
If areDistinct() = False Then Return "invalid"
|
||||
For i = 0 To 12
|
||||
groups(i) = 0
|
||||
Next i
|
||||
For i = 0 To 4
|
||||
groups(cards(i).face) += 1
|
||||
Next i
|
||||
For i = 0 To 12
|
||||
If groups(i) > 0 Then gs += 1
|
||||
Next i
|
||||
Select Case gs
|
||||
Case 2
|
||||
found = False
|
||||
For i = 0 To 12
|
||||
If groups(i) = 4 Then
|
||||
found = True
|
||||
Exit For
|
||||
End If
|
||||
Next i
|
||||
If found = True Then Return "four-of-a-kind"
|
||||
Return "full-house"
|
||||
Case 3
|
||||
found = False
|
||||
For i = 0 To 12
|
||||
If groups(i) = 3 Then
|
||||
found = True
|
||||
Exit For
|
||||
End If
|
||||
Next i
|
||||
If found = True Then Return "three-of-a-kind"
|
||||
Return "two-pairs"
|
||||
Case 4
|
||||
Return "one-pair"
|
||||
Case Else
|
||||
flush = isFlush()
|
||||
straight = isStraight()
|
||||
If flush = True And straight = True Then
|
||||
Return "straight-flush"
|
||||
Elseif flush = True Then
|
||||
Return "flush"
|
||||
Elseif straight = True Then
|
||||
Return "straight"
|
||||
Else
|
||||
Return "high-card"
|
||||
End If
|
||||
End Select
|
||||
End Function
|
||||
|
||||
Dim As String tipo
|
||||
Dim As String hands(9) = { _
|
||||
"2h 2d 2c kc qd", _
|
||||
"2h 5h 7d 8c 9s", _
|
||||
"ah 2d 3c 4c 5d", _
|
||||
"2h 3h 2d 3c 3d", _
|
||||
"2h 7h 2d 3c 3d", _
|
||||
"2h 7h 7d 7c 7s", _
|
||||
"th jh qh kh ah", _
|
||||
"4h 4s ks 5d ts", _
|
||||
"qc tc 7c 6c 4c", _
|
||||
"ah ah 7c 6c 4c" }
|
||||
|
||||
For i As Integer = 0 To 9
|
||||
tipo = analyzeHand(hands(i))
|
||||
Print hands(i); ": "; tipo
|
||||
Next i
|
||||
|
||||
Sleep
|
||||
Loading…
Add table
Add a link
Reference in a new issue