Пилю программку по обсчёту китайского покера

Последний пост:26.11.2023
22
1 2 22 23 24 25 44 114
  • Забавно, что если искать решение в пространстве готовых рук, то их кол-во составит уже ~ 6 Терабайт. А задача правильного "разложения" сведётся к факторизации целых чисел. Есть математики в треде? Как быстро 13значное число раскладывается?
    181/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 10.12.2019)
    Забавно, что если искать решение в пространстве готовых рук, то их кол-во составит уже ~ 6 Терабайт. А задача правильного "разложения" сведётся к факторизации целых чисел. Есть математики в треде? Как быстро 13значное число раскладывается?


    Ты несёшь бред... Как по мне... Я вроде как математик

    Мы не ищем конечные комбы, мы от входящих параметров которыми являются а) наши карты б) карты оппонента рассчитываем максимально выгодный ход... При чем тут база комб...
    Сообщение отредактировал c00l0ne - 10.12.2019, 16:50
    85/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 10.12.2019)
    Я вроде как математик

    Хреновый ты математик, если у тебя разложение стартера вниз даёт 10 очков
    Цитата (c00l0ne @ 10.12.2019)
    очевидно 10 кущей берутся с фантазий сверху и сетов наверху, в совокупности где то даст 10

    Там и 1(одного) очка не наберётся. Впрочем, не хочу ругаться и выяснять отношения.
    Цитата (c00l0ne @ 10.12.2019)
    При чем тут база комб...

    При том, что число рук(с очками) конечно. А в конечном итоге всё сводится к ним.
    182/741
    Ответить Цитировать
    0
  • Могу 10 баксов поставить против))):
    Цитата
    Там и 1(одного) очка не наберётся.

    От раннее дам и двух пар в середине больше куша будет
    .... А ещё есть три короля и три туза и сет в середине...

    Цитата
    . При том, что число рук(с очками) конечно. А в конечном итоге всё сводится к ним.

    Хз про что ты...сложна пишешь ...

    Цитата
    . Хреновый ты математик

    86/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 10.12.2019)
    Могу 10 баксов поставить против))):

    лучше поставь на
    Цитата
    в совокупности где то даст 10
    183/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 10.12.2019)
    1. Любая заполненная линия приводится к виду "комбинация из Х карт, далее кикеры". Если никакой комбинации не образуется, все карты являются кикерами и сортируются по старшинству(как и на предыдущем этапе).

    2. Для каждой комбинации старше А-хай определяем уникальный "код"(например, 823477) и таким образом получаем автоматическую сортировку всех комбинаций по старшинству(так, что комбинация с кодом 823477 старше комбинации с кодом 662121)
    А вот дальше непонятно.


    Если хочешь экономить память, а не время, то:

    Вариант А:

    => flush?
    Да: идем в таблицу flush и ищем
    Нет: идем в таблицу noflush и ищем

    Вариант Б:

    => CRC16 => целое число в 2 байта. По нему ищешь. Только проверь, что тебя нет коллизий, если есть используй CRC32.
    6/9
    Ответить Цитировать
    0
  • Цитата (Marauder62 @ 10.12.2019)
    Вариант А:

    то есть 8 массивов(таблиц) для комбинаций разной силы(каре, фулхауз, и т.д.)?
    Не подходит, так как 8 запросов.
    Цитата (Marauder62 @ 10.12.2019)
    Вариант Б:

    CRC - это свёртка что ли? Я уже предложил свой вариант: перемножить 5 чисел от 1 до 52, где каждой карте соответствует своё число(от 1 до 52). Таким образом экономим время на сортировке и в 120 раз экономим память для хранения таблиц. Естественно, в таблице на месте 50*2*12*18*4 будет записана сила комбинации

    я отдыхать. Теперь, когда ясно, что надо делать, стало немножко полегче
    184/741
    Ответить Цитировать
    0
  • Я не поленился и посчитал твоей прогой выше представленный расклад когда у нас 4,8,Q. Так вот при Scoop=12 даму не выгодно ложить вверх, о вот при Scoop=6 уже выгодно. При этом когда Bonus=8 этот вариант дает незначительное преимущество, а когда Bonus=14, то преимущество более 2 кушей.
    Информация к размышлению. Очень важно знать правильные значения этих двух величин. Это будет значительно влиять на все последующие расчеты.
    Кстати, я не утверждал, что фентези EV=8, я лишь сделал предположение, что нужно считать разницу между 14 и очками, что в среднем набирает игрок за игру. Какое это среднее значение я не знаю и очень бы хотелось узнать (регуляры делитесь инфой). Возможно это предположение неверно и не нужно брать разницу, я готов к дискуссии.
    В программе лучше сделать поле ввода для этих величин (Bonus, Scoop), чтобы пользователь сам мог выбирать значения, которые ему кажутся правильными (и желательно не только целые числа).
    Следующий этап, что хотелось бы выяснить - как рука оппонента влияет на наш выбор. В выше разобранном раскладе у оппа почти готовая фантазия - очень редко будет скуп в остальное время будет фантазия. Вот если бы у него было наоборот ( часто скуп и редко фантазия), как бы это повлияло на наше решение? Нам нужно более рискованно ставить даму вверх или более консервативно?
    18/52
    Ответить Цитировать
    0
  • Цитата (Galax @ 10.12.2019)
    Я не поленился и посчитал твоей прогой выше представленный расклад когда у нас 4,8,Q

    Это ты Jakу? 8ка, наверное, пошла вниз, а 4ка - на сброс? Просто интересно.
    Цитата (Galax @ 10.12.2019)
    Какое это среднее значение я не знаю и очень бы хотелось узнать (регуляры делитесь инфой).

    Автор проги может сам его посчитать. Достаточно прогнать 1кк стартеров и посчитать среднее ЕВ руки в вакууме. Тут, конечно, можно поспорить, что играют минимум 2 игрока и соперник будет изымать карты из колоды. Но он может "вытянуть" как нужные нам, так и ненужные. Так что в среднем получится годная оценка
    185/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 10.12.2019)
    то есть 8 массивов(таблиц) для комбинаций разной силы(каре, фулхауз, и т.д.)?
    Не подходит, так как 8 запросов.


    Зачем 8? У тебя есть всего одна комба, где масть играет значение, вот ее и в отдельную таблицу.

    Про CRC и прочие - гугли про хеш-функции.
    7/9
    Ответить Цитировать
    0
  • Цитата (Marauder62 @ 10.12.2019)
    Зачем 8? У тебя есть всего одна комба, где масть играет значение, вот ее и в отдельную таблицу.

    Не понял, ты про заполнение таблиц(ы)? Там не надо экономить время. Она(и) делаются раз и навсегда.
    Вопрос в том, как определить комбинацию для 5ти случайных карт за минимальное время.
    У меня в таблице на месте 50*2*12*18*4 записано "флаш". А ты мне предлагаешь 8 таблиц, в которых я должен ещё и поиск(!) должен делать. Не, не путай меня
    186/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 10.12.2019)
    У меня в таблице на месте 50*2*12*18*4 записано "флаш".

    Не хочу тебя расстраивать, но проверь, являются ли следующие комбинации флешами: 50*1*24*18*4 или 50*2*6*18*8 или 25*2*24*18*4 и т.д. )
    Это железно работает для простых чисел: 1, 2, 3, 5, 7, 11 и т.д. в этом случае 48 число это 223, а 52 - 239.
    8/9
    Ответить Цитировать
    0
  • Цитата (Marauder62 @ 10.12.2019)
    Это железно работает для простых чисел: 1, 2, 3, 5, 7, 11 и т.д. в этом случае 48 число это 223, а 52 - 239

    Да, чёрт побери, ты прав. Однозначно только разложение на простые множители.
    А что если сделать таблицу 1-1,2-2,3-3,4-5,5-7?
    Тогда "флаш" 50*1*24*18*4 даст 229*1*83*59*5,
    а "всевдо-флаш" 50*2*12*18*4 - 229*2*31*59*5, то есть другое число
    Если разложение уникально, то пересечений не будет, так?
    А силу комбинацию находить обратным преобразованием 229*1*83*59*5 -> 50*1*24*18*4 в компактной таблице на 2.6кк значений.
    187/741
    Ответить Цитировать
    0
  • Бля, детский сад.

    ТС, который не может решить проблему определения комбинации дает советы, а точней делает выводы
    Цитата (БиллиУбили @ 10.12.2019)
    Пока у меня есть только одна версия происходящего. Код(сам алгоритм) тебе писал кто-то другой(например, студент) и он тебя очень сильно наебал.

    все уже разжевали полгода назад. Всего 5 !!! обращений в массив - и все! ответ! Нет он умножает, складывает и тд.
    Пять! операций и все.

    Цитата (БиллиУбили @ 10.12.2019)
    Перемножить все числа, отвечающий за карты(от 0 до 52) и получить уникальное(!) число, отвечающее за все 5! = 120 вариантов одной и той же комбинации

    а ты думаешь "Перемножить все числа" не являются операциями? Они не занимают время процессора?

    Цитата (БиллиУбили @ 10.12.2019)
    А если ты решил собирать флаш, то у тебя на выходе может быть флаш или пара, ничего более.

    и в сотый раз пишу: программа НИЧЕГО НЕ СОБИРАЕТ и она не рассуждает как человек!! А давай-ка будем собирать флаш! А нет, давай будем собирать фулл!
    Она не знает ничего о комбинации. Кладет карты и считает. Только голые цифры. Шансы, скупы и бонусы, где больше там играем.
    Вот получилось 10 бонусов, ну, значит так выходит. И если кому-то "кажется" что так не может быть, это его проблема.
    В ICMizer'е часто вывод после счета вроде нелогичный, а потом выходит, что прога посчитала правильно.

    Цитата (c00l0ne @ 10.12.2019)
    Jak, зачем все варики считать... Лучшие отметил и уточняешь их... Лучшие 10 шт вариантов...

    согласен, а вот только как из 192 вариков узнать 10 лучших? У тебя на входе 5 случайных чисел: 2, 18, 51, 23, 45 - как выберешь 10 лучших? Ни масти, ни достоинства карт не видно. Ты думаешь твой мозг делает меньше работы, когда он "легко" отсеивает "лишнюю" карту и кладет сет вниз? Он также "перебирает" все варики...
    Ты за полчаса обзора не дал даже программе просто "рассмотреть" карты. На слабой машине запустил прогу и думал тебе сразу вылетит ответ? Полчаса тыкал в одно место и сделал вывод...

    А вообще вы меня убедили, херовая у меня программа. Удалил.
    Копошитесь дальше в детском саду.
    43/314
    Ответить Цитировать
    0
  • Цитата (Jak @ 11.12.2019)
    все уже разжевали полгода назад. Всего 5 !!! обращений в массив - и все! ответ! Нет он умножает, складывает и тд.
    Пять! операций и все.

    Извини, друг, но до меня не доходит. Не могу никак сообразить ((

    Цитата (Jak @ 11.12.2019)
    а ты думаешь "Перемножить все числа" не являются операциями? Они не занимают время процессора?

    Безусловно, занимают. И ещё какое.
    Цитата (Jak @ 11.12.2019)
    Вот получилось 10 бонусов, ну, значит так выходит. И если кому-то "кажется" что так не может быть, это его проблема.

    Собственно говоря, в этом я вся моя претензия. Не верю я, что МО разложения - 10 очков. Даже сеты, о которых бредит c00l0ne ... даже они не любые подходят, а младше 777, то есть 666-222.

    Ты говоришь очень грамотные вещи. Но злишься, когда тебя что-то спрашивают. Я ещё раз повторю: нет такой задачи "укатать Jak, показать всем, что он не умеет программировать и подобное". Есть задача УЛУЧШИТЬ твой алгоритм.
    Вот, конкретно, в этом примере(про 10 очков). Что тебе мешает выдать хотя бы 10-100-200 разложений случайных 3+3+3+3 и показать, как набираются эти 10 очков? Только одно(ЕЩЕ РАЗ ИЗВИНЯЮСЬ ЗА СВОЁ ПРЕДПОЛОЖЕНИЕ) - кодирует кто-то другой(коллега, компаньон, нанятый работник, но не ты сам. Ты даёшь указания - их переносят в код). В этом нет ничего зазорного, не стоит так кипятиться.

    Я тебе задавал ещё один вопрос. Сколько раз из твоих прогонов 100000 случайных 3+3+3+3 рука собирает фантазию. Сорян, но тут тоже кодирования на 2-3 дня. Ввести флажок "фантазия" и увеличивать счётчик на единицу. Почему ты игнорируешь этот вопрос?

    Цитата (Jak @ 11.12.2019)
    А вообще вы меня убедили, херовая у меня программа. Удалил.
    Копошитесь дальше в детском саду.

    Погоди, только начали разбираться в твоей реализации алгоритма. Удалить всегда успеешь
    188/741
    Ответить Цитировать
    0
  • Набросал тут 3 варианта определения силы комбинации
    Вариант А:
    int sily_komb[10000];
    int prosto[] = { 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
    int komb[] = { rand()%14, rand()%14, rand()%14, rand()%14, rand()%14};
    long id = 1.0;
    for(int i=0; i < 5; i++)
    {
    id = id*(long)prosto[komb[i]];
    }
    int sila_komb = sily_komb[id%9999];

    Вариант Б:
    int sily_komb[10000];
    int komb[] = { rand()%14, rand()%14, rand()%14, rand()%14, rand()%14};
    std::vector<int> mykomb (komb, komb+5);
    std::sort(mykomb.begin(), mykomb.begin()+5); //сортировка по возрастанию
    id = komb[0]*28561 + komb[1]*2197 + komb[2]*169 + komb[3]*13 + komb[4];
    int sila_komb = sily_komb[id%9999];

    Вариант В:
    int sily_komb[10000];
    int komb[] = { rand()%14, rand()%14, rand()%14, rand()%14, rand()%14};
    qsort(komb, 5, sizeof(int),comp1); //здесь comp1 - стандартная функция сравнения
    id = komb[0]*28561 + komb[1]*2197 + komb[2]*169 + komb[3]*13 + komb[4];
    int sila_komb = sily_komb[id%9999];


    Как думаете, кто победит в быстродейстии?
    ЗЫ Как определять силу комбинации за 5 запросов в таблицу по-прежнему представить не могу...
    189/741
    Ответить Цитировать
    0
  • Зачем нам кнопки скуп не совсем понятно. Можно реализовать так, как считют при игре? Выигранна линия +1,-1,0. Если +1,+1,+1 или -1,-1,-1, то соответственно +6 и -6 против каждого оппонента.
    11/17
    Ответить Цитировать
    0
  • Jak, как из 192 вариков узнать 10 лучших?
    Прогнать шорт ран, сохранять десятку лучших вариантов , и отдавать приоритет процессору только им

    Тело:
    Запускаем потоки, штук 30 из них 20 отключаются , далее ещё 30 и т.д. пока 10 лучших не останется... Их уточняем до 0.1 куша...
    Нужен массив с десяткой лучших, как только поток пропадает из этого списка, можно его завершать...
    Не сложно, если сделаешь скинь в личку...
    87/882
    Ответить Цитировать
    0
  • Цитата (DmNass @ 11.12.2019)
    Зачем нам кнопки скуп не совсем понятно. Можно реализовать так, как считют при игре? Выигранна линия +1,-1,0. Если +1,+1,+1 или -1,-1,-1, то соответственно +6 и -6 против каждого оппонента.


    Скуп это сколько очков проигрываем когда не доехали.... Текстовым полем лучше сделать...
    88/882
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 11.12.2019)
    Набросал тут 3 варианта определения силы комбинации
    Вариант А:
    int sily_komb[10000];
    int prosto[] = { 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
    int komb[] = { rand()%14, rand()%14, rand()%14, rand()%14, rand()%14};
    long id = 1.0;
    for(int i=0; i < 5; i++)
    {
    id = id*(long)prosto[komb[i]];
    }
    int sila_komb = sily_komb[id%9999];

    Вариант Б:
    int sily_komb[10000];
    int komb[] = { rand()%14, rand()%14, rand()%14, rand()%14, rand()%14};
    std::vector<int> mykomb (komb, komb+5);
    std::sort(mykomb.begin(), mykomb.begin()+5); //сортировка по возрастанию
    id = komb[0]*28561 + komb[1]*2197 + komb[2]*169 + komb[3]*13 + komb[4];
    int sila_komb = sily_komb[id%9999];

    Вариант В:
    int sily_komb[10000];
    int komb[] = { rand()%14, rand()%14, rand()%14, rand()%14, rand()%14};
    qsort(komb, 5, sizeof(int),comp1); //здесь comp1 - стандартная функция сравнения
    id = komb[0]*28561 + komb[1]*2197 + komb[2]*169 + komb[3]*13 + komb[4];
    int sila_komb = sily_komb[id%9999];


    Как думаете, кто победит в быстродейстии?
    ЗЫ Как определять силу комбинации за 5 запросов в таблицу по-прежнему представить не могу...


    В быстродействии победит combo(card1,card2,card3,card4,card5), массив около 3гбайт получится , 4байтовыми если кодировать:
    2байта на комбу и два на кикера
    89/882
    Ответить Цитировать
    0
1 2 22 23 24 25 44 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.s