-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmath-ArrayAnyAddValueNotInTheArray.html
More file actions
executable file
·149 lines (132 loc) · 4.95 KB
/
math-ArrayAnyAddValueNotInTheArray.html
File metadata and controls
executable file
·149 lines (132 loc) · 4.95 KB
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
<!DOCTYPE html><html><head><meta charset="UTF-8">
<title>數列中的數值任意相加仍不與數列中的值重複</title>
</head><body>
<script type="text/javascript">
"use strict";
document.body.innerHTML = `
<h1>數列中的數值任意相加仍不與數列中的值重複</h1>
<div>請使用開發者工具(console)操控函數</div>
`;
let ArrUse = [],
jClearDefaultArr = true,
ArrNeedAddNum = [],
ArrBanBigNum = [],
NumNow = 0,
jTimer = {
func: null,
clock: null,
ms: 1000
},
jTimes = {
now: 0,
limit: Infinity
};
function jNoDoubleNum( ArrInitNum, NumLimit ){
jTimes.now = 0,
jTimes.limit = NumLimit || Infinity,
ArrUse = ArrInitNum;
if( jClearDefaultArr ){
ArrNeedAddNum.length = 0,
ArrBanBigNum.length = 0;
}
//初始值相加
for(let p = 0, len = ArrUse.length ; p < len ; p++ ){
NumNow = ArrUse[ p ];
jPutInto( NumNow );
for(let q = 0, len = ArrNeedAddNum.length - 1; q < len ; q++ )
jPutInto( NumNow + ArrNeedAddNum[ q ] );
}
function jCount(){
if( jTimes.now >= jTimes.limit ) return false;
jTimes.now++;
NumNow = ArrUse[ ArrUse.length - 1 ];
//檢查可用值
while( NumNow++ )
if( ArrBanBigNum.indexOf( NumNow ) !== -1 ) continue;
else break;
//重整現況
ArrUse.push( NumNow );
console.log( ArrUse.join(', ') );
//>> 挑出相加的值
jPutInto( NumNow );
for(let p = 0, len = ArrNeedAddNum.length - 1; p < len ; p++ )
jPutInto( NumNow + ArrNeedAddNum[ p ] );
//>> 刪除小於現值的數
while( 1 ){
if( ArrBanBigNum[0] < NumNow )
ArrBanBigNum.shift();
else
break;
}
}
function jPutInto( Num ){
if( ArrNeedAddNum.indexOf( Num ) !== -1 ) return;
ArrNeedAddNum.push( Num );
ArrBanBigNum.push( Num );
}
let jTimerLock = false;
jTimer.func = function(){
if( jTimerLock ) return;
jTimerLock = true;
let isContinue = jCount();
jTimerLock = false;
if( isContinue != false )
jTimer.clock = setTimeout( jTimer.func, jTimer.ms );
};
setTimeout( jTimer.func, 10 );
}
jTimer.continue = function( NumContinueLimit ){
jTimer.stop();
jTimes.limit = NumContinueLimit ? NumContinueLimit + jTimes.now : Infinity;
setTimeout( jTimer.func, 10 );
clearTimeout( jTimer.clock );
};
jTimer.stop = function(){
clearTimeout( jTimer.clock );
};
console.log( jGetInfo('booklet') );
function jGetInfo( jInfo ){
switch( jInfo ){
case 'booklet':
return [ '說明:',
[ '使用方式:',
[ '1. jNoDoubleNum( [ NumA, NumB ], NumLimit )',
'設定起頭的兩個數值 NumA, NumB。',
'數值 NumA 小於 NumB。',
'可選執行次數 NumLimit。'
].join('\n\t\t\t'),
[ '2. jTimer.stop()',
'停止執行。'
].join('\n\t\t\t'),
[ '3. jTimer.continue( NumContinueLimit )',
'繼續執行。'
].join('\n\t\t\t'),
[ '4. jTimer.ms = NumMS',
'設定執行間隔毫秒數。'
].join('\n\t\t\t')
].join('\n\t\t'),
[ '顯示訊息:',
[ '1. jGetInfo("booklet")',
'顯示此說明。'
].join('\n\t\t\t'),
[ '2. jGetInfo()',
'顯示整理訊息。'
].join('\n\t\t\t'),
[ '3. jGetInfo("rmNum")',
'顯示已排除的數值(含有效個數)。'
].join('\n\t\t\t')
].join('\n\t\t')
].join('\n\t');
break;
case 'rmNum':
return ArrNeedAddNum.join(', ');
break;
default:
return [ '參考:',
'有效個數: ' + ArrUse.length,
'已排除個數(含有效個數): ' + ArrNeedAddNum.length
].join('\n\t');
}
}
</script>
</body></html>