-
Notifications
You must be signed in to change notification settings - Fork 129
/
Copy pathAngryFrogs.ts
67 lines (50 loc) · 2.08 KB
/
AngryFrogs.ts
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
export default function maxDistance(lilypadHeights: number[]) {
Solution.initializeLilypadForest(lilypadHeights);
return Solution.findMaxDistance();
}
class Solution {
private static lilypadForest: number[];
static initializeLilypadForest(lilypadHeights: number[]) {
Solution.lilypadForest = lilypadHeights;
}
static findMaxDistance(): number {
let maxDistance = 0;
let distanceTraveledLeft, distanceTraveledRight, distanceTraveled;
for(let i=0; i < Solution.lilypadForest.length; ++i) {
// console.log("Lilypad", i);
distanceTraveledRight = Solution._travelRightFrom(i);
distanceTraveledLeft = Solution._travelLeftFrom(i);
distanceTraveled = distanceTraveledLeft + distanceTraveledRight;
// console.log(" Distance Traveled:", distanceTraveled)
if(distanceTraveled > maxDistance)
maxDistance = distanceTraveled;
// console.log(" Max Distance:", maxDistance)
}
return maxDistance;
}
private static _travelRightFrom(index: number): number {
for(let i=index; ; ++i) {
if(i+1 == Solution.lilypadForest.length ||
Solution.lilypadForest[i+1] < Solution.lilypadForest[i]) {
// console.log(" Traveled Right: ", i-index);
return i-index;
}
}
}
private static _travelLeftFrom(index: number): number {
for(let i=index; ; --i) {
if(i-1 < 0 || Solution.lilypadForest[i-1] < Solution.lilypadForest[i]) {
// console.log(" Traveled Left: ", index-i);
return index-i;
}
}
}
}
//---------------------------------------------------------------------
// ---------- MAIN PROGRAM ----------
//---------------------------------------------------------------------
if (import.meta.main) {
let forest1 = [5,7,3,1,2,3,4,6,2];
console.log("Forest 1: ", maxDistance(forest1));
// RUN: deno run Playground/Puzzles/AngryFrogs.ts
}