касательно c00l0ne...я так понял, программки у него нет(поправьте, если ошибаюсь). Посмотрел его стрим, буквально каждая раздача - гадание на кофейной гуще.
пока что удалось посчитать вероятность собрать фантазию на QQ
или КК. Но, увы, пока только при 3ёх свободных местах в топе. Продолжаю отладку...
double abs_fantasy( int queens_top, int queens_left, int kings_top, int kings_left, int N, int M)
{
if(queens_top == 2 || kings_top == 2)
return 1.0;
if(N <= 0)
return 0.0;
if(queens_left == 0 && kings_left == 0)
return 0.0;
//bool v;
//ничего не пришло
return (1.0 - (queens_left+kings_left)/(double)M)*abs_fantasy(queens_top,queens_left,kings_top,kings_left,N-1,M-1)
//пришёл король
+kings_left /(double)M *abs_fantasy(queens_top,queens_left,kings_top+1,kings_left-1,N-1,M-1)
//пришла дама
+queens_left /(double)M *abs_fantasy(queens_top+1,queens_left-1,kings_top,kings_left,N-1,M-1);
}
При двух подьёмах из 15 карт с 3мя дамами и 3мя королями вероятность = 0,6056, что близко к Х2 от фантазии только на 3ёх королях.
Поигрываю в китайский, но всегда интересовало точное решение. В связи с этим запустил C++ Builder и решил немного поиграться.
Так как не запускал его достаточно давно, пропустил переход С++ на С++ 11 (и тем более 14). Но, делать нечего, пока поработаем на старом.
Конкретно эту тему решил завести для того, чтобы отслеживать, что получилось, а что нет. Так как выбранную логику по мере обкатки приходится переписывать чуть ли не заново, здесь я буду вести учёт своим успехам\неудачам(под новую логику приходится переписывать весь код и один раз я уже забыл, как работает предыдущий )
Итак, версия 1.0
- Колода и рука представляют собой символьные строки. (Мастей нет)
- любая линия(5ти или 3ех карточный набор) представляет из себя какую-либо комбинацию(2 пары, старшая карта и т.д.)
- Ход осуществляется как выборка 3ёх произвольных карт из колоды и нахождения совокупности всех возможных раскладов по линиям.
Ну, тут какие достижения. 2 подьёма прожка считает за секунды, 3 подьёма уже за около 4 минут.
Ясно, что посчитать на ней стартовый расклад не удастся(да там и памяти не хватит)
Версия 2.0 (в работе)
- для комбинаций введён ранг(старшинство при сравнении одинаковых по значению). Мастей по-прежнему нет
- для стартового набора введено понятие потенциала(для 2ух линий это все возможные руки, где комбинация внизу существует и старше комбинации выше).
- также на каждом подьёме считается вероятность собрать фантазию.
- на каком-либо подьёме придётся сделать выбор: сделать упор на сбор фантазии ИЛИ сосредоточиться на "сборе" очков. В конечном итоге это будет тоже самое ЕВ, но можно будет сделать отсечку вручную
Планируется
- для класса "рука" ввести функцию (метод) проверки "жива ли рука"
- Жёстко связать колоду и руку игрока(руки игроков). Сейчас они связаны вручную.
Ну, и наконец пример. Как логика на стадии проектирования даёт сбой. Я уже писал, что мастей пока нет. Но нет также и истории развития партии. Как планировалось определить лучшее разложение, ну скажем, 3его подьёма? Планировалось найти все варианты завершения руки, вернуться обратно и в отсортированном массиве найти 2 карты и 2 места, куда их следует положить. Однако, так как истории нету, то возможность отличить, на 2ом подьёме положена 7ка или на 5ом нет(ведь это могла быть 7ка, которую мы положили, а может быть вновь пришедшая, если мы в рассматриваемом подьёме её сбросили). Соответственно, и возвращаться некуда.
Буду благодарен за вашу подсказку, как решить эту проблему.
Пока на ум приходит только каждую руку рассматривать как {разложение стартового набора} +..+{разложение i-ого набора}
Вот только не придётся ли в итоге всё равно перейти к просто руке, неважно каким именно путём она была собрана.
Да, и пример.
Для данной руки я считал расклад с наибольшим ЕВ
пришли сброшены
ясно, что можно положить либо туз вниз для стрита, либо надеяться собрать 2пары+ на
ЕВ туз вниз получилось 1.57 очка
ЕВ тув в топ - 0.64
Если кто подтвердит цифры, буду премного благодарен.