-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmanhattan-two.js
57 lines (42 loc) · 1.54 KB
/
manhattan-two.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
const findManhattanDistance = (xOne, yOne, xTwo, yTwo) => {
return Math.abs(xOne - xTwo) + Math.abs(yOne - yTwo);
}
const findMaxCoordinate = (coordinateSet, coordinate) => {
let coordinates = [];
for (let i = 0; i < coordinateSet.length; i++) {
let coordinatePair = coordinateSet[i];
let matchGroups = coordinatePair.match(/(\d+), (\d+)/);
if (coordinate === 'x') {
let xCoordinate = matchGroups[1];
coordinates.push(parseInt(xCoordinate));
} else {
let yCoordinate = matchGroups[2];
coordinates.push(parseInt(yCoordinate));
}
};
return coordinates.sort((a, b) => b - a)[0];
}
const findComprehensiveArea = (input, threshold) => {
let coordinates = input.split('\n').map(x => x.trim());
let maxXCoordinate = findMaxCoordinate(coordinates, 'x');
let maxYCoordinate = findMaxCoordinate(coordinates, 'y');
let areas = [];
for (let y = 0; y <= maxYCoordinate; y++) {
for (let x = 0; x <= maxXCoordinate; x++) {
let mappedAreas = [];
for (let c = 0; c < coordinates.length; c++) {
let coordinatePair = coordinates[c];
let matchGroups = coordinatePair.match(/(\d+), (\d+)/);
mappedAreas.push({ coordinate: coordinates[c], distance: findManhattanDistance(x, y, matchGroups[1], matchGroups[2])});
}
let totalDistance = mappedAreas.reduce((a, area) => {
return a + area.distance;
}, 0);
if (totalDistance < threshold) {
areas.push(`${x}, ${y}`);
}
}
}
return areas.length;
}
module.exports = findComprehensiveArea;