Skip to content

Commit b2dab22

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents c5dbcf2 + 7656031 commit b2dab22

File tree

1 file changed

+137
-1
lines changed

1 file changed

+137
-1
lines changed

PortJob/UnionFind/js/QuickFind.ts

+137-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,137 @@
1-
//hallo
1+
/**
2+
* File created by Philip Hoang 06.2.18
3+
* based on QuickFind.Java
4+
*/
5+
///<reference path="controller.ts"/>
6+
7+
const DELAY : number = 100;
8+
let arr : number[];
9+
let pause : boolean;
10+
let name : string = "Quick Find";
11+
12+
// noninspection JSAnnotator
13+
function constructor(size : number) {
14+
arr = new Array(size);
15+
for (let i = 0; i < size; i++) {
16+
arr[i] = i;
17+
}
18+
19+
pause = false;
20+
}
21+
22+
function union(aIndex : number, bIndex : number) {
23+
let aRoot : number = arr[aIndex];
24+
let bRoot : number = arr[bIndex];
25+
26+
if (aRoot == bRoot) {
27+
delay(getDelayTime());
28+
control.setSelectedIndex(aIndex, false);
29+
control.setSelectedIndex(bIndex, false);
30+
return;
31+
}
32+
33+
control.saveState(arr);
34+
35+
for (let i = 0; i < arr.length; i++) {
36+
37+
while (pause) {
38+
delay(getDelayTime()*0.2);
39+
}
40+
41+
control.setArrow(i);
42+
delay(getDelayTime()*0.5)
43+
if (arr[i] == aRoot) {
44+
control.setValueAtIndex(i, bRoot);
45+
control.connectNodes(i, bRoot);
46+
arr[i] = bRoot;
47+
delay(getDelayTime()*0.5)
48+
}
49+
}
50+
51+
control.setArrow(-1);
52+
control.setSelectedIndex(bIndex, false);
53+
control.setSelectedIndex(aIndex, false);
54+
}
55+
56+
function connected(aIndex : number, bIndex : number) {
57+
let connected : boolean = simpleFind(aIndex, "orange") == simpleFind(bIndex, "orange");
58+
59+
if (connected) {
60+
control.highlightNode(arr[aIndex], "green");
61+
control.highlightNode(arr[bIndex], "green");
62+
control.checkMark(aIndex, bIndex, true);
63+
} else
64+
control.redCross(aIndex, bIndex, true);
65+
66+
delay(getDelayTime()*2);
67+
removeHighlighFromRoot(aIndex);
68+
removeHighlighFromRoot(bIndex);
69+
control.checkMark(aIndex, bIndex, false);
70+
control.redCross(aIndex, bIndex, false);
71+
72+
return connected
73+
}
74+
75+
function getName() {
76+
return name;
77+
}
78+
79+
function removeHighlighFromRoot(pIndex : number) {
80+
control.removeHighlight(arr[pIndex]);
81+
}
82+
83+
function delay(delayTime : number) {
84+
let start = new Date().getTime();
85+
for (let i = 0; i < 1e7; i++) {
86+
if ((new Date().getTime() - start) > delayTime)
87+
break;
88+
}
89+
}
90+
91+
function find(pIndex : number) {
92+
let root = simpleFind(pIndex, "green");
93+
94+
delay(getDelayTime());
95+
control.removeHighlight(root);
96+
control.setSelectedIndex(pIndex, false);
97+
98+
return root;
99+
}
100+
101+
function simpleFind(pIndex : number, color : string) {
102+
let root : number = arr[pIndex];
103+
104+
if (pIndex != root) {
105+
control.highlightNode(pIndex, "orange");
106+
delay(getDelayTime());
107+
control.removeHighlight(pIndex);
108+
}
109+
110+
control.highlightNode(root, color);
111+
112+
return root;
113+
}
114+
115+
function getArray() {
116+
return arr;
117+
}
118+
119+
function setArray(array : number[]) {
120+
arr = array;
121+
}
122+
123+
function isPause() {
124+
return pause;
125+
}
126+
127+
function invertPause() {
128+
pause = !pause;
129+
}
130+
131+
function connectedNoGUIUpdate(a : number, b : number) {
132+
return arr[a] == arr[b];
133+
}
134+
135+
function getDelayTime() {
136+
return DELAY_TIME + control.getSpeed()*50;
137+
}

0 commit comments

Comments
 (0)