-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsequence_1_11_21_1211.js
86 lines (74 loc) · 3.71 KB
/
sequence_1_11_21_1211.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
function getSequence(n, oldState){
oldState = oldState || {};
var beginTime = new Date().getTime();
var arr_sec = oldState.arr_sec || ["1"]; // default
function clearOldState(){
oldState.split_arr = undefined;
oldState.check_no = undefined;
oldState.conut_rep = undefined;
oldState.new_level_str = undefined;
oldState.j = undefined;
}
TimeOut:
{
for (var i = arr_sec.length - 1; i < n - 1 ; i++){
var split_arr = oldState.split_arr || arr_sec[i].split('');
var j = oldState.j || 0;
var check_no = oldState.check_no || Number(split_arr[0]);
var conut_rep = oldState.conut_rep || 0;
var new_level_str = oldState.new_level_str || "";
clearOldState();
for ( ; j < split_arr.length; j++){
if ( check_no == Number(split_arr[j]) ){
conut_rep++;
} else {
new_level_str += conut_rep.toString() + check_no.toString();
check_no = Number(split_arr[j]);
conut_rep = 1;
}
if ( new Date().getTime() - beginTime > breakTime ){
oldState.countTimeOut = (oldState.countTimeOut ? oldState.countTimeOut+1 : 1);
oldState.arr_sec = arr_sec;
if ( j + 1 >= split_arr.length ){
clearOldState();
new_level_str += conut_rep.toString() + check_no.toString();
arr_sec[i+1] = new_level_str;
} else{
oldState.split_arr = split_arr;
oldState.check_no = check_no;
oldState.conut_rep = conut_rep;
oldState.new_level_str = new_level_str;
oldState.j = j + 1;
}
console.log("Time out, saved old satate and break execution.. " + i + " times breaked\nLevel: " + i);
break TimeOut;
}
}
new_level_str += conut_rep.toString() + check_no.toString();
arr_sec[i+1] = new_level_str;
}
return printStringContent(arr_sec[n-1]);
}
setTimeout(function(){return getSequence(n, oldState);}, pauseTime);
}
var n = 60; // level we want to find
var breakTime = 100; // this is the time-limit that will an operation last before being paused. It should vary with browser and environment type
var pauseTime = 50; // this is the time that current operation will stop before continues to work again.
getSequence(n);
function printStringContent(str, oldState){
oldState = oldState || {};
var beginTime = new Date().getTime();
var str_len = oldState.str_len || str.length;
TimeOut:{
for (var i = oldState.i || 0; i < str_len; i += 5000){
console.log(str.slice(i, i + 5000));
if ( new Date().getTime() - beginTime > breakTime){
oldState.i = i + 5000;
oldState.str_len = str_len;
break TimeOut;
}
}
return;
}
setTimeout(function(){return printStringContent(str, oldState);}, pauseTime);
}