• + 0 comments
    public static int formingMagicSquare(List<List<Integer>> s) {
            int[][][] magicSquares = {
                    {{8, 1, 6}, {3, 5, 7}, {4, 9, 2}},
                    {{6, 1, 8}, {7, 5, 3}, {2, 9, 4}},
                    {{4, 9, 2}, {3, 5, 7}, {8, 1, 6}},
                    {{2, 9, 4}, {7, 5, 3}, {6, 1, 8}},
                    {{8, 3, 4}, {1, 5, 9}, {6, 7, 2}},
                    {{4, 3, 8}, {9, 5, 1}, {2, 7, 6}},
                    {{6, 7, 2}, {1, 5, 9}, {8, 3, 4}},
                    {{2, 7, 6}, {9, 5, 1}, {4, 3, 8}}
            };
    
            int minCost = Integer.MAX_VALUE;
    
            for (int[][] magicSquare : magicSquares) {
                int cost = getMinCost(s, magicSquare);
                minCost = Math.min(minCost, cost);
            }
    
            return minCost;
        }
    
    
    public static int getMinCost(List<List<Integer>> s, int[][] magicSquare) {
            int cost = 0;
    
            for (int row = 0; row < magicSquare.length; row++) {
                for (int col = 0; col < magicSquare[0].length; col++) {
                    cost += Math.abs(magicSquare[row][col] - s.get(row).get(col));
    }
    }
            return cost;
        }