-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0816-ambiguous-coordinates.js
More file actions
59 lines (48 loc) · 1.64 KB
/
0816-ambiguous-coordinates.js
File metadata and controls
59 lines (48 loc) · 1.64 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
/**
* Ambiguous Coordinates
* Time Complexity: O(N^4)
* Space Complexity: O(N^3)
*/
var ambiguousCoordinates = function (s) {
const numericContent = s.slice(1, s.length - 1);
const coordinatePossibilities = [];
for (let splitIndex = 1; splitIndex < numericContent.length; splitIndex++) {
const leftSegment = numericContent.substring(0, splitIndex);
const rightSegment = numericContent.substring(splitIndex);
const possibleLeftCoordinates = generateValidNumbers(leftSegment);
const possibleRightCoordinates = generateValidNumbers(rightSegment);
for (const singleLeftCoord of possibleLeftCoordinates) {
for (const singleRightCoord of possibleRightCoordinates) {
coordinatePossibilities.push(
`(${singleLeftCoord}, ${singleRightCoord})`,
);
}
}
}
return coordinatePossibilities;
};
function generateValidNumbers(currentSegment) {
const generatedNumbers = [];
if (checkIntegerValidity(currentSegment)) {
generatedNumbers.push(currentSegment);
}
let decimalSpot = 1;
while (decimalSpot < currentSegment.length) {
const wholePart = currentSegment.substring(0, decimalSpot);
const fractionalPart = currentSegment.substring(decimalSpot);
if (
checkIntegerValidity(wholePart) &&
checkDecimalValidity(fractionalPart)
) {
generatedNumbers.push(`${wholePart}.${fractionalPart}`);
}
decimalSpot++;
}
return generatedNumbers;
}
function checkIntegerValidity(stringToCheck) {
return stringToCheck === "0" || stringToCheck[0] !== "0";
}
function checkDecimalValidity(stringToCheck) {
return stringToCheck[stringToCheck.length - 1] !== "0";
}