73 lines
3.5 KiB
Text
73 lines
3.5 KiB
Text
'Altered to prevent lines starting with ']' or ending with '[' being generated as they can't work
|
|
|
|
siNumberOfBrackets As Short = 20 'Maximum amount of brackets in a line
|
|
siNumberOfLines As Short = 20 'Amount of lines to test
|
|
|
|
'----
|
|
|
|
Public Sub Main()
|
|
Dim sBrks As String[] = GenerateBrackets() 'Get random array to check
|
|
Dim sTemp, sHold, sWork As String 'Working variables
|
|
Dim siCount As Short 'Counter
|
|
|
|
For Each sTemp In sBrks 'For each line in the sBrk array (e.g. '[][][][[[[]][]]]')
|
|
sWork = sTemp 'Make sWork = sTemp
|
|
Repeat 'Repeat
|
|
sHold = sWork 'Make sHold = sWork
|
|
sWork = Replace(sWork, "[]", "") 'Remove all brackets that match '[]'
|
|
Until sHold = sWork 'If sHold = sWork then there are no more '[]' matches
|
|
|
|
If sWork = "" Then 'So if all the brackets 'Nested' correctly sWork will be empty
|
|
Print " OK "; 'Print 'OK'
|
|
Else 'Else they did not all match
|
|
Print "NOT OK "; 'So print 'NOT OK'
|
|
Endif
|
|
|
|
For siCount = 1 To Len(sTemp) 'Loop through the line of brackets
|
|
Print Mid(sTemp, siCount, 1) & " "; 'Print each bracket + a space to make it easier to read
|
|
Next
|
|
Print 'Print a new line
|
|
Next
|
|
|
|
End
|
|
|
|
'----
|
|
|
|
Public Sub GenerateBrackets() As String[] 'Generates an array of random quantities of '[' and ']'
|
|
Dim siQty As New Short[] 'To store the random number (of brackets) to put in a line
|
|
Dim sBrk As New String[] 'To store the lines of brackets
|
|
Dim siNum, siEnd, siLoop As Short 'Various counters
|
|
Dim sTemp As String 'Temp string
|
|
|
|
Repeat 'Repeat
|
|
siNum = Rand(0, siNumberOfBrackets) 'Pick a number between 0 and the total number of brackets requested
|
|
If Even(siNum) Then siQty.Add(siNum) 'If the number is even then add the number to siQty
|
|
Until siQty.Count = siNumberOfLines 'Keep going until we have the number of lines requested
|
|
|
|
For Each siNum In siQty 'For each number in siQty..(e.g. 6)
|
|
Do
|
|
siEnd = Rand(0, 1) 'Generate a 0 or a 1
|
|
If siEnd = 0 Then sTemp &= "[" 'If '0' then add a '[' bracket
|
|
If siEnd = 1 Then sTemp &= "]" 'If '1' then add a ']' bracket
|
|
|
|
If siNum = 0 Then 'If siNum = 0 then..
|
|
sBrk.Add("") 'Add '0' to the array
|
|
sTemp = "" 'Clear sTemp
|
|
Break 'Exit the Do Loop
|
|
Endif
|
|
|
|
If Len(sTemp) = siNum Then 'If the length of sTemp = the required amount then..
|
|
If sTemp Not Begins "]" And sTemp Not Ends "[" Then 'Check to see that sTemp does not start with "]" and does not end with a "["
|
|
sBrk.Add(sTemp) 'Add it to the array
|
|
sTemp = "" 'Clear sTemp
|
|
Break 'Exit the Do Loop
|
|
Else 'Else
|
|
sTemp = "" 'Clear sTemp
|
|
End If 'Try again!
|
|
Endif
|
|
Loop
|
|
Next
|
|
|
|
Return sBrk 'Return the sBrk array
|
|
|
|
End
|