Valid Square

medium math geometry

Problem

Given 4 points, return whether they form a non-degenerate square.

Inputp1=[0,0] p2=[1,1] p3=[1,0] p4=[0,1]
OutputTrue
Four equal sides, two equal diagonals = 2·side².

def valid_square(p1, p2, p3, p4):
    def d2(a, b): return (a[0]-b[0])**2 + (a[1]-b[1])**2
    pts = [p1, p2, p3, p4]
    ds = sorted(d2(pts[i], pts[j]) for i in range(4) for j in range(i+1, 4))
    return ds[0] > 0 and ds[0] == ds[1] == ds[2] == ds[3] and ds[4] == ds[5] == 2*ds[0]
function validSquare(p1, p2, p3, p4) {
  const d2 = (a, b) => (a[0]-b[0])**2 + (a[1]-b[1])**2;
  const pts = [p1, p2, p3, p4];
  const ds = [];
  for (let i = 0; i < 4; i++) for (let j = i+1; j < 4; j++) ds.push(d2(pts[i], pts[j]));
  ds.sort((a, b) => a - b);
  return ds[0] > 0 && ds[0] === ds[3] && ds[4] === ds[5] && ds[4] === 2*ds[0];
}
boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
    int[][] p = {p1, p2, p3, p4};
    int[] d = new int[6]; int k = 0;
    for (int i = 0; i < 4; i++) for (int j = i+1; j < 4; j++) d[k++] = (p[i][0]-p[j][0])*(p[i][0]-p[j][0]) + (p[i][1]-p[j][1])*(p[i][1]-p[j][1]);
    Arrays.sort(d);
    return d[0] > 0 && d[0] == d[3] && d[4] == d[5] && d[4] == 2 * d[0];
}
bool validSquare(vector& p1, vector& p2, vector& p3, vector& p4) {
    vector> p = {p1, p2, p3, p4};
    vector d;
    for (int i = 0; i < 4; i++) for (int j = i+1; j < 4; j++) {
        int dx = p[i][0]-p[j][0], dy = p[i][1]-p[j][1]; d.push_back(dx*dx + dy*dy);
    }
    sort(d.begin(), d.end());
    return d[0] > 0 && d[0] == d[3] && d[4] == d[5] && d[4] == 2 * d[0];
}
Time: O(1) Space: O(1)