'======================================================================================
' Generate all possible Win/Loss combinations recursively
' Change Log
' 03/19/23 Created & tested
'======================================================================================
Sub WinLossCombs()
'Const rnUpRtHd As String = "Corner" 'Name of upper right corner of table
'Const NumGames As Long = 7 'Number of games in the series
Const MaxWins As Long = 4 'Number of wins to win the series
Const WinChar As Variant = "W" 'The "win" character
Const LssChar As Variant = "L" 'The "loss" character
Dim Series As String 'The actual series (W's & L's)
Dim iSeries As Long 'The series number (1 to whatever)
Dim NumWins As Long 'Number of wins so far
Dim NumLsss As Long 'Number of losses so far
' Start
'Application.SendKeys "^g ^a {DEL}" 'Clear the immediate window
Debug.Print " ----- New Run -----"
iSeries = 1 'Start with the first series
Call WinLoss(iSeries, NumWins, NumLsss, Series, MaxWins)
End Sub
'---------------------------------------------------------------------
' Recursive Code to Add Wins & Losses
'---------------------------------------------------------------------
Sub WinLoss(ByRef iSeries _
, ByVal NumWins, ByVal NumLsss, ByVal Series, ByVal MaxWins)
' Save parameters that need to be backed out for the loss code
Dim SeriesIn As String: SeriesIn = Series 'The series W/L so far
Dim NumWinsIn As Long: NumWinsIn = NumWins 'The number of wins
' Add a win
NumWins = NumWins + 1
Series = Series & "W"
If NumWins = MaxWins Then
Debug.Print iSeries & " " & Series
iSeries = iSeries + 1
Else
Call WinLoss(iSeries, NumWins, NumLsss, Series, MaxWins)
End If
NumWins = NumWinsIn 'Restore the number of wins
Series = SeriesIn 'Restore the series
' Add a loss
NumLsss = NumLsss + 1
Series = Series & "L"
If NumLsss = MaxWins Then
Debug.Print iSeries & " " & Series
iSeries = iSeries + 1
Else
Call WinLoss(iSeries, NumWins, NumLsss, Series, MaxWins)
End If
End Sub