Выигрывание покерных рук с Deuces Wild - PullRequest
4 голосов
/ 09 сентября 2008

Я ищу код или описание алгоритма для определения счета покерной руки, когда двойки являются дикими. Мне нужен код, который не обременен лицензионным сбором, лицензией GPL, патентами и т. Д.

Я знаю несколько способов подойти к этому, но я бы предпочел не писать код, если он уже где-то доступен. Поэтому я был бы признателен, если бы ответы ограничивались ссылками на действующий рабочий код или подробными алгоритмическими описаниями.

(Я никого не прошу «сделать за меня домашнее задание». Я сам могу написать код, поэтому псевдокод и предложения по реализации не нужны. Я просто не хочу тратить время на решение уже решенной проблемы .)

Ответы [ 5 ]

4 голосов
/ 09 сентября 2008

Без написания всего кода начало будет выглядеть примерно так:

/*
* 2.1 Straight flush
* 2.2 Four of a kind
* 2.3 Full house
* 2.4 Flush
* 2.5 Straight
* 2.6 Three of a kind
* 2.7 Two pair
* 2.8 One pair
* 2.9 High card
*/
// Note, the vector cards is sorted low to high. All cards have a numeric value 2-13 and a suit 0-3
int noDuces(Cards[] cards) {
    int duces = 0;
    int cursor = cards.length;
    while(cards[cursor--].value == 2) duces++;
    return duces;
}

bool isFlush(Cards [] cards) {
   int duces = noDuces(cards);
   int firstColour = cards[cards.length].colour;
   for (int i = cards.length -1; i > duces; i--) {
       if (cards[i].colour != firstColour)
           return false;
   }
   return true;
}

bool isStraight(Cards[] cards) {
    int duces = noDuces(cards);
    int usedDuces = 0;
    // TODO Handle A - 5 straight. 
   card prevCard = cards[cards.length];
    for (int i = cards.length -1; i > duces; i--) {
       if ((prevCard.value + 1) != cards[i].value) {
           if (usedDuces >= duces) {
               return false;
           }
           usedDuces++;
       }
       prevCard = cards[i];
   }
    return true;
}
4 голосов
/ 09 сентября 2008

Я думаю, потому что вы сказали, что конкретно не хотите идей, вы просто хотите работающее решение.

Я думаю, что общая мысль состоит в том, что лучше делать это наиболее эффективным, привлекательным способом, а не так, как это делал какой-то парень до того, как это сработало. Я думаю, что одним из преимуществ этого сообщества является объединение программистов, которые могут обмениваться идеями и помогать вам найти лучший способ что-то сделать.

Я думаю, что большинство из нас эмоционально относятся к нашей базе кодов и задаются вопросом, какой будет мотивация кого-то, что бросило бы в их дела просто что-то старое.

Это для домашнего задания? Или, возможно, для кого-то еще?

2 голосов
/ 13 февраля 2010

Полный исходный код для игры в покер Texas Hold'em можно найти здесь:

http://www.advancedmcode.org/poker-predictor.html

Он построен для matlab, идентификатор GUI m-кодирован, но вычислительный движок - c ++.

Это позволяет рассчитать шансы и вероятности. На моем ноутбуке с частотой 2,4 ГГц он может рассчитывать на 100 000 игр для 10 игроков за 0,3 секунды.

Точный компьютер реального времени :-)

2 голосов
/ 13 декабря 2009

http://www.codingthewheel.com/archives/poker-hand-evaluator-roundup

Страница о покерных библиотеках eval. - список библиотек / алгоритмов

0 голосов
/ 05 мая 2012

Хотя «непосредственное» вычисление и сравнение рук кажется привлекательным упражнением, практически нет приложений (для компьютеров с разумным количеством оперативной памяти / диска), для которых они были бы практичны. Если вы сравниваете не одну «кучку» раздач, то при таком подходе вы снова и снова вычисляете одни и те же значения раздач.

Поскольку исчерпывающее предварительное вычисление всех покерных комбинаций и их значений выполнимо, сделать это один раз для создания справочных таблиц - ПО-ПРОСТО - самое быстрое и наиболее практичное решение. Различия между алгоритмами такого типа связаны, в первую очередь, с приемами управления размером таблицы. Основной ответ содержит ссылку на широкий спектр алгоритмов, , повторяемых здесь для удобства, , начиная от наивных вычислений с разбивкой битов и заканчивая различными поисками. Это интересное и интересное чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...