# Untitled

unknown
typescript
20 days ago
1.6 kB
1
Indexable
Never
```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]));
});
```