Vector<Integer> getSortedPentagonNeighbors(int cellId) {
        Vector<Integer> neighbors = getNeighbors(cellId);
        Vector<Integer> result   = new Vector<>(6);
        Util.initialize(result, -1);
        Vector<Integer> northRow = new Vector<>(2);
        Vector<Integer> sameRow  = new Vector<>(2);
        Vector<Integer> southRow = new Vector<>(2);
        northRow.trimToSize();
        southRow.trimToSize();
        int row = getRow(cellId);
        for (int neighbor : neighbors) {
            if (getRow(neighbor) > row) {
                northRow.add(neighbor);
            } else if (getRow(neighbor) == row) {
                sameRow.add(neighbor);
            } else {
                southRow.add(neighbor);
            }
        }
        if (northRow.size() == 1) {
            result.set(1, northRow.get(0));
            result.set(0, northRow.get(0));
            Vector<Integer> southwestToSoutheast = sortAdjacentCellsInSameRow(southRow);
            result.set(4, southwestToSoutheast.get(0));
            result.set(3, southwestToSoutheast.get(1));
        } else {
            result.set(3, southRow.get(0));
            result.set(4, southRow.get(0));
            Vector<Integer> northwestToNortheast = sortAdjacentCellsInSameRow(northRow);
            result.set(0, northwestToNortheast.get(0));
            result.set(1, northwestToNortheast.get(1));
        }
        Vector<Integer> westToEast = sortAdjacentCellsInSameRow(sameRow.get(0), cellId, sameRow.get(1));
        result.set(5, westToEast.get(0));
        result.set(2, westToEast.get(2));
        return result;
    }