Option Compare Database
Option Explicit
Public Type LaneAssignments
laneNumber As Integer
laneValue As Integer
End Type
Public Type LaneMap
laneNumber As Integer
lanesToCheck As Variant
End Type
Dim lnAR As Variant
Dim lColl(1 To 9) As LaneAssignments
Dim lMap(1 To 9) As LaneMap
Function BuildLaneMap()
Dim x As Integer
For x = 1 To 9
Select Case x
Case 1
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(2, 3, 4)
Case 2
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(1, 3, 4, 5)
Case 3
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(1, 2, 4, 5, 6)
Case 4
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(1, 2, 3, 5, 6, 7)
Case 5
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(2, 3, 4, 6, 7, 8)
Case 6
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(3, 4, 5, 7, 8, 9)
Case 7
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(4, 5, 6, 8, 9)
Case 8
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(5, 6, 7, 9)
Case 9
lMap(x).laneNumber = x
lMap(x).lanesToCheck = Array(6, 7, 8)
End Select
Next x
End Function
Function AssignLanes()
Dim x As Long
BuildLaneMap
BuildLanes
For x = 1 To 9
Dim i As Integer
rTry:
i = MakeLaneValue
Dim ln As LaneAssignments
ln.laneNumber = x
ln.laneValue = i
If CheckIfValid(ln) Then
lColl(x) = ln
Else
GoTo rTry
End If
Next x
For x = 1 To 9
Debug.Print "Lane " & lColl(x).laneNumber & " = " & lColl(x).laneValue
Next x
End Function
Function BuildLanes()
Dim x As Integer
For x = 1 To 9
lColl(x).laneNumber = x
Next x
End Function
Function CheckIfValid(ln As LaneAssignments) As Boolean
Dim l As LaneMap, isGood As Boolean
isGood = True
l = lMap(ln.laneNumber)
Dim i As Variant
For Each i In lMap(ln.laneNumber).lanesToCheck
If (lColl(i).laneValue > 0) Then
isGood = isGood And (Abs(ln.laneValue - lColl(i).laneValue) > 5)
End If
Next i
CheckIfValid = isGood
End Function
Function MakeLaneValue() As Integer
MakeLaneValue = Int((48 - 8 + 1) * Rnd + 8)
End Function