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

22
Статистика
Статистика
22
Статистика темы
  • Популярность
    Топ-5032
  • Постов
    2,261
  • Просмотров
    172,125
  • Подписок
    22
  • Карма автора
    -45
1 29 30 31 32 114
  • Jak @ 24.12.2019
    Ты покажи ситуацию, когда при подъеме можно сделать так, либо нет фанты и +4 куша, либо фанта и +3 куша. Ты же про это писал.


    Я тебе просто показал что ты не дружишь с математикой китайского покера ... за 10$ могу тебе такой пример подобрать ...
    Ответить Цитировать
    128/882
    + 0
  • БиллиУбили @ 23.12.2019
    код кривоватый, конечно, но запустить можно попробовать.

    код запустился
    struct trie *rooooot;
    rooooot = trie_insert(NULL, "bars",60);
    rooooot = trie_insert(rooooot, "basr", 60);
    rooooot = trie_insert(rooooot, "bsra", 60);
    rooooot = trie_insert(rooooot, "bsar", 60);
    rooooot = trie_insert(rooooot, "bras", 60);
    rooooot = trie_insert(rooooot, "brsa", 60);
    rooooot = trie_insert(rooooot, "abrs", 60);
    rooooot = trie_insert(rooooot, "absr", 60);
    rooooot = trie_insert(rooooot, "arsb", 60);
    rooooot = trie_insert(rooooot, "arsb", 60);
    rooooot = trie_insert(rooooot, "asrb", 60);
    rooooot = trie_insert(rooooot, "asbr", 60);
    rooooot = trie_insert(rooooot, "rasb", 60);
    rooooot = trie_insert(rooooot, "rsab", 60);
    rooooot = trie_insert(rooooot, "rabs", 60);
    rooooot = trie_insert(rooooot, "rsba", 60);
    rooooot = trie_insert(rooooot, "rbsa", 60);
    rooooot = trie_insert(rooooot, "rbas", 60);


    int c = trie_lookup(rooooot, (char*)"rbas");
    c = trie_lookup(rooooot, (char*)"kit");

    возвращает 60 для rbas и 0 для kit
    Теперь генерирую 100 охулиардов запросов рандомных строчек из 4 букв. Когда-то среди них должен попадасться "bars"(в различных перестановках). Все остальные "строки" должны давать 0, соответственно.
    По моим прикидкам, быстродействие должно быть овер 100к запросов /с
    Ответить Цитировать
    233/741
    + 0
  • Пошла жаришка
    std::string zzzz;
    std::string yyy;
    for(int i = 0; i < 4; i++)
    {
    yyy =(char)('a' + rand() % ('z' - 'a'));
    zzzz.insert(0,yyy);
    }

    ща бахнем 100500 запросов
    Ответить Цитировать
    234/741
    + 0
  • ну, да...
    int counter =0;
    int c;
    for(int i = 0; i < 999999; i++)
    {
    zzzz.clear();
    for(int i = 0; i < 4; i++)
    {
    yyy =(char)('a' + rand() % ('z' - 'a'));
    zzzz.insert(0,yyy);
    }
    c = trie_lookup(rooooot, (char*)zzzz.data());
    if (c ==60)
    counter++;
    }

    где-то 1кк запросов/с. Тут, правда, "комбинации" из 4ёх карт, но не думаю, что что-то сильно поменяется для 5.

    Господа, если у кого-то есть возможность желание подержать проект донейтом - прошу в личку. А то мне завтра снова на работу, не до программирования будет.

    ЗЫ А теперь баиньки. Далее планирую попробывать
    а) забить все комбинации(хотя бы и от балды)
    б) попробовать собирать фантазии из 14, 15, 16 карт на скорость
    в) получить заветные 9.78 очков для одинокой руки в вакууме.
    Если есть пожелания - пишите, не стесняйтесь
    Сообщение отредактировал БиллиУбили - 24.12.2019, 16:51
    Ответить Цитировать
    235/741
    + 0
  • БиллиУбили @ 24.12.2019
    std::string zzzz;
    std::string yyy;
    for(int i = 0; i < 4; i++)
    {
    yyy =(char)('a' + rand() % ('z' - 'a'));
    zzzz.insert(0,yyy);
    }


    436fb7e4f54934b4e6fb993ef1a80d14.jpg
    Ответить Цитировать
    129/882
    + 0
  • c00l0ne, Jak,

    Хотите силами померятся, предлагаю вариант задачи :
    - старт. Мы на первой позиции. Стартовые карты 22233.
    Какова вероятность того, что мы соберем КК или АА вверху
    В задаче считаем что К или А обязательно идут вверх ( кроме случаев когда эта карта дает трипс).

    Это решение хоть как то полезно для нас (любителей) будет
    Ответить Цитировать
    5/14
    + 0
  • brdss, чем полезно то?
    Ответить Цитировать
    130/882
    + 0
  • c00l0ne @ 24.12.2019
    brdss, чем полезно то?


    ну если при игре в прогрессив на старте тебе это не важно, то у меня плохие новости для тебя.
    Ответить Цитировать
    6/14
    + 0
  • brdss, в таком стартере думаю никому не важно )
    трипс вниз, а пару в середину, придет процентов 50 где -то
    в таких спотах точно бабки не печатаются) их разыграют все одинаково...

    brdss @ 24.12.2019
    Хотите силами померятся, предлагаю вариант задачи


    мне потребуется неделя чтобы найти задачки а ты прям за пять секунд нашел ?) первую попавшуюся взял?)
    Сообщение отредактировал c00l0ne - 25.12.2019, 1:59
    Ответить Цитировать
    131/882
    + 0
  • Вопрос: Какова вероятность выпадения "зеро" на еврорулетке с 37 ячейками?

    Простые математики: Ну..... наверно, всего вариантов 37, а "зеро" одно из них, значит надо 1 разделить на 37, т.е. 1/37~0.027027027... = 2,7027027%...

    Крутые математики: вы че??? Причем тут 37 вариантов?? 300к раз крутим рулетку и считаем выпадения "зеро". Крутим .... Во!!! Выпало 7980 раз, делим на 300000 получаем 0,0266=2,66%. Не умеете считать!! Забьемся??? Почем???

    Ответить Цитировать
    63/314
    + 1
  • Jak @ 25.12.2019
    делим на 300000

    кстати, тоже хотел на это обратить внимание. Там всего 2024 варианта, но нет, надо 300к случайных. А желательно 1-1.5кк. Чтобы точность повысилась

    2 Jak
    Как ты представляешь карты из колоды? Пока размышляю над 2мя вариантами.
    1. Один байт: прописные буквы от a до z + заглавные от А до Z
    2. Два байта: первый байт - значение, второй - масть
    Ответить Цитировать
    236/741
    + 0
  • От a до z, потом от А до Z, все цифры от 0 до 9 и недавно добавил еще русские от а до я и от А до Я.

    Ты о чем? Всего 52 карты.
    Просто от 0 до 51.

    Можно, конечно, разделить на масть и число, ну тогда все равно в 1 байт можно старшие 4 бита масть 0..3, младшие 4 бита число. Но потом при работе это такой гемор, эти разрывы мешают. Как их использовать когда берешь ссылку в массиве? 0,1,2,3..11,12, 16,17,18...
    Да и скорости это не прибавит. Масть из 0..51 делается легко "div 13", а значение"mod 13". Одна операция. А старший байт взять это ж тоже операция.
    Да и не так часто это нужно.
    И красота (буковки) нужна только если смотреть человеку, машине буковки не нужны.

    И еще!! Хотя ты на С пишешь и тебе это понятно. Человеку выгодней считать 1,2,3,...52, а машине 0,1,2,3,...51. Потом в проге это сильно скажется, вот эта лишняя 1ка заебёт.

    Еще посоветую, мож нужно.

    Заранее посчитаны несколько массивов.

    Bit64[63] - все битовые маски Bit64[0]=1, Bit64[1]=2, Bit64[3]=4, Bit64[4]=8 и т.д., когда надо взять битовую маску просто номер карты и сравниваешь есть ли она в колоде, ведь колоду можно записать как число С=0111001011110010111011100B например двоичное. Если вся колода полная то = $FFFFFFFFFFFFF. И выкидываешь из нее по карте.

    Сформированы все пары, их 1326, все тройки, их 22100. И для всех пар и троек есть массивы с битовой маской, два или три массива с номерами которые входят в эту двойку/тройку.

    Посчитаны массивы всех пятерок 2598960, просто сила руки с кикерами, все пять карт которые входят в эту руку, отдельно мощность (фулл, стр), бонусы для низа и мида.
    И все это отсортировано по убыванию.
    Т.е. если я что-то ищу по этому массиву и нашел пятерку меньше нужной, все дальше не иду, остальные младше.

    Всякие "div 13", "mod 13" тоже сразу посчитаны.
    Тут в догонку есть массивы перевода карт в буквы, если надо карту вывести на экран, отдельно буквы масти, отдельно значение.
    ('s','c',d',h')... Можно и вместе ('2s','3s',...) по номеру сразу буковки.

    Все CNK -биномиальные коэффициенты, С(n,k) - тоже посчитаны. Даже есть CNK1,CNK2,CNK3,CNK4,CNK5 - это C(n,1), C(n,2), чтобы быстрей брать, если надо.
    Сообщение отредактировал Jak - 25.12.2019, 10:01
    Ответить Цитировать
    64/314
    + 0
  • Jak @ 25.12.2019
    Вопрос: Какова вероятность выпадения "зеро" на еврорулетке с 37 ячейками?

    Простые математики: Ну..... наверно, всего вариантов 37, а "зеро" одно из них, значит надо 1 разделить на 37, т.е. 1/37~0.027027027... = 2,7027027%...

    Крутые математики: вы че??? Причем тут 37 вариантов?? 300к раз крутим рулетку и считаем выпадения "зеро". Крутим .... Во!!! Выпало 7980 раз, делим на 300000 получаем 0,0266=2,66%. Не умеете считать!! Забьемся??? Почем???



    Сарказм - низшая форма остроумия. (С)
    Ответить Цитировать
    132/882
    + 0
  • Jak @ 25.12.2019
    Просто от 0 до 51

    То есть, до колоды с джокером ты ещё не дошёл? Пока навскидку и не скажешь, как его трактовать...карта №52. Опасный зверь: обладает сразу всеми значениями и всеми мастями
    Отлаживать будет сложно в твоём варианте: хрен поймёшь, что это за линия такая {2,7,33,18,15}
    Если в обозначении использовать и масть, и значение, то хотя бы будет понятно, что
    {9X, 8X, 2X, 9X, 9X} - это сет девяток. Я имею в виду визуально, ведь 9 - это и будет девятка.
    Ответить Цитировать
    237/741
    + 0
  • c00l0ne @ 25.12.2019
    Сарказм - низшая форма остроумия. (С)

    Это не сарказм, а правда жизни. Jak раскладывает 100+ фантазий за секунду, а это задача решается математикой с минимумом программирования. То есть математик должен решить её в первую(!) очередь(потом уже будут позы, скупы, МК и т.д.)
    Ответить Цитировать
    238/741
    + 0
  • Привыкнешь. Ты ж что-то предполагаешь тут увидеть, когда отлаживаешь? Через некоторое время будешь легко знать, что означает {2,7,33,18,15}, даже если спросят скажешь какие это карты с мастями.
    Не ищи легких путей для себя, делай легче для компа.
    Когда то , когда я писал первые программки на работе и если оператор вводил неверное число, прога ему писала: "Неверно!" и возвращалась назад, и ему надо было начинать все сначала. Мне мой начальник сказал: "Твоя программа должна ПОМОГАТЬ человеку, а не посылать его на х..". Надо быть дружелюбней к челу. Вот с тех пор я и пишу так, чтобы было удобней челу, а программисту от этого только хуже.

    c00l0ne @ 25.12.2019
    Сарказм - низшая форма остроумия. (С)

    Ну это заметно по твоим сообщениям на предыдущих 30ти страницах.
    Ответить Цитировать
    65/314
    + 0
  • Jak @ 25.12.2019
    Не ищи легких путей для себя, делай легче для компа.

    Спасибо за совет. Но предпочитаю отлаживать в человеческом виде. Вот когда посчитаю фантазию в рамках своей модели(скажем, двухсимвольное представление карты), тогда уже можно будет переписать на {0....51}
    Так хоть душа будет спокойна, не придётся возвращаться и ловить косяки. А уж потом можно будет сосредоточиться на быстродействии....

    Остальные советы тоже прихранил, но пока использовать их рано )
    Двигаемся "Дранг нах Остен", то бишь к разложению фантазии на 14 картах с использованием дерева комбинаций.
    Ответить Цитировать
    239/741
    + 0
  • Jak @ 25.12.2019
    наверно, всего вариантов 37, а "зеро" одно из них, значит надо 1 разделить на 37, т.е. 1/37~0.027027027... = 2,7027027%...


    А если число чисел на рулетке не известно или ножки подпилены или стол не ровно установили) тогда нужны "крутые математики", не все просто как тебе кажется, софт твой делает много ошибок ... Разберись лучше с этим...

    Насчёт 300к , я же писал про симуляцию и сравнение своей руки с рукой оппонента... Чего ваш алгоритм в принципе не делает к тому же:

    c00l0ne @ 24.12.2019
    Смысл в том что оппонент карты выкидывает не равномерно и закладывая в колоду все не известные карты ты допускаешь ошибку предполагая что оппонент равномерно карты в пас выбрасывает... А такой стратегии у попа быть не может... Отсюда будет погрешность алгоритма высокая, поэтому и бензопила


    Но на это можно закрыть глаза было бы, но у тебя(Жак) банально стартера не бьются...

    Я к тому сарказм твой не уместен... Пока нет практической пользы от твоего софта...
    Сообщение отредактировал c00l0ne - 25.12.2019, 10:57
    Ответить Цитировать
    133/882
    + 0
  • c00l0ne @ 25.12.2019
    А если число чисел на рулетке не известно или ножки подпилены или стол не ровно установили) тогда нужны "крутые математики

    Ну да, у тебя же не известно сколько карт в колоде. Ты же даже знаешь все три кикера, которые в сбросе у оппа. Значит еще легче. Вообще все известно. Ты вообще решаешь выдуманную позицию. Такого не бывает в природе!

    А твое мифическое влияние "угаданного" кикера на результат МК не имеет под собой никакого основания.
    Это как на рулетке после 12 обязательно будет 26. Многие в этом уверены.
    c00l0ne @ 25.12.2019
    Но на это можно закрыть глаза было бы, но у тебя(Жак) банально стартера не бьются...

    Моя хоть какие-то стартера выдает. Твоя вообще последние 2 карты 5 сек раскладывает. Про стартер я боюсь даже спрашивать ...
    Покажи хоть стартер какой? Наверно год считал? Или тоже 300к МК?

    Моя программа отвечает на понятный вопрос для игрока - как положить?
    А твоя что? Мы сыграли, хз как положили карты, нам же никто не советовал, а потом только когда остался последний подъем можем сказать: да у нас тут 3 куша! Охуенное знание! А если хочешь узнать как ложить подъем - то будь добр руками положи 27 вариков, а она за 2 минуты посчитает.

    И еще вдогонку. МОНТЕ - КАРЛО НИКОГДА не дает верного результата! Это - аксиома! Это даже постулат!

    c00l0ne @ 25.12.2019
    Пока нет практической пользы от твоего софта...


    А вот тут ты ошибаешься.
    Открою тему: "Выкладываю программу, которая поможет Вам разложить любой подъем. Три последних подъема быстро и точно!"
    И народу будет ...

    А ты что можешь? В статике посчитать куши? Которые руками можно посчитать.
    Ответить Цитировать
    66/314
    + 0
  • c00l0ne @ 25.12.2019
    Смысл в том что оппонент карты выкидывает не равномерно и закладывая в колоду все не известные карты ты допускаешь ошибку предполагая что оппонент равномерно карты в пас выбрасывает...

    Продолжаешь юродствовать? Какая разница, какие карты скидывает оппонент? ОНИ НЕ ВОЗВРАЩАЮТСЯ В КОЛОДУ. Нет никакой разницы, отложил ли дилер 9 карт для нас, потом 9 для оппонента и начал выдавать по 3...или наоборот(сначала 9 карт для оппонента, потом 9 карт для нас)...или просто раздаёт по 3 по очереди.
    От этого карты, которые нам в итоге достанутся, не поменяются.
    Единственное, что может учесть алгоритм - по 2ум положенным определить какую карту скорее всего
    сбросил оп. Да, если у него туз в мидл, то скорее всего ему на очередном подьёме не пришёл туз. Но не факт, возможно он пожертвовал им для усиления(завершения) фула внизу.
    Ещё раз. Вероятность получить карту из колоды зависит только от её наличия в колоде. И не зависит от числа оппов, порядка раздачи, и уж тем более от того, какие карты сбросит оп(оппы)(не забываем, что мы их НЕ ВИДИМ, можем только предполагать).
    К тому же, твоя симуляция в 300к никак сброшенные карты не учитывает.
    Так что, друг, раскладывай фантазии. Потом можно будет обсудить с тобой "высшие материи".
    Ответить Цитировать
    240/741
    + 0
1 29 30 31 32 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.