题解 | #魔法阵#

魔法阵

http://www.nowcoder.com/practice/04c873db99a34a0c85d476be82533b98

  • 要判断四个点是否构成正方形,可以转化为任意三个点是否构成等腰直角三角形
  • 判断等腰直角三角形的思路如下:
    • 算出三个点之间的两两直线距离的平方,也即
    • 然后判断较小的两个值是否相等(等腰),以及较小的两个值之和是否等于第三个值(直角)。
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let T = undefined;
let point1 = Array(2), point2 = Array(2), point3 = Array(2), point4 = Array(2);
rl.on('line', function (line) {
    if(T === undefined) {
        T = parseInt(line);
        point1[0] = undefined;
        point1[1] = undefined;
        point2[0] = undefined;
        point2[1] = undefined;
        point3[0] = undefined;
        point3[1] = undefined;
        point4[0] = undefined;
        point4[1] = undefined;
        return;
    }
    const tokens = line.split('');
    if(point1[0] === undefined) {
        point1[0] = parseInt(line[0]);
        point2[0] = parseInt(line[1]);
        point3[0] = parseInt(line[2]);
        point4[0] = parseInt(line[3]);
        return;
    }
    point1[1] = parseInt(line[0]);
    point2[1] = parseInt(line[1]);
    point3[1] = parseInt(line[2]);
    point4[1] = parseInt(line[3]);
    if(!judge(point1, point2, point3)) console.log("No");
    else if(!judge(point1, point2, point4)) console.log("No");
    else if(!judge(point1, point3, point4)) console.log("No");
    else if(!judge(point2, point3, point4)) console.log("No");
    else console.log("Yes");
    if(--T === 0) rl.close()
    else point1[0] = undefined;
});

// 判断三个点是否构成等腰直角三角形
let distance = [0, 0, 0];
function judge(point_1, point_2, point_3) {
    distance[0] = Math.pow(point_1[0] - point_2[0], 2) + Math.pow(point_1[1] - point_2[1], 2);
    distance[1] = Math.pow(point_1[0] - point_3[0], 2) + Math.pow(point_1[1] - point_3[1], 2);
    distance[2] = Math.pow(point_2[0] - point_3[0], 2) + Math.pow(point_2[1] - point_3[1], 2);
    distance.sort((a, b) => a - b);
    if( distance[0] === distance[1] && distance[0] + distance[1] === distance[2]) {
        return true;
    } else return false;
}


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务