Untitled
unknown
typescript
a year ago
1.6 kB
8
Indexable
const stations = [
[0, 0, 10],
[20, 20, 5],
[10, 0, 12],
];
const points = [
[0, 0],
[100, 100],
[15, 10],
[18, 18],
];
const calculatePower = ({
reach,
distance,
}: {
reach: number;
distance: number;
}) => {
if (distance > reach) return 0;
return (reach - distance) ** 2;
};
const calculateDistance = ({
x1,
y1,
x2,
y2,
}: {
x1: number;
y1: number;
x2: number;
y2: number;
}) => {
const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
return distance;
};
const main = (x: number, y: number) => {
const stationsPower: Record<number, number> = {};
stations.forEach((station, index) => {
const distance = calculateDistance({
x1: station[0],
y1: station[1],
x2: x,
y2: y,
});
const power = calculatePower({
reach: station[2],
distance,
});
stationsPower[index] = power;
});
const powers = Object.values(stationsPower);
powers.sort((a, b) => b - a);
const maximumPower = powers[0];
const stationWithMaximumPower = Object.entries(stationsPower).reduce(
(acc: number[], cur) => {
if (cur[1] === maximumPower) {
return stations[cur[0] as unknown as number];
}
return acc;
},
[]
);
if (maximumPower === 0) {
return `No link station within reach for point ${x}, ${y}`;
}
return `Best link station for point ${x}, ${y} is ${stationWithMaximumPower[0]}, ${stationWithMaximumPower[1]} with power ${maximumPower}`;
};
points.forEach((point) => {
console.log(main(point[0], point[1]));
});
Editor is loading...
Leave a Comment