class Solution {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
Map<Long, Integer> map = new HashMap<>();
map.put(getDist(p1, p2), map.getOrDefault(getDist(p1, p2), 0) + 1);
map.put(getDist(p1, p3), map.getOrDefault(getDist(p1, p3), 0) + 1);
map.put(getDist(p1, p4), map.getOrDefault(getDist(p1, p4), 0) + 1);
map.put(getDist(p2, p3), map.getOrDefault(getDist(p2, p3), 0) + 1);
map.put(getDist(p2, p4), map.getOrDefault(getDist(p2, p4), 0) + 1);
map.put(getDist(p3, p4), map.getOrDefault(getDist(p3, p4), 0) + 1);
if (map.size() != 2) return false;
long max = 0;
for (long key : map.keySet()) {
max = Math.max(max, key);
}
return map.get(max) == 2;
}
private long getDist(int[] p1, int[] p2) {
return (long) Math.pow((p1[0] - p2[0]), 2) + (long) Math.pow((p1[1] - p2[1]), 2);
}
}
// calculate 6 edges, and inspect them. square should have 2 max length, 4 edge length