-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharea.js
146 lines (131 loc) · 3.1 KB
/
area.js
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
var random01 = function() {
/*
返回 0 或 1
*/
var a = Math.random()
if(a > 0.85) {
return 1
} else {
return 0
}
}
var randomLine09 = function(n) {
/*
返回一个只包含了 0 9 的随机 array, 长度为 n
假设 n 为 5, 返回的数据格式如下(这是格式范例, 真实数据是随机的)
[0, 0, 9, 0, 9]
*/
var l = []
for(var i = 0; i < n; i++) {
l.push(random01() * 9)
}
return l
}
var shuffle = function(array) {
var len = array.length
for(var i = 0; i < len - 1; i++) {
var temp = array[i]
var index = Math.floor(Math.random() * (len - i) + i)
array[i] = array[index]
array[index] = temp
}
}
var randomArray09 = function(len, num) {
var l = []
for(var i = 0; i < num; i ++) {
l.push(9)
}
while(l.length < len) {
l.push(0)
}
shuffle(l)
return l
}
var randomSquare09 = function(x, y, num) {
var l = []
var len = x * y
var array = randomArray09(len, num)
for(var i = 0; i < x; i++) {
var a = array.slice(i * y, (i + 1) * y )
l.push(a)
}
return l
}
// log('textsquare', randomSquare09(5))
//这是最后一题
var clonedSquare = function(array) {
var s = []
for (var i = 0; i < array.length; i++) {
var line = []
for (var j = 0; j < array[i].length; j++) {
line.push(array[i][j])
}
s.push(line)
}
return s
}
// 辅助函数, 给数字 +1
// 这里会判断下标是否合法
var plus1 = function(array, x, y) {
var n = array.length
if (x >= 0 && x < n && y >= 0 && y < n) {
if (array[x][y] !== 9) {
array[x][y] += 1
}
}
}
// 辅助函数, 用来给 9 周边的 8 个格子 +1
var markAround = function(array, x, y) {
/*
###
###
###
*/
if (array[x][y] === 9) {
// 左边 3 个
plus1(array, x - 1, y - 1)
plus1(array, x - 1, y)
plus1(array, x - 1, y + 1)
// 上下 2 个
plus1(array, x, y - 1)
plus1(array, x, y + 1)
// 右边 3 个
plus1(array, x + 1, y - 1)
plus1(array, x + 1, y)
plus1(array, x + 1, y + 1)
}
}
var markedSquare = function(array) {
/*
array 是一个「包含了『只包含了 0 9 的 array』的 array」
返回一个标记过的 array
** 注意, 使用一个新数组来存储结果, 不要直接修改老数组
范例如下, 这是 array
[
[0, 9, 0, 0],
[0, 0, 9, 0],
[9, 0, 9, 0],
[0, 9, 0, 0],
]
这是标记后的结果
[
[1, 9, 2, 1],
[2, 4, 9, 2],
[9, 4, 9, 2],
[2, 9, 2, 1],
]
规则是, 0 会被设置为四周 8 个元素中 9 的数量
*/
var square = clonedSquare(array)
for (var i = 0; i < square.length; i++) {
var line = square[i]
for (var j = 0; j < line.length; j++) {
markAround(square, i, j)
}
}
return square
}
var area = function(num) {
var a = randomSquare09(12, 12, num)
return markedSquare(a)
}