def top3_reduced(votes):
    """
    Description:
        Top 3 alternatives 16 moment conditions values calculation
    Parameters:
        votes: ordinal preference data (numpy ndarray of integers)
    """
    res = np.zeros(16)
    for vote in votes:
        # the top ranked alternative is in vote[0][0], second in vote[1][0]
        if vote[0][0] == 0: # i.e. the first alt is ranked first
            res[0] += 1
            if vote[1][0] == 2:
                res[4] += 1
            elif vote[1][0] == 3:
                res[5] += 1
            elif vote[1][0] == 1 and vote[2][0] == 2:
                res[14] += 1
        elif vote[0][0] == 1:
            res[1] += 1
            if vote[1][0] == 0:
                res[6] += 1
            elif vote[1][0] == 3:
                res[7] += 1
            elif vote[1][0] == 2 and vote[2][0] == 3:
                res[15] += 1
        elif vote[0][0] == 2:
            res[2] += 1
            if vote[1][0] == 0:
                res[8] += 1
            elif vote[1][0] == 1:
                res[9] += 1
            elif vote[1][0] == 3 and vote[2][0] == 0:
                res[12] += 1
        elif vote[0][0] == 3:
            res[3] += 1
            if vote[1][0] == 1:
                res[10] += 1
            elif vote[1][0] == 2:
                res[11] += 1
            elif vote[1][0] == 0 and vote[2][0] == 1:
                res[13] += 1
    res /= len(votes)
    return res