Просмотреть всю тему "Soft Speed Test (покер)" »»
Re: Soft Speed Test   ID:25026   ответ на 24894 Пн, 19 марта 2007 10:20 [#]
Шамсутдинов Форумы CasinoGames
Grey писал пт, 16 марта 2007 18:41
Какой может быть массив? При произвольном количестве и составе "мертвых" карт??? Для полной колоды, я понимаю, можно сделать.
Как же вы достигли такого быстродействия, если не использовали эту идею?
1. Считаем количества свободных карт по рангам - это числа 0..4.
2. Считаем количества среди этих чисел, не включая ранга карты дилера отдельно 0, отдельно 1, 2 и 3 (остальные - 4). Пусть эти количества -r0,r1,r2,r3. r0+r1+r2+r3<=12 (нет ранга карты дилера). Таких наборов (r0,r1,r2,r3) всего С(12+4,4)=1820.
3. Делаем массив перехода от числа 0..13^4-1 к числу 0..1820-1. Кстати, можно не хранить r0,r1,r2,r3, а сразу вычислять r0+r1*13+r2*13^2+r3*13^3, все время добавляя 13^s. Но в моем новом коде этого пока нет. Такая же сумма, но не по всем рангам, а только до третьей карты в паре понадобится при подсчете количества меньших пар у дилера (я сейчас этим занимаюсь).
4. Для каждого набора (r0,r1,r2,r3) однозначно определно количество комбинаций 2, 2+2, 3, 3+2, 4, а также их общее количество ("парок"). Получаем для каждого числа 0..1820-1 массив структур, составленных из этих чисел. Кроме того, при получении количества пар у дилера, младших пары игрока по старшинству пары, потребуется массив [1820][5], где второй индекс указывает на количество свободных карт в ранге, для которого узнается количество пар этого ранга у дилера. Первый индекс - тот же, что и исходный (для определения "парок").

Для оптимизации я все циклы развернул в полный код без циклов. Для флешей сделал массив [13][2^12], где первый индекс - ранг карты дилера (КД), а второй - занятость карт масти открытой КД, исключая ранга КД в двоичной системе счисления.

Компилятор Microsoft Visual Studio (MVS) может оказаться быстрее компилятора Builder6, который я использую, поэтому можно будет вычислительную часть теста сделать как dll на MVS. Также можно будет в основной моей программе импортировать функцию подсчета комбинаций у дилера. Таким образом, можно будет разным оболочкам присоединять вычислительный модуль как dll. Что можно использовать для отладки, сравнения результатов и т.п.