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

22
Статистика
Статистика
22
Статистика темы
  • Популярность
    Топ-404
  • Постов
    2,261
  • Просмотров
    172,090
  • Подписок
    22
  • Карма автора
    -45
1 22 23 24 25 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 22 23 24 25 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.