Visual Basic code to count the number of 15s in a cribbage hand

This section of code is a small but necessary part of my current project to write a Visual Basic program to play the card game cribbage.
I’m rather please with this, though younger brains might be able to come up with something slicker.

Sub HowMany15s(Cards() As Integer, Ncards As Integer, ByRef HowMany As Integer)
        '
        ' How many 15s are there in the supplied cards
        ' (uses a binary mask to generate all combinations of cards)
        '
        Dim i, f As Integer

        HowMany = 0
        For i = 1 To 2 ^ Ncards - 1
            f = 0
            Select Case Ncards
                Case 3
                    If (i And 1) > 0 Then f = f + Cards(2)
                    If (i And 2) > 0 Then f = f + Cards(1)
                    If (i And 4) > 0 Then f = f + Cards(0)
                Case 4
                    If (i And 1) > 0 Then f = f + Cards(3)
                    If (i And 2) > 0 Then f = f + Cards(2)
                    If (i And 4) > 0 Then f = f + Cards(1)
                    If (i And 8) > 0 Then f = f + Cards(0)
                Case 5
                    If (i And 1) > 0 Then f = f + Cards(4)
                    If (i And 2) > 0 Then f = f + Cards(3)
                    If (i And 4) > 0 Then f = f + Cards(2)
                    If (i And 8) > 0 Then f = f + Cards(1)
                    If (i And 16) > 0 Then f = f + Cards(0)
            End Select
            If f = 15 Then HowMany = HowMany + 1
        Next
    End Sub

Leave a Reply

Discover more from things change

Subscribe now to keep reading and get access to the full archive.

Continue reading