47 lines
1.4 KiB
Plaintext
47 lines
1.4 KiB
Plaintext
Option Base 1
|
|
Private Function power_set(ByRef st As Collection) As Collection
|
|
Dim subset As Collection, pwset As New Collection
|
|
For i = 0 To 2 ^ st.Count - 1
|
|
Set subset = New Collection
|
|
For j = 1 To st.Count
|
|
If i And 2 ^ (j - 1) Then subset.Add st(j)
|
|
Next j
|
|
pwset.Add subset
|
|
Next i
|
|
Set power_set = pwset
|
|
End Function
|
|
Private Function print_set(ByRef st As Collection) As String
|
|
'assume st is a collection of collections, holding integer variables
|
|
Dim s() As String, t() As String
|
|
ReDim s(st.Count)
|
|
'Debug.Print "{";
|
|
For i = 1 To st.Count
|
|
If st(i).Count > 0 Then
|
|
ReDim t(st(i).Count)
|
|
For j = 1 To st(i).Count
|
|
Select Case TypeName(st(i)(j))
|
|
Case "Integer": t(j) = CStr(st(i)(j))
|
|
Case "Collection": t(j) = "{}" 'assumes empty
|
|
End Select
|
|
Next j
|
|
s(i) = "{" & Join(t, ", ") & "}"
|
|
Else
|
|
s(i) = "{}"
|
|
End If
|
|
Next i
|
|
print_set = "{" & Join(s, ", ") & "}"
|
|
End Function
|
|
Public Sub rc()
|
|
Dim rcset As New Collection, result As Collection
|
|
For i = 1 To 4
|
|
rcset.Add i
|
|
Next i
|
|
Debug.Print print_set(power_set(rcset))
|
|
Set rcset = New Collection
|
|
Debug.Print print_set(power_set(rcset))
|
|
Dim emptyset As New Collection
|
|
rcset.Add emptyset
|
|
Debug.Print print_set(power_set(rcset))
|
|
Debug.Print
|
|
End Sub
|