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

22
Статистика
Статистика
22
Статистика за месяц
  • Популярность
    Топ-166
  • Постов
    0
  • Просмотров
    +833
  • Подписок
    0
  • Карма автора
    0
Лучшие посты автора
1 30 50 51 52 53 72 114
  • c00l0ne @ 28.1.2020
    само собой известна, я лично ее полным перебором считал ... 2 дня )

    странно, при разговоре ты говорил, что это очень сложно ))
    Приведи тогда значения для 17, 18 и 19 очков. Сравним со значениями Жака

    c00l0ne @ 28.1.2020
    если не секрет )

    мне это не интересно. Эффективность кода(алгоритма) кол-вом строчек не определяется.
    Ответить Цитировать
    407/741
    + 0

  • Приведи тогда значения для 17, 18 и 19 очков. Сравним со значениями Жака

    неее , спасибо, за 100$ могу )

    БиллиУбили @ 28.1.2020
    Цитата (c00l0ne @ 28.1.2020)
    само собой известна, я лично ее полным перебором считал ... 2 дня )странно, при разговоре ты говорил, что это очень сложно ))
    П


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


    мне это не интересно. Эффективность кода(алгоритма) кол-вом строчек не определяется.

    лол , я твои перлы потом на хабр или башорг выкладу )
    видимо много строчек потому что широкая манера письма )

    алгоритм должен быть фундаментальным ... остальное оптимизация ...
    Сообщение отредактировал c00l0ne - 29.1.2020, 4:12
    Ответить Цитировать
    282/882
    + 0
  • c00l0ne @ 28.1.2020
    ну тупой полный переебор

    c00l0ne @ 28.1.2020
    алгоритм должен быть фундаментальным

    полный перебор - такой себе алгоритм. 7часов vs 20 минут
    Калифорнийские сервера заждались договора аренды
    c00l0ne @ 28.1.2020
    что решать игру против фантазии очень сложно

    ну, да. очень сложно. К тебе пришли 5 карт, выкинь их из колоды и ЕВ фантазии соперника изменится. Делай так каждый подьём, и где-то на последнем поймёшь, что тебе пришёл весь мусор, а все АА и КК заботливо сложены оппом в фантазию.

    c00l0ne @ 28.1.2020
    лол , я твои перлы потом на хабр или башорг выкладу )

    это не перл, а правда жизни. Алгоритм на 100 строчках может быть как быстрее, так и медленнее алгоритма на 200.

    2 All 1000+ сообщений в топике. Всех поздравляю! Сейчас докрутим завершение стартера, потом нагрузка дерева...Всё только начинается )
    Ответить Цитировать
    408/741
    + 0
  • БиллиУбили @ 29.1.2020
    Сейчас докрутим завершение стартера

    Сделано.
    По уже доброй(?) традиции система разбработки во время отладки крашнулась. Но не фатально, проект уцелел. Делайте бэкапы, господа!

    Идея такая же, как и с попаданием ровно 5 карт стартера в итоговое разложение 14-17 карт. На этот раз получилось даже хитрее. Если у нас внизу должны оказаться , а это 2 карты, то при поисках комбинаций для нижнего бокса, мы начинаем рекурсию с поиска их в наборе. Находим , обязательно кладём вниз, УДАЛЯЕМ из набора и дальше ищем ...находим , кладём вниз, УДАЛЯЕМ из набора...вуаля, мы свели задачу к уже решённой: теперь следующие карты из набора(уже без семёрок) могут либо попасть вниз, либо не попасть.
    Ну, а дальше с меньшим набором переходим ко второму витку рекурсии(заполнению среднего бокса с обязательными 0-3 картами из набора, в зависимости от выбранного нами разложения стартера).

    Далее планирую перейти к нагрузке дерева. Как лучше задавать комбинацию?
    Пока есть такая задумка: первые 2 байта - число от 0 до 16 = ранг комбинации(стрит, флаш, каре и т.д.)
    следующие 5 байт - отсортированные по старшинству "карты". Сейчас у меня это числовые коды ASCIIтаблицы
    https://ru.wikipedia.org/wiki/ASCII, то бишь буквы латинского алфавита от а до z и от А до Z.
    Флаш будет примерно соответствовать #8 PSTWX(что-то вроде этого)
    Предлагаю сортировку, так как придётся сравнивать флаши/стриты на старшинство. (дерево живёт своей жизнью, время на сортировку мы тратить не будем)
    Какие будут предложения?

    ЗЫ Скоро на работу... Вы можете поддержать проект донатом(добровольным пожертвованием)

    PSS Музыкальная пауза!
    Ответить Цитировать
    409/741
    + 0
  • БиллиУбили @ 29.1.2020
    Далее планирую перейти к нагрузке дерева.

    Лол, кек-чебурек. Дерево, конечно, хорошо, но массив-то лучше?
    Ведь как я сейчас ищу, например, слово ТИГР.
    На 1ом этапе последовательно(!) прохожу все ответвления от А до Т -> спускаюсь на уровень вниз -> прохожу все ответвления от А до И -> спускаюсь на уровень вниз-> прохожу все ответвления от А до Г-> спускаюсь на уровень вниз и т.д.
    Так а зачем мне тратить время и узнавать есть ли ответвления (и проходить их) от А до Т, если я могу сразу перейти к ответвлению "Т"? Видимо, это имеет смысл для словаря, где не все префиксы приводят к словам. Например "ЫКР, " споткнётся уже на Ы и выйдет из цикла(в предположении, что СЛОВ, начинающихся на Ы, нет)
    Но в мире покерных комбинации всё не так. Даже самая дурная комбинация(например, ) имеет смысл.
    А, значит, надо либо модифицировать дерево, либо переходить к массиву.
    Программисты есть в треде? Как сделать так, чтобы сразу прыгать к "Т", спускаться на уровень ниже и сразу прыгать к "И"?
    Получается, можно на каждом уровне сделать (под)массив из 52 ячеек, каждая из которых хранит ссылку на подмассив уровня ниже. А самый нижний подмассив уже содержит значение комбинации(флаш, стрит и т.д.)
    Забавно, забавно.
    ЗЫ Есть и хорошие новости. При модификации дерева алгоритмы критических изменений не претерпят. Наоборот, станут ещё быстрее. Только выиграли!
    Ответить Цитировать
    410/741
    + 0
  • БиллиУбили @ 30.1.2020
    Получается, можно на каждом уровне сделать (под)массив из 52 ячеек, каждая из которых хранит ссылку на подмассив уровня ниже. А самый нижний подмассив уже содержит значение комбинации(флаш, стрит и т.д.)

    такими темпами, ты и массив изобретешь (которым я пользуюсь)

    теперь осталось придумать, чтобы все ветви дерева ссылались на один массив с комбинациями. те все перестановки веток приводили в одно место, для экономии места.
    Ответить Цитировать
    104/314
    + 0
  • Jak @ 30.1.2020
    теперь осталось придумать, чтобы все ветви дерева ссылались на один массив с комбинациями. те все перестановки веток приводили в одно место, для экономии места.

    Придётся придумать, куда же без экономии места ))
    ЗЫ Слава богу, я значительно продвинулся в разложении фантазий, так что запуск пилота не за горами
    Ответить Цитировать
    411/741
    + 0
  • Ну, не факт, что ты именно фантазии раскладываешь. Мне кажется, ты просто находишь первую лучшую комбинацию на три линии и радостно выходишь из цикла с криком: Нашел!!!
    А то, что возможны лучшие варианты, ты это игнорируешь. И не ищешь их.
    Ответить Цитировать
    105/314
    + 0
  • Jak @ 30.1.2020
    просто находишь первую лучшую комбинацию на три линии

    нет, это не так. я нахожу все комбинации из 3ёх линий(с разной суммой очков)
    Ответить Цитировать
    412/741
    + 0
  • Вспомнился тут один анекдот...
    Встречаются в коридоре Минфина два высоких чиновника и один другому говорит:
    - Слушай, Кузьмич, спасай. Спать спокойно не могу, совесть замучила - ну, не понимаю я наших налоговых реформ.
    - Да не расстраивайся ты из-за такой ерунды. Пойдем ко мне в кабинет, чаю выпьем, я тебе все объясню.
    - Да объяснить-то я и сам могу. Я понять хочу.

    Пока не могу придумать, как этот волшебный массив организовать. Точнее, задумка есть...52*52 должно превратиться в 52*52/2(от перестановки ничего не меняется). 52*52*52 -> 52*52*52/6 и т.д.
    Ответить Цитировать
    413/741
    + 0
  • Jak, подскажи, пожалуйста...а в твоей формуле
    HR5[ HR5[ HR5[ HR5[ HR5[53+c1]+c2]+c3]+c4]+c5]
    там Сi случайно не отсортированы? Или может ты перед запросом сравниваешь с1 и с2, например? Тогда эта формула имела хоть какой-то смысл.
    В общем, я пока думаю модифицировать дерево...там мне всё ясно и понятно ))

    ЗЫ Побежал на работу. До воскресенья, всех обнял.
    Ответить Цитировать
    414/741
    + 0
  • БиллиУбили, нет. ничего там не отсортировано
    это красивое сворачивание полного дерева в массив
    когда в мозгу "щёлкнет" как это работает, это станет просто
    на 16(у меня) странице жак это разжёвывает. возьми например 6 карт(и 2 масти) и попробуй расписать для руки из 3карт
    Сообщение отредактировал Yras - 30.1.2020, 23:40
    Ответить Цитировать
    1/6
    + 0
  • Yras, да он не умеет старые посты читать. по сто раз одно и тоже спрашивает, а ответы читать забывает.
    Ответить Цитировать
    106/314
    + 0
  • Jak @ 31.1.2020
    Yras, да он не умеет старые посты читать. по сто раз одно и тоже спрашивает, а ответы читать забывает.


    Тебе сложно объяснить как это работает?) мозг выносите уже целый год Билли) придется мне... Посмотрел я на этот массив ровно 1 минуту... Классическое хранение графа с помощью одномерного массива ( о как гениально)
    Работает Билли оно так: в первых 52 элементах хранятся смещения, для первых карт Комбинаций, а не то что ты думаешь, а ты думаешь что там хранятся номиналы карт) видимо никогда файловые системы на низком уровне не изучал, там тоже есть таблицы со смещениями и адресами, чтобы найти куски файлов на диске прыгая от одного к другому...

    Поэтому в таком массиве 2+3 не будет равно 1+4 потому что в ячейке 2 и 3 хранятся смещения отличные от ячеек 1и 4 ... И сумма смещений из ячейки 2 и 3 не будет равна сумме ячеек из ячеек 1и 4 , то же самое и для всех 5ти карт... В начале массива хранятся смещения а в конце значения комбинаций, вот мы и четырьмя операциями суммируем смещения , чтобы найти адрес по которому храниться значение ...
    Есть более красивый метод хранения графа но я вам не расскажу) потом как нибудь... Этот осваивай...
    Сообщение отредактировал c00l0ne - 31.1.2020, 9:15
    Ответить Цитировать
    283/882
    + -2
  • Jak @ 3.6.2019
    А тут при первом обращении HR5[53+c1] (оно внутри формулы), мы получим не ответ, а ссылку на адрес внутри массива. К этому адресу добавляем смещение с2 (HR5[53+c1]+c2) и берем следующий адрес в этом же массиве HR5[ HR5[53+c1]+c2] и так далее. Массив устроен таким образом, что если мы поменяем местами с1,с2,с3,с4,с5 и будем брать с2,с5,с1,с4,с3 - все равно ответ будет таким-же. Все эти ссылки попадут в одно место. Первые ЧЕТЫРЕ обращения к массиву дают не ответ, а ссылку на продолжение и ТОЛЬКО ПЯТЫЙ запрос даст ответ!


    А теперь перечитай это и думаю не составит труда сделать такой массив тебе, у Жака правда тараканы те ещё в голове, он думает что мы получаем адрес)
    На самом деле получаем смещение... Нам дают заданную улицу... Говорят что третий дом слева,а в этом доме , пятая доска на заборе, на доске второй листок , на листке в тринадцатой строке записан код комбинации

    Пятимерное пространство вытянутое в одну плоскость...
    Сообщение отредактировал c00l0ne - 31.1.2020, 9:35
    Ответить Цитировать
    284/882
    + -2
  • Жак минусует) сейчас плюсовать начнет)

    Продолжение лекции
    Теперь выворачиваем полученный граф, представь что мы список составили из всех комбинаций, а так же составим список всех улиц домов досок и листочков, в начале расположим список улиц , потом домов, потом, досок потом листков, а карточной аналогии это будет пять колод и мы будем брать номера колод и номера карт в этих колодах... Вложенных в друг друга... Но самое простое что надо понять , то что колоды у нас одинаковые, как и то что адреса улица дом доска листок строка некоторые ведут к одной и той же строке в списке комб... Т.к. набор их ограничен... А адресов гораздо больше этого набора... Продолжение следует...
    Сообщение отредактировал c00l0ne - 31.1.2020, 11:19
    Ответить Цитировать
    285/882
    + 0
  • чет много минусов ну тогда разбирать построение массива HR не будем) им нравится просто быть юзерами - заюзал и забыл
    Ответить Цитировать
    286/882
    + 0
  • Сначала я написал как устроен массив, начало #307, #309, #312, все разжевал с примерами - обсмеяли. Я предложил забыть.
    Потом Galax - начал тут #315, #317, потом он супер! объяснил устройство массива: #482. Прям для малышевой группы детсада, на пальцах!

    c00l0ne @ 31.1.2020
    тогда разбирать построение массива HR не будем

    Что тут еще разбирать?
    c00l0ne @ 31.1.2020
    у Жака правда тараканы те ещё в голове, он думает что мы получаем адрес)
    На самом деле получаем смещение...

    а вот мое сообщение:

    мы получим не ответ, а ссылку на адрес внутри массива. К этому адресу добавляем смещение с2 ...

    не один ли хер: ссылка, адрес, смещение - пох как назвать это число. Это промежуточное число, не результат.

    А тараканы-то у тебя. Тоже не мог сразу понять как устроен массив. Наверно так, нет наверно так...

    Только пиздеть мастер.

    Вот я скоро сделаю!!! Да времени нет.
    Да у меня есть солвер!!! Вот скоро выложу! за 10$
    Дайте недельку на примеры!!! Скоро сделаю!
    Могу дать инфу!!! За 100$!
    В своем блоге вообще всех задрочил. Если кто не угадает как ты сходил - все!! Все задачки не на то, как ПРАВИЛЬНО сходить исходя из вероятностей, а то как ТЫ сходил.
    и т.д.

    Видимо сложности с баблом, всяко пытаешься заработать.
    Ответить Цитировать
    107/314
    + 1
  • c00l0ne,

    у Жака правда тараканы те ещё в голове, он думает что мы получаем адрес)
    На самом деле получаем смещение...

    Этой фразой ты демонстрируешь во-первых, свою манеру общения (наверное не зря у тебя такой рейтинг?), а во-вторых уровень своей компетенции в данном вопросе.
    Не надо по третьему кругу заводить пластинку про эти массивы. В течении года и я и Jak по несколько раз разжевывали все как могли, я даже приводил аналогию с настольной игрой с кубиками. Но для Билли это все не нужно. Он твердо решил, что будет делать все по-своему, лучше, быстрее, точнее. Поэтому не сбивайте его с выбранного пути. Никаких массивов, только хардкор, только строки и расстояние Дамерау — Левенштейна и все такое...
    Билли доделай уже свои задумки до конца и утри всем носа.

    P.S. Пока писал, Jak написал почти тоже самое.
    Ответить Цитировать
    38/52
    + 1
  • Блин, даже не знаю...нет времени обьяснять, отвечать каждому в подробностях.
    Во-первых, почему кто-то решил, что волшебный массив HR5 - ключ ко всем проблемам и, вообще, лучше сделать нельзя. А если кто-то им не пользуется, то он редиска и нехороший человек...
    теперь смотрим знаменитый пост #482 от Galax
    Galax @ 11.12.2019
    Благодаря этому удается сжать пятимерный массив невероятных размеров [52, 52, 52, 52, 52] до вполне разумного по размерам одномерного массива.

    Вы меня простите, но человек НЕ понимает, что пишет. Нет никакого сжатия до разумного размера!
    Многомерный массив сжимается всего лишь ровно в 5! = 120 раз, за счёт того что он ВРУЧНУЮ трактует комбинации, одинаковые до перестановки, как одну.
    Всё! Больше никакого секрета в нём нет.
    Просто я РАНЕЕ предполагал, что хоть массив состоит из ссылок, но строят их на основе какого-то хитрого приведения ВСЕХ возможных перестановок в комбинации к какому-то одному. Этого в массиве нет. Там просто в конце приписывается комбинация. Что, кстати, не исключает ошибок при его заполнении.
    В этом смысле c00l0ne отчасти прав: массив удобен для работы для программиста среднего уровня(никакого не хочу обидеть или в чём-то обвинить).
    Почему я решил вернуться к массиву, когда практически всё написал "на дереве"?
    Да просто дерево у меня пока не нагружено. И вместо обязательной проверки 52 ответвлений, я перескакивал по существующим ответвлениям(около 5). Также по этой причине во всех алгоритмах я делал поиск по все существующим ответвлениям, а не сразу прыгал на нужное ответвление.
    (например, ищу ТИГР. Нахожу Т, спускаюсь на уровень ниже...начинаю искать И...этого можно и не делать, а сразу переходить к ответвлению "И", которое будет А...И - 10ым по счёту).
    Вы скажите: обратиться к 50му элементу массива быстрее, чем 50раз прыгать с начала дерева.
    Но я провёл эксперимент и выяснил, что 50 рандомных перескоков по ячейкам памяти по времени практически равносильно перескоку к ячейки памяти с адресом = адрес +50.
    К тому же, мы не знаем, как на самом деле хранится огромный массив в памяти. Сомневаюсь, что это 1кк ячеек подряд. Возможно, это 200кк в одной области, 200кк ещё где-то и 600кк ещё где-то. То есть перескоки будут и в случае обращения к массиву.
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    На этом холиварные войны прощу закончить.
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Чуть попозже выложу основные параметры моей прожки. Точнее, для версии 1.0
    Там всё будет на "деревьях". Вот доведём её до конца, и, если будет тормозить, буду переписывать на "массивах".
    Ответить Цитировать
    415/741
    + 0
1 30 50 51 52 53 72 114
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.