【計算 1】マンハッタン距離 (paizaランク C 相当)
解答例
1〜N(>3) 番の番号が振られた地点のユークリッド距離とマンハッタン距離を計算し、配列に格納する。
配列を近い順に並べ替える。
近い3地点を出力する。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
const [P_x, P_y] = lines[0].split(" ").map(Number);
const N = Number(lines[1]);
const euclid = [];//ユークリッド距離
const manhattan = [];//マンハッタン距離
//距離を計算して配列に格納
for (let i = 1; i <= N; i++) {
const [x, y] = lines[i + 1].split(" ").map(Number);
//ユークリッド距離
const l_e = Math.sqrt((x - P_x) ** 2 + (y - P_y) ** 2);
euclid.push([l_e, i]);//[距離, 地点]で格納
//マンハッタン距離
const l_m = Math.abs(x - P_x) + Math.abs(y - P_y);
manhattan.push([l_m, i]);//[距離, 地点]で格納
}
//距離が近い順に並べ替え
euclid.sort((a, b) => a[0] - b[0]);
manhattan.sort((a, b) => a[0] - b[0]);
//距離が近い3地点を出力
euclid.slice(0, 3).forEach(v => {
console.log(v[1]);
});
manhattan.slice(0, 3).forEach(v => {
console.log(v[1]);
});