1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
Attribute VB_Name = "ModTask_02"
Option Explicit
Option Base 1
Function PrintArr(nMatrix, Optional bHide As Boolean = True) As String
Dim nRowLoop As Integer, nColLoop As Integer
For nRowLoop = LBound(nMatrix, 1) To UBound(nMatrix, 1)
For nColLoop = LBound(nMatrix, 2) To UBound(nMatrix, 2)
If PrintArr <> "" Then
PrintArr = PrintArr & " "
End If
If bHide And nMatrix(nRowLoop, nColLoop) = 0 Then
PrintArr = PrintArr & "*"
ElseIf nMatrix(nRowLoop, nColLoop) = -1 Then
PrintArr = PrintArr & "x"
Else
PrintArr = PrintArr & nMatrix(nRowLoop, nColLoop)
End If
Next nColLoop
PrintArr = PrintArr & vbNewLine
Next nRowLoop
End Function
Function CountLandMineNearBy(ByRef nMatrix, nRowIndex As Integer, nColIndex As Integer) As Integer
Dim nRowSize As Integer, nColSize As Integer
If nMatrix(nRowIndex, nColIndex) = -1 Then
CountLandMineNearBy = -1
Exit Function
End If
nRowSize = UBound(nMatrix, 1) - LBound(nMatrix, 1) + 1
nColSize = UBound(nMatrix, 2) - LBound(nMatrix, 2) + 1
If nRowIndex - 1 > 0 And nColIndex - 1 > 0 Then
If nMatrix(nRowIndex - 1, nColIndex - 1) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
If nRowIndex - 1 > 0 Then
If nMatrix(nRowIndex - 1, nColIndex) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
If nRowIndex - 1 > 0 And nColIndex < nColSize Then
If nMatrix(nRowIndex - 1, nColIndex + 1) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
If nColIndex - 1 > 0 Then
If nMatrix(nRowIndex, nColIndex - 1) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
If nColIndex < nColSize Then
If nMatrix(nRowIndex, nColIndex + 1) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
If nRowIndex < nRowSize And nColIndex - 1 > 0 Then
If nMatrix(nRowIndex + 1, nColIndex - 1) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
If nRowIndex < nRowSize Then
If nMatrix(nRowIndex + 1, nColIndex) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
If nRowIndex < nRowSize And nColIndex < nColSize Then
If nMatrix(nRowIndex + 1, nColIndex + 1) = -1 Then
CountLandMineNearBy = CountLandMineNearBy + 1
End If
End If
End Function
Sub CountLandMineNearByAll(ByRef nMatrix)
Dim nRowLoop As Integer, nColLoop As Integer
For nRowLoop = LBound(nMatrix, 1) To UBound(nMatrix, 1)
For nColLoop = LBound(nMatrix, 2) To UBound(nMatrix, 2)
If nMatrix(nRowLoop, nColLoop) > -1 Then
nMatrix(nRowLoop, nColLoop) = CountLandMineNearBy(nMatrix, nRowLoop, nColLoop)
End If
Next nColLoop
Next nRowLoop
End Sub
Sub Task_02()
Const nRowNum As Integer = 5
Const nColNum As Integer = 10
Dim strMsg As String
'' Define Rectangle
Dim nMineArr(1 To nRowNum, 1 To nColNum) As Integer
'' ======== Land Mine ========
'' Initialize, -1 Represents Land Mine
nMineArr(1, 1) = -1
nMineArr(5, 1) = -1
nMineArr(4, 4) = -1
nMineArr(1, 5) = -1
nMineArr(3, 5) = -1
nMineArr(4, 5) = -1
nMineArr(5, 5) = -1
nMineArr(1, 7) = -1
nMineArr(3, 7) = -1
nMineArr(1, 8) = -1
nMineArr(1, 9) = -1
nMineArr(3, 9) = -1
nMineArr(1, 10) = -1
nMineArr(2, 10) = -1
nMineArr(5, 10) = -1
'' ======== Land Mine ========
'' ======== Print Original Array ========
''strMsg = PrintArr(nMineArr)
'' ======== Print Original Array ========
'' ======== Count ========
CountLandMineNearByAll nMineArr
'' ======== Count ========
'' ======== Print Count Array ========
strMsg = PrintArr(nMineArr, False)
'' ======== Print Count Array ========
'' ======== Output Result ========
MsgBox strMsg, vbOKOnly, strMyTitle
'' ======== Output Result ========
End Sub
|