package com.interview.misc; class Cordinate{ int x; int y; } /** * Given four points in any order determine if they form a square * Test cases * Less than or more than 4 points in input * Points could be in any quadrants e.it neg and pos allowed */ public class FourPointsFormSquare { public boolean isSquare(Cordinate[] cordinates){ Cordinate startPoint = cordinates[0]; int a1 = distanceSquare(startPoint, cordinates[1]); int a2 = distanceSquare(startPoint, cordinates[2]); int a3 = distanceSquare(startPoint, cordinates[3]); if(a1 == a2){ //then 0,3 is diagonal return compare(cordinates[3],cordinates[1],cordinates[2],a1,a3); }else if(a1 == a3){ return compare(cordinates[2],cordinates[1],cordinates[3],a1,a2); }else if(a2 == a3){ return compare(cordinates[1],cordinates[2],cordinates[3],a2,a1); }else{ return false; } } private boolean compare(Cordinate startPoint, Cordinate point1, Cordinate point2,int len, int diag){ if(2*len != diag){ return false; } int a1 = distanceSquare(startPoint,point1); int a2 = distanceSquare(startPoint,point2); if(a1 != len || a2 != len){ return false; } return true; } private int distanceSquare(Cordinate c1, Cordinate c2){ return (int)(Math.pow(Math.abs(c1.x - c2.x) ,2) + Math.pow(Math.abs(c1.y-c2.y), 2)); } public static void main(String args[]){ FourPointsFormSquare fpf = new FourPointsFormSquare(); Cordinate c1 = new Cordinate(); c1.x = 2; c1.y = 2; Cordinate c2 = new Cordinate(); c2.x = 6; c2.y = 2; Cordinate c3 = new Cordinate(); c3.x = 2; c3.y = -2; Cordinate c4 = new Cordinate(); c4.x = 6; c4.y = -2; Cordinate[] c = new Cordinate[4]; c[0] = c1; c[1] = c2; c[2] = c3; c[3] = c4; System.out.println(fpf.isSquare(c)); } }