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

Последний пост:26.11.2023
22
1 25 45 46 47 48 67 114
  • #390 #399
    102/314
    Ответить Цитировать
    0
  • Мощнейшая рекурсия перемалывает всё на своём пути
    void fantasy(std::string nabor, std::string bot, std::string mid,
    std::string top)
    {
    std::ofstream stream;
    if (bot.empty())
    for(int i=0; i < nabor.size(); i++)
    {
    std::string newbot;
    newbot.assign(nabor,i,1);
    std::string newnabor(nabor);
    newnabor.erase (i,1);
    fantasy(newnabor, newbot, mid, top);
    }
    else if (mid.empty())
    for(int i=0; i < nabor.size(); i++)
    {
    std::string newmid;
    newmid.assign(nabor,i,1);
    if(bot >= newmid)
    {
    std::string newnabor(nabor);
    newnabor.erase (i,1);
    fantasy(newnabor, bot, newmid, top);
    }
    }
    else if (top.empty())
    for(int i=0; i < nabor.size(); i++)
    {
    std::string newtop;
    newtop.assign(nabor,i,1);

    if(mid >= newtop)
    {
    std::string newnabor(nabor);
    newnabor.erase (i,1);
    fantasy(newnabor, bot, mid, newtop);
    }
    }
    //походу всё собрали
    if (!bot.empty() && !mid.empty() && !top.empty())
    {
    stream.open("fantasies.txt", std::ios::app);
    if (stream.is_open())
    {
    stream << bot << mid << top << '\n'; //
    stream.close();
    }}
    };

    вызываем
    std::string nabor = "ABCDABCD";
    std::string bott = "";
    std::string midd = "";
    std::string topp = "";

    fantasy( nabor, bott, midd, topp);

    получаем
    BAA
    BAA
    BBA
    BBA
    CAA
    CBA
    CBA
    CBB
    CAA
    CBA
    CBB
    CBA
    CCA
    CCB
    CCA
    CCB
    DAA
    DBA
    DBA
    DBB
    DCA
    DCB
    DCA
    DCB
    DCC
    DAA
    DBA
    DBB
    DBA
    DCA
    DCB
    DCC
    DCA
    DCB
    DDA
    DDB
    DDC
    DDA
    DDB
    DDC
    BAA
    BBA
    BBA
    BAA
    CAA
    CBA
    CBA
    CBB
    CCA
    CCB
    CCA
    CCB
    CAA
    CBA
    CBB
    CBA
    DAA
    DBA
    DBA
    DBB
    DCA
    DCB
    DCA
    DCB
    DCC
    DDA
    DDB
    DDC
    DDA
    DDB
    DDC
    DAA
    DBA
    DBB
    DBA
    DCA
    DCB
    DCC
    DCA
    DCB

    тут, как понятно, под ADCD зашифрованы различные по рангу комбинации. Дополнительной проверки внутри одного ранга нет.
    Вообще, меня смущают результаты Jak-а...какие-то мс на разложение 10к фантазий.
    Хрен с ним, с нахождением комбинаций...даже разложение по старшинству не такое уж и быстрое...
    Сейчас спать, с утра загоню в строку 500 "комбинаций" и сделаю цикл на 10к
    Ваш прогноз на быстродействие?
    350/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 13.1.2020)
    Ваш прогноз на быстродействие?


    Плакое?
    245/882
    Ответить Цитировать
    0
  • c00l0ne, не просто плохое, а очень плохое.
    128 "комбинаций", 350к всевозможных разложений....
    чуть менее 1.5 секунды. Не миллисекунды, а именно секунды.
    Просто пока не могу понять: понадобятся ли в будущем именно все разложения(от 0 очков до 72) или достаточно будет находить максимум?
    Просимулируй...вот ты достаёшь 3 комбинации, кладёшь их рандомно, и, если рука живая, сохраняешь разложение. И так 350к раз...комбинации можешь заменить числами от 0 до 99999, сравнение = простое арифметическое сравнение
    351/741
    Ответить Цитировать
    0
  • а ты замени строки-буквы на строки"двойка_пик", "тройка_пик" и т.д. и пусть прога по части строк "пик" и т.д. находит флеш, а по номиналу "двойка", "четверка" и т.д. ищет стриты и совпадения, фулы там и тройки, каре. мож так быстрей будет?
    103/314
    Ответить Цитировать
    0
  • Jak, у меня буквы в строке уже и есть комбинации. А - Ахай, B - пара, С - 2пары, D - фул(например).
    Перехожу к плану Б. Найти максимальное кол-во очков для данного набора (14-17) карт.
    Для этого будем класть по алгоритму:
    а) находим макс. комбинацию(флашрояль, стритрояль, карэ и т.д.)
    б) кладём её на линию, где она наберёт макс.очков
    в) отправляем данное "разложение" на убой завершение
    г) так по всем комбинациям, пока не появится первая "живая" рука -> выход из поиска
    Дополнительное ограничение: в топе комбинация не старше "тройка"

    ЗЫ Здесь я неявно предполагаю, что в разложении с макс. очками хоть одна комбинация, но получит макс. очки(попав в соответствующий бокс)
    ну, или в этом поиске обязательно дойти до "трипс". Иначе я теоретически положу 2 фула (6+12очков) взамен трипс-трипс-трипс в топе((10-22)очка + повтор)
    Сообщение отредактировал БиллиУбили - 13.1.2020, 17:53
    352/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 13.1.2020)
    128 "комбинаций", 350к всевозможных разложений....

    жаль, что мне никто не подсказал....Так как в топе может быть только трипс, пара и Ахай, то больше двух комбинаций типа "флаш" в фантазию не впихнёшь(и их всегда можно выстроить по старшинству, уж если и будут задействованы комбинации одного ранга). Поэтому, макс кол-во "различных" комбинаций на входе: 9(рояли, карэ, флаши, стриты и т.д.) х 2 + трипсы + пары(от 6ки) х 2 = 18 + 13 +18 = 49
    На этом всевозможные различные вариантов очков исчерпываются.
    Сейчас дописываю подсчёт очков для трипсов и пар(в топе очки зависят от номинала карт) и можно будет ограничится перебором 50 вариантов(то есть однозначно находить максимум оп очкам).
    353/741
    Ответить Цитировать
    0
  • Первые результаты по плану Б.
    100к фантазий из 14 карт....1минута
    или 10к - 6сек
    среднее кол-во "проверок" на фантазию ~ 100
    Возможно ещё оптимизация, когда у нас заполнены топ и мидл, а на нижнем боксе мы не можем набрать больше очков текущего максимума(например, 12). Но я не хочу туда лезть руками, так как можно круто ошибиться.
    ЗЫ Повторов нет, очков за "будущую" фантазию тоже. Считаются только сумма очков за комбинации.
    354/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 14.1.2020)
    100к фантазий из 14 карт....1минута
    или 10к - 6сек

    незначительная оптимизация...и уже 100к - 35с
    завтра(то есть сегодня) продолжим
    16 карт в 2 раза дольше...1м20с
    сравните кто-нибудь с результатами Jak, голова уже не работает...
    355/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 15.1.2020)
    16 карт в 2 раза дольше...1м20с

    Ан, нет. Великая сила рекурсии...всё те же 35с за 100к наборов
    356/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 15.1.2020)
    Ан, нет. Великая сила рекурсии...всё те же 35с за 100к наборов


    Чувак а зачем тебе это все? Ну посчитай один раз миллион шт и тебе хватит этой статистики

    Если ты думаешь что это поможет решить как играть , ты заблуждаешься...

    Игра против фантазии оч сложно решается...
    246/882
    Ответить Цитировать
    0
  • c00l0ne, шта, какая игра против фантазии?
    Была поставлена задача разложить 14-16 карт с макс. кол-вом очков, теперь она решена.
    Переходим к проблеме №4 "Разложение стартера".
    Имеем 5 карт, которые можно разложить...ну, пусть 200 способами.
    Генерируем Х наборов по (13-5) = 8 карт и "раскладываем" фантазию с уже положенными 5 картами.
    Если 100к фантазий мы раскладываем за 35сек, то оценить 200 способов разложения стартера мы сможем за 35сх200 ~ 2 часа. Здесь предполагаем, что 100к различных наборов - достаточно хорошее приближение для С(52-5,8) вариантов.
    К тому же, можно снова пойти по методе Jak. ДЛя 200 вариантов прогнать 100к, выбрать топ-10 и для них снова прогнать 100к(другие).
    Или же надо будет пробовать сокращать 200 до приемлемых значений..

    ЗЫ
    Цитата (c00l0ne @ 15.1.2020)
    Игра против фантазии оч сложно решается...

    Чувак, поверь мне, никто не сомневается, что ты решил эту задачу с помощью НАВУКИ...то есть математики
    357/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 15.1.2020)
    Имеем 5 карт, которые можно разложить...ну, пусть 200 способами.
    Генерируем Х наборов по (13-5) = 8 карт и "раскладываем" фантазию с уже положенными 5 картами.


    Какое отношение имеет такое решение к идеальной игре в китайский покер, это всего лишь максимум роялти из 13 карт... Как ты ходы будешь делать


    Цитата (БиллиУбили @ 15.1.2020)
    Чувак, поверь мне, никто не сомневается, что ты решил эту задачу с помощью НАВУКИ...то есть математики


    Я не решал... С чего ты взял что я что то решил...
    247/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 15.1.2020)
    это все но лишь максимум роялти из 13 карт... Как ты ходы будешь делать

    Пока ещё не знаю точно. Разложение фантазии 100к за 35с даёт не только макс. очки, но и все возможные.
    Возможно, для них надо посчитать среднее. ТОгда стартер я буду класть с макс. (средним) ЕВ (для карт, которые придут на следующих подьёмах)
    358/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 15.1.2020)
    Возможно, для них надо посчитать среднее. ТОгда стартер я буду класть с макс. (средним) ЕВ (для карт, которые придут на следующих подьёмах)


    Какой бардак... Вот за это не люблю в таких местах обсуждать подобного типа задачи...
    248/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 15.1.2020)
    С чего ты взял что я что то решил...

    а с чего ты пишешь, что Игра против фантазии оч сложно решается...?
    359/741
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 15.1.2020)
    а с чего ты пишешь, что Игра против фантазии оч сложно решается...?


    Потому что на каждом этапе нам предстоит разобрать много фантазий... И с каждым ходом объем работы растет... Я хз что вы тут делаете... Но задача полны перебором решается не так как вы делаете... Жак и ко...


    Вы решаете нахождение максимума роялти в 14-17 картах
    249/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 15.1.2020)
    Потому что на каждом этапе нам предстоит разобрать много фантазий...

    Ты бы сначала определил, что в твоём понимании "игра против фантазии"
    Цитата (c00l0ne @ 15.1.2020)
    Но задача полны перебором решается

    То есть ты всё-таки её решил?
    360/741
    Ответить Цитировать
    0
  • БиллиУбили, ха и оппоненту раздали фантазию

    Цитата (БиллиУбили @ 15.1.2020)
    То есть ты всё-таки её решил?


    Ты просто не понимаешь про что говоришь ... Полное решение 1 раздачи займет 1-2 дня расчетов на супер компьютере, до точности 0.01 куш
    250/882
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 15.1.2020)
    ха и оппоненту раздали фантазию

    Зачем решать именно эту задачу? Точнее, чем это будет отличаться от разложения руки в вакууме? Ну, за исключением варианта разбить 2 пары в мидл и положить пару 55 в топ, чтобы повысить шансы избежать скупа?
    361/741
    Ответить Цитировать
    0
1 25 45 46 47 48 67 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.