-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsyntaxTest.js
107 lines (93 loc) · 2.92 KB
/
syntaxTest.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
var TOTAL_PIECE = 16; // should be A Perfect Square number
function getRandomBetween(a,b){
var min = a || 0;
var max = b || 1000;
return min + Math.floor(Math.random() * (max - min));
}
//生成一组参考答案数组。
function createAnswerSequence(a,c){
var target = parseInt(a || 0, 10);
var count = parseInt(c || 2, 10);
if (typeof target !== 'number' || typeof target !== 'number') {
throw new Error('parameters should be a NUMBER ');
}
if (target < 5) {
throw new Error('target should beyond 5');
}
var randomPositions = [], i = 0;
while (i < count) {
var tmp = Math.floor(Math.random() * target);
if (randomPositions.indexOf(tmp) < 0 && tmp !== 0) {
randomPositions.push(tmp);
++i;
}
}
var sortRandomPositions = randomPositions.sort((a,b) => a - b);
var targetAnswers = [];
sortRandomPositions.reduce((p,n) => {
targetAnswers.push(n - p);
return n;
},0);
targetAnswers.push(target - sortRandomPositions[sortRandomPositions.length - 1]);
return targetAnswers;
}
function createAllPieceValue(target) {
var i = 0, arr = [];
while (i < TOTAL_PIECE) {
var tmp = Math.floor(Math.random() * 10);
if (tmp === target) {
continue;
}
arr.push(tmp)
++i;
}
return console.log(arr),arr;
}
function isNearBy(center,b,rowLength) {
if (center % rowLength === 0 && b === (center - 1)) {
return false;
}
if (center % rowLength === (rowLength - 1) && b === (center + 1)) {
return false;
}
return true;
};
function getAvailableIndexes(index, rowLength) {
// console.log('center',index);
var allIndexes = [index - rowLength, index + rowLength, index - 1, index + 1];
// console.log('allIndexes',allIndexes);
var availableIndexes = [];
allIndexes.forEach( value => {
if (value >= 0 && value <= (rowLength * rowLength - 1)) {
if (isNearBy(index, value,rowLength)) {
availableIndexes.push(value);
}
}
});
return availableIndexes;
};
function createAnswerIndexes(count){
var indexesArray = []
var rowLength = Math.sqrt(TOTAL_PIECE);
var initialPosition = Math.floor(Math.random() * TOTAL_PIECE);
var i = 0;
while (i < count) {
if (indexesArray.indexOf(initialPosition) < 0) {
indexesArray.push(initialPosition);
++i;
}
var availableIndexes = getAvailableIndexes(initialPosition,rowLength);
initialPosition = availableIndexes[Math.floor(Math.random() * availableIndexes.length)];
}
return indexesArray;
}
var answerSequence = createAnswerSequence(process.argv[2],process.argv[3]);
var answerIndexes = createAnswerIndexes(answerSequence.length);
var allPieceValue = createAllPieceValue(process.argv[2]);
// console.log('answerSequence',answerSequence);
// console.log('answerIndexes',answerIndexes);
// console.log('before',allPieceValue);
answerIndexes.forEach( (index,i_index) => {
allPieceValue[index] = answerSequence[i_index];
});
// console.log('after',allPieceValue);