int main() {
    long max = 0;
    for(int i = 1; i < 50000; i++) {
        long tmp = consec(i);
        max = max > tmp ? max : tmp;
    }
    std::cout << max << std::endl;
    return 0;
}
Ejemplo n.º 2
0
MatrixXd CGppe::deriv2_log_likelihood_CGppe_fast(double sigma, TypePair all_pairs, VectorXd idx_global_1, VectorXd idx_global_2, int M, int N)
{
    VectorXd deriv_loglike, z, cdf_val, pdf_val, val, ratio, all_diag_idx, ind, ind_trans;

    M = all_pairs.rows();

    int n = M * N;

    VectorXd consec(n);

    MatrixXd Deriv2 = MatrixXd::Zero(n, n);

    for (int i = 0;i < n;i++)
    {
        consec(i) = i;
    }
    all_diag_idx = sub2ind(n, n, consec, consec);

    z = (GetVec(f, idx_global_1) - GetVec(f, idx_global_2)) / sigma;

    cdf_val = normcdf(z);

    pdf_val = normpdf(z);

    ratio = pdf_val.array() / cdf_val.array();

    val = -(1. / pow(sigma, 2)) * (ratio.array() * (z + ratio).array());

    ind = sub2ind(n, n, idx_global_1, idx_global_2);

    Deriv2 = SetMatGenIdx(Deriv2, ind, -val);

    ind_trans = sub2ind(n, n, idx_global_2, idx_global_1);

    Deriv2 = SetMatGenIdx(Deriv2, ind_trans, -val);

    Deriv2 = SetMatGenIdx(Deriv2, all_diag_idx, GetMatGenIdx(Deriv2, all_diag_idx) + Get_Cumulative_Val(idx_global_1, val, n));

    Deriv2 = SetMatGenIdx(Deriv2, all_diag_idx, GetMatGenIdx(Deriv2, all_diag_idx) + Get_Cumulative_Val(idx_global_2, val, n));

    return Deriv2;
}
Ejemplo n.º 3
0
// result renvoie un int significatif de la combinaison de 7 cartes
// par exemple 9001 est une quinte flush à l'as, ou 3003 une double paire au 3.
int Worker::result(QList<int> list, QList<int> comp, int nComp)
{
    nbHearts = 0;
    nbSpades = 0;
    nbClubs = 0;
    nbDiamonds = 0;

    listing->clear();
    for (int i = 0; i < 14; ++i)
        listing->append(0);
    int res;
    for(QList<int>::iterator it = list.begin(); it != list.end(); ++it)
    {
        if (*it / 100 == 3)
            nbHearts++;
        else if (*it / 100 == 2)
            nbDiamonds++;
        else if (*it / 100 == 1)
            nbClubs++;
        else if (*it / 100 == 4)
            nbSpades++;

        (*listing)[*it % 100] += 1;
    }

    if (nbHearts >= 5)
        colour = 300;
    else if (nbSpades >= 5)
        colour = 400;
    else if (nbDiamonds >= 5)
        colour = 200;
    else if (nbClubs >= 5)
        colour = 100;
    else
        colour = 0;

    straightBegin = consec();

    // Quinte flush
    if (((straightBegin != 0 && colour != 0) && ((res = StraightFlush(list, straightBegin, colour)) != 0)) || (nComp > 9000))
    {
        if (res > nComp || (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else
            return 0;
    }
    // Carré
    if ((res = Poker()) > 0 || (nComp > 8000))
    {
        if (res > nComp || (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else if (res == nComp || (res % 1000 == 1 && nComp % 1000 == 14))
        {
            // Gestion des kickers
            if (PokerKicker(list, comp, res) == 1)
                return res;
            else
                return 0;
        }
        else
            return 0;
    }
    // Full
    else if ((res = Full()) > 0 || (nComp > 7000))
    {
        if (res > nComp || (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else if (res == nComp || (res % 1000 == 1 && nComp % 1000 == 14))
        {
            // Gestion des kickers
            if (FullKicker(comp, res) == 1)
                return res;
            else
                return 0;
        }
        else
            return 0;
    }
    // couleur
    else if (colour != 0 || (nComp > 6000))
    {
        if (list.contains(colour + 1) == true)
            res = 6001;
        else
        {
            for (int i = 2; i <= 13; ++i)
            {
                if (list.contains(colour + i) == true)
                    res = i + 6000;
            }
        }

        if (res > nComp || (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else if (res == nComp || (res % 1000 == 1 && nComp % 1000 == 14))
        {
            // Gestion des kickers
            if (FlushKicker(list, colour, comp, res) == 1)
                return res;
            else
                return 0;
        }
        else
            return 0;
    }
    // suite
    else if ((res = straightBegin + 5000) != 5000 || (nComp > 5000))
    {
        if (res > nComp || (res == 5001 && res != nComp - 13))
            return res;
        else
            return 0;
    }
    // brelan
    else if ((res = Threeofakind()) > 0 || (nComp > 4000))
    {
        if (res > nComp|| (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else if (res == nComp || (res % 1000 == 1 && nComp % 1000 == 14))
        {
            // Gestion des kickers
            if (ThreeofakindKicker(list, comp, res) == 1)
                return res;
            else
                return 0;
        }
        else
            return 0;
    }
    // double paire
    else if ((res = Twopairs()) > 0 || (nComp > 3000))
    {
        if (res > nComp|| (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else if (res == nComp || (res % 1000 == 1 && nComp % 1000 == 14))
        {
            // Gestion des kickers
            if (TwopairsKicker(list, comp, res) == 1)
                return res;
            else
                return 0;
        }
        else
            return 0;
    }
    // paire
    else if ((res = Pair()) > 0 || (nComp > 2000))
    {
        if (res > nComp|| (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else if (res == nComp || (res % 1000 == 1 && nComp % 1000 == 14))
        {
            // Gestion des kickers
            if (PairsKicker(list, comp, res) == 1)
                return res;
            else
                return 0;
        }
        else
            return 0;
    }
    // carte haute
    else
    {
        if (listing->value(1) > 0)
            res = 1001;
        else
        {
            for (int i = 13; (listing->value(i) == 0); --i)
                res = 1000 + i;
        }

        if (res > nComp || (res % 1000 == 1 && nComp % 1000 != 14))
            return res;
        else if (res == nComp || (res % 1000 == 1 && nComp % 1000 == 14))
        {
            // Gestion des kickers
            if (HighcardKicker(list, comp) == 1)
                return res;
            else
                return 0;
        }
        else
            return 0;
    }
}