Цитата (Jak @ 4.6.2019)
Все эти ссылки при перестановке (c1,c2,c3,c4,c5) приведут в одно место.
Тут ошибочка. Они не ПРИВЕДУТ в одно место, а ответ будет одним и тем же.
Попробую объяснить устройство массива.
В нашем случае массив имеет параметры (x=52 - кол-во карт в колоде, y=5 - кол-во карт в руке).
Возьмем массив x=9, y=2. Карт в колоде всего 9 и карт всего 2. Так проще, потом по аналогии поймешь.
Карты в колоде отсортированы и имеют индексы от 1 до 9. С нуля нельзя, нужно чтобы первая карта давала смещение, хотя бы 1.
массив [
0,1,2,3,4,5,6,7,8,9,10,...] - красным выделена колода уровня 0. Назовем ее К0.
с номера 10 (х+1) начинаются колоды уровня 1, их будет 9 штук по количеству карт в колоде. К1,К2,...,К9. Место К1 в массиве сразу за К0, начало 10, конец 19.
т.е. [
0,1,2,...,9, (K0) 10,11,12,...,18,19 (K1) 20,21,22,23,...,29 (K2) и т.д. до 90,91,92...99 (К9)].
Теперь заполним массив.
[
0,10,20,30,40,50,60,70,80,90,
0, 0,s12,s13,s14,s15,s16,s17,s18,s19,
0,s21, 0,s23,s24,s25,s26,....] - где s23-сила комбинации из карт 2 и 3. Комбинации, где есть одинаковые карты стоит 0. s11,s22,s33 и т.д.
При первом обращении к массиву мы получим адрес пой колоды в которой первая карта наша. Например первая карта 2. Получим 20 - адрес начала 2-й колоды. Там прибавим смещение - вторую карту, например 3, получим 23, там сидит s23, а это сила комбы (2,3). По адресу 32 будет сидеть сила комбы (3,2) - она такая-же и заранее посчитана.
Надеюсь понятно объяснил для 2 карт.
Теперь представь, что карт в комбе не 2, а 5. Тогда вместо 2-й колоды в посчитанными силами будет сидеть смещение на колоды третьего уровня и т.д. Вместо s12 - будет смещение на колоду третьего уровня в которой все комбы начинаются на (1 и 2). А там уже по смещению 1,2,3,4,5 ... будет сидеть сила комб s121,s122,s123,s124 и т.д.
Ну и 9 карт расширим до 52. Колоды будут кусками по 53 ячейки (52+1).
Самое главное заполнить правильно адреса/смещения в массиве между колодами, а потом посчитать один раз в начале все варианты комбинаций - и вуаля! И не важно стрит там или флеш.
Тут, правда, ускоренный приблизительный расчет, но и полный расчет показывает разные числа.
При полном переборе
1 сл (4 в середину, 8 вниз) - 76,84% / 1,442 ** 1,108 noscoop 1'504'096'776, cnt 1'957'374'720, 509sec
2 сл (3 в середину, 8 вниз) - 76,67% / 1,431 ** 1,097 noscoop 1'500'808'176, cnt 1'957'374'720, 512sec
3 сл (когда 43 в середину) - 28,45% / 1,156 ** 0,329 noscoop 278'406'072, cnt 978'687'360, 274sec; тут даже бонусы меньше.
вот положил ты 5 карт вниз, как определяешь силу руки? берешь 5 карт, сортируешь их, из массива берешь комбинацию, так? это долго, хоть и сразу все посчитал. Или надо иметь 5-тимерный массив 52^5= 380млн, а тут 5,7млн элементов.
пусть внизу пока 4 карты, я беру из массива значение для 4 карт, запоминаю. Потом добавляю сколько надо раз любую карту и сразу из массива беру силу руки. Ничего не сортирую, только одно обращение к массиву HR5.
ну разумеется для каждой линии свои бонусы. все учитывается.