Возрождение Эрафии... или неожиданное второе дыхание

Последний пост:07.07.2023
3
Статистика
Всего постов
32
1,727 просмотров
Новых постов
+0
4 в день
Лучшие посты автора
07.07.2023 0
06.07.2023 0
05.07.2023 0
05.07.2023 0
05.07.2023 0
Лучшие посты читателей
c00l0ne 0
c00l0ne 0
c00l0ne 0
c00l0ne 0
c00l0ne 0
Самые активные читатели
c00l0ne 13
1 2
  • Всем привет!

    Здесь должна быть ссылка на предыдущий дневник, но мне лень её искать)

    Открываю новый дневник в связи с появлением такой штуки, как ChatGPT May 24 Version

    Теперь можно формулировать запросы на русском  человеческом языке, а ИИ будет писать код.

    Ну, так вот. Почему не удалась предыдущая попытка написать солвер для ОФС?

    сначала я влетел в непонимание масштаба проблемы P = NP, а когда можно было бы реализовать дерево Монте-Карло...не хватило навыков программирования  быстро писать код.

     

    Теперь, я надеюсь, мы начнём с самых азов и дойдём до любого уровня абстракции(упрощения)

     

    Вот первая задача, которая была мною сформулирована. После нескольких уточнений, но всё-таки...

     

    У нас есть колода из 52 карт. На первом ходу мы вытаскиваем одну карту из колоды и решаем, на какую из двух полок (верхнюю или нижнюю) положить эту карту. Затем, на втором ходу, мы вытаскиваем ещё одну карту из оставшихся в колоде (без возврата), и в зависимости от положения карт на полках, начисляем очки.

    Правила начисления очков такие:

    Если карта на верхней полке младше карты на нижней полке, мы получаем 2 очка.

    Если карта на верхней полке старше карты на нижней полке, мы теряем 6 очков.

    Задача состоит в том, чтобы определить, на какую полку положить карту на первом ходу, чтобы получить максимальное количество очков в итоге после двух ходов.

     

    Вот код. Опять же, после ряда уточнений.

    #include <iostream>
    #include <cstdlib>
    #include <ctime>

    // Функция для определения, на какую полку положить карту на первом ходу
    std::string chooseShelf(int card) {
       // Положим карту на верхнюю полку, если она младше или равна 26
       if (card <= 26) {
           return "Верхняя";
       }
       // Иначе положим карту на нижнюю полку
       else {
           return "Нижняя";
       }
    }

    // Функция для вычисления общего количества очков
    int calculateTotalScore(int card1, int card2, std::string shelf1) {
       int upperShelfScore = 0;
       int lowerShelfScore = 0;

       // Проверяем положение карт на полках и начисляем очки
       if (shelf1 == "Верхняя") {
           if (card1 < card2) {
               upperShelfScore += 2;
           }
           else {
               upperShelfScore -= 6;
           }
       }
       else {
           if (card1 < card2) {
               lowerShelfScore += 2;
           }
           else {
               lowerShelfScore -= 6;
           }
       }

       // Возвращаем общее количество очков
       return upperShelfScore + lowerShelfScore;
    }

    int main() {
       // Инициализируем генератор случайных чисел
       std::srand(std::time(0));

       // Вытаскиваем карту на первом ходу
       int card1 = std::rand() % 52 + 1;

       // Определяем, на какую полку положить карту на первом ходу
       std::string shelf1 = chooseShelf(card1);

       // Вытаскиваем карту на втором ходу
       int card2 = std::rand() % 51 + 1;

       // Вычисляем общее количество очков
       int totalScore = calculateTotalScore(card1, card2, shelf1);

       // Выводим результаты
       std::cout << "Карта на первом ходу: " << card1 << std::endl;
       std::cout << "Карта на втором ходу: " << card2 << std::endl;
       std::cout << "Лучшая полка для карты на первом ходу: " << shelf1 << std::endl;
       std::cout << "Общее количество очков: " << totalScore << std::endl;

       return 0;
    }
     

     

    Код рабочий. 8ку он уверенно положил наверх, а 26 - вниз

     

    Забегаю вперёд, ИИ знаком с методом Монте-Карло. Так что сначала потренируемся на полках и картах а потом перейдём к полноценным наборам комбинаций на всех боксах.

     

    К чему я это всё написал? Присоединяйтесь. Теперь ваши идеи(гипотезы, проверки) могут быть реализованы за 1-2 дня(в отличии от месяцев, которые потратил бы "программист" моего уровня)

    Математики тоже велком. Формируйте свои запросы - получайте ваши ответы

     

    Всем удачи! До следующего раза

     

    PS В ближайших планах увеличивать кол-во полок и узнать, на каком кол-ве полный перебор "сломается"

    1/19
    Ответить Цитировать
    0
  • поиграл ещё немножко

    задача

    Игра основана на заполнении трех полок из колоды из 52 карт.

    Изначально все полки пустые, а в колоде имеется 52 карты.

    Заполнение полок происходит путем выбора карт из колоды и помещения их на свободные полки.

    Каждая полка может содержать только одну карту.

    На одной полке может находиться только одна карта.

    Игра продолжается до тех пор, пока все карты не будут размещены на полках.

    Цель игры - найти общее количество возможных способов заполнения полок.

    Правила не ограничивают количество ходов или стратегию игрока. Задача заключается в определении количества возможных способов заполнения полок, учитывая ограничения на количество полок и наличие только одной карты на полке.

    код

    #include <iostream>
    #include <array>
    #include <vector>

    const int maxShelves = 3;  // Количество полок

    struct GameState {
       std::array<int, maxShelves> shelves;  // Полки
       std::vector<int> deck;  // Колода карт
       int numMoves;  // Количество ходов
    };

    void generateAllPossibleStates(const GameState& currentState, std::vector<GameState>& allStates) {
       for (int i = 0; i < currentState.deck.size(); i++) {
           int card = currentState.deck;
           for (int j = 0; j < maxShelves; j++) {
               GameState nextState = currentState;
               if (nextState.shelves[j] == 0) {
                   nextState.shelves[j] = card;
                   nextState.deck.erase(nextState.deck.begin() + i);
                   allStates.push_back(nextState);
               }
           }
       }
    }

    int countPossibleWays(const GameState& currentState) {
       std::vector<GameState> allStates;
       generateAllPossibleStates(currentState, allStates);
       if (allStates.empty()) {
           return 1;  // Достигнуто конечное состояние
       }
       int count = 0;
       for (const auto& nextState : allStates) {
           count += countPossibleWays(nextState);
       }
       return count;
    }

    int main() {
       GameState initialState;
       initialState.shelves.fill(0);  // Изначально все полки пустые

       // Создаем колоду из 52 карт
       for (int i = 1; i <= 52; i++) {
           initialState.deck.push_back(i);
       }

       initialState.numMoves = 0;  // Начальное количество ходов

       int possibleWays = countPossibleWays(initialState);

       std::cout << "Number of possible ways to fill shelves: " << possibleWays << std::endl;

       return 0;
    }
     

    код достаточно грамотный, генерируется с нулевой задержкой

    а вот результаты плачевные. для колоды в 42 карты ответ пришёл через 40(сорок) секунд. 


    Это, конечно, ни в какие ворота не лезет

     

    Сейчас попробую дать задачку на нахождение (заданной) комбинации из колоды 13-14-15 карт. Если и там будут секунды, то такого быть не может )


     

    ЗЫ В принципе, ИИ не так уж плох. Если бы через каждые 3 уточнения не забывал, что 

    - у нас один игрок

    - целью игры не является минимизация кол-ва ходов

    2/19
    Ответить Цитировать
    0
  • да уж, ИИ однозначно умеет программировать

    задача

    Задача: Поиск флеша в комбинации карт

    Вам необходимо реализовать программу, которая находит флеш (пять карт одной масти) в комбинации карт.

    Входные данные:

    Комбинация карт представлена в виде массива или списка.

    Каждая карта представлена целым числом от 1 до 52, где каждое число представляет уникальную карту. Например, числа от 1 до 13 представляют карты пик, от 14 до 26 - треф, от 27 до 39 - бубен, от 40 до 52 - червей.

    Размер комбинации карт может быть от 5 и более.

    Выходные данные:

    Программа должна вывести сообщение о наличии или отсутствии флеша в комбинации карт.

    Если в комбинации есть пять и более карт одной масти, программа должна вывести сообщение "Флеш найден!".

    Если в комбинации нет флеша, программа должна вывести сообщение "Флеш не найден.".

    код

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <random>

    bool hasFlush(std::vector<int>& cards) {
       int count[4] = {0}; // Массив для подсчета количества карт каждой масти

       for (int card : cards) {
           int suit = (card - 1) / 13; // Вычисляем номер масти для каждой карты
           count[suit]++;

           if (count[suit] >= 5) {
               return true; // Если найдено 5 или более карт одной масти, возвращаем true
           }
       }

       return false; // Если флеш не найден, возвращаем false
    }

    int main() {
       std::random_device rd;
       std::mt19937 gen(rd());
       std::uniform_int_distribution<int> dis(1, 52);

       int numCombinations = 1000000;
       int numCards = 15;

       int flushCount = 0;

       for (int i = 0; i < numCombinations; ++i) {
           std::vector<int> cards(numCards);

           // Генерируем случайные карты
           for (int j = 0; j < numCards; ++j) {
               cards[j] = dis(gen);
           }

           if (hasFlush(cards)) {
               flushCount++;
           }
       }

       std::cout << "Из " << numCombinations << " комбинаций, " << flushCount << " содержали флеш." << std::endl;

       return 0;
    }
     

    проверка 1КК 15карточных наборов за чуть больше секунду. Но это ещё куда не шло, учитывая поиск в лоб.

     

    Возвращаюсь к волшебному массиву [52][52][52][52][52] и немножко поиграюсь

    Если у кого есть идеи(именно идеи) как искать 5-карточные комбинации в наборе из N-карт  - милости прошу

     

    Ну, а пока до следующего раза)

    3/19
    Ответить Цитировать
    0
  • Ебать, он разваливает кабины

    Задача

    Задача состоит в сравнении трёх различных алгоритмов поиска флеша в наборе карт:

    Метод полного перебора: Перебираются все возможные комбинации из 5 карт, и каждая комбинация проверяется на наличие флеша (5 карт одной масти). Если флеш найден, алгоритм возвращает "true", иначе "false".

    Метод комбинаций на основе рекурсии: Используется рекурсивный подход для генерации всех комбинаций из 5 карт. Каждая комбинация проверяется на наличие флеша. Если флеш найден, алгоритм возвращает "true", иначе "false".

    Метод бинарного поиска: Используется бинарный метод для генерации всех возможных подмножеств из 5 карт. Каждое подмножество проверяется на наличие флеша. Если флеш найден, алгоритм возвращает "true", иначе "false".

    Требуется сгенерировать 10000 случайных наборов из 15 карт и для каждого набора запустить каждый из трёх алгоритмов, замеряя время выполнения каждого алгоритма. В результате нужно вывести время выполнения каждого алгоритма для каждого набора карт.

     

     

     

    Код

    #include <iostream>
    #include <vector>
    #include <ctime>

    // Метод полного перебора для поиска флеша
    bool hasFlushBruteForce(std::vector<int>& cards) {
       // Перебираем все возможные комбинации из 5 карт
       for (int i = 0; i < cards.size() - 4; ++i) {
           for (int j = i + 1; j < cards.size() - 3; ++j) {
               for (int k = j + 1; k < cards.size() - 2; ++k) {
                   for (int l = k + 1; l < cards.size() - 1; ++l) {
                       for (int m = l + 1; m < cards.size(); ++m) {
                           // Проверяем комбинацию на наличие флеша
                           // ...

                           // Пример проверки на флеш (5 карт одной масти)
                           int suit = cards / 13;
                           if (cards[j] / 13 == suit && cards[k] / 13 == suit &&
                               cards[l] / 13 == suit && cards[m] / 13 == suit) {
                               return true; // Флеш найден
                           }
                       }
                   }
               }
           }
       }

       return false; // Флеш не найден
    }

    // Метод комбинаций на основе рекурсии для поиска флеша
    bool hasFlushRecursive(std::vector<int>& cards, std::vector<int>& combination, int index) {
       if (combination.size() == 5) {
           // Проверяем комбинацию на наличие флеша
           // ...

           // Пример проверки на флеш (5 карт одной масти)
           int suit = cards[combination[0]] / 13;
           for (int i = 1; i < 5; ++i) {
               if (cards[combination] / 13 != suit) {
                   return false; // Карты разных мастей, флеш не найден
               }
           }

           return true; // Флеш найден
       }

       for (int i = index; i < cards.size(); ++i) {
           combination.push_back(i);
           if (hasFlushRecursive(cards, combination, i + 1)) {
               return true; // Флеш найден в текущей комбинации
           }
           combination.pop_back();
       }

       return false; // Флеш не найден в комбинации
    }

    // Метод бинарного поиска для поиска флеша
    bool hasFlushBinarySearch(std::vector<int>& cards) {
       // Функция для проверки наличия флеша в подмножестве карт
       auto checkFlushSubset = [&](std::vector<int>& subset) {
           // Проверяем подмножество карт на наличие флеша
           // ...

           // Пример проверки на флеш (5 карт одной масти)
           int suit = cards[subset[0]] / 13;
           for (int i = 1; i < 5; ++i) {
               if (cards[subset] / 13 != suit) {
                   return false; // Карты разных мастей, флеш не найден
               }
           }

           return true; // Флеш найден
       };

       // Генерируем все возможные подмножества из 5 карт с использованием бинарного метода
       int totalCards = cards.size();
       for (int mask = 31; mask < (1 << totalCards); ++mask) {
           std::vector<int> subset;
           for (int i = 0; i < totalCards; ++i) {
               if (mask & (1 << i)) {
                   subset.push_back(i);
               }
           }

           if (subset.size() == 5 && checkFlushSubset(subset)) {
               return true; // Флеш найден
           }
       }

       return false; // Флеш не найден
    }

    int main() {
       // Генерируем 10000 случайных наборов из 15 карт
       std::vector<std::vector<int>> cardSets;
       for (int i = 0; i < 10000; ++i) {
           std::vector<int> cards;
           for (int j = 0; j < 15; ++j) {
               cards.push_back(rand() % 52); // Генерируем случайные числа от 0 до 51
           }
           cardSets.push_back(cards);
       }

       // Замеряем время выполнения метода полного перебора
       clock_t startBruteForce = clock();
       for (int i = 0; i < cardSets.size(); ++i) {
           hasFlushBruteForce(cardSets);
       }
       clock_t endBruteForce = clock();
       double timeBruteForce = double(endBruteForce - startBruteForce) / CLOCKS_PER_SEC;

       // Замеряем время выполнения метода комбинаций на основе рекурсии
       clock_t startRecursive = clock();
       for (int i = 0; i < cardSets.size(); ++i) {
           std::vector<int> combination;
           hasFlushRecursive(cardSets, combination, 0);
       }
       clock_t endRecursive = clock();
       double timeRecursive = double(endRecursive - startRecursive) / CLOCKS_PER_SEC;

       // Замеряем время выполнения метода бинарного поиска
       clock_t startBinarySearch = clock();
       for (int i = 0; i < cardSets.size(); ++i) {
           hasFlushBinarySearch(cardSets);
       }
       clock_t endBinarySearch = clock();
       double timeBinarySearch = double(endBinarySearch - startBinarySearch) / CLOCKS_PER_SEC;

       // Выводим результаты
       std::cout << "Метод полного перебора: " << timeBruteForce << " сек." << std::endl;
       std::cout << "Метод комбинаций на основе рекурсии: " << timeRecursive << " сек." << std::endl;
       std::cout << "Метод бинарного поиска: " << timeBinarySearch << " сек." << std::endl;

       return 0;
    }
     

    Кто, по-вашему, победил?

    4/19
    Ответить Цитировать
    0
  • Дароу промптер) какой версией chatGpt пользуешься?

    1/13
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 03.07.23)  

    как искать 5-карточные комбинации в наборе из N-карт

    перебираешь пятью циклами номера карт, чекаешь HR5 , находишь старшую комбу максимумом.

    #include <iostream>
    #include <vector>

    // Ваша функция HR
    int HR(const std::vector<int>& five_nums) {
       // Реализация вашей функции HR
       // ...
       // Возвращаем результат
       return result;
    }

    int main() {
       std::vector<int> array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
       int combinationSize = 5;
       int max_value = INT_MIN; // Инициализируем максимальное значение наименьшим целым числом

       int arraySize = array.size();
       for (int i = 0; i < arraySize - combinationSize + 1; i++) {
           for (int j = i + 1; j < arraySize - combinationSize + 2; j++) {
               for (int k = j + 1; k < arraySize - combinationSize + 3; k++) {
                   for (int l = k + 1; l < arraySize - combinationSize + 4; l++) {
                       for (int m = l + 1; m < arraySize - combinationSize + 5; m++) {
                           std::vector<int> five_nums = {array, array[j], array[k], array[l], array[m]};
                           int result = HR(five_nums); // Вызываем функцию HR с текущей пятёркой элементов
                           max_value = std::max(max_value, result); // Обновляем максимальное значение
                       }
                   }
               }
           }
       }

       std::cout << "Максимальное значение: " << max_value << std::endl;

       return 0;
    }
     

    Код сгенерирован gpt 3.5

    Сообщение отредактировал c00l0ne - 3.7.2023, 9:37
    2/13
    Ответить Цитировать
    0
  • Твоя старая тема)

    3/13
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 03.07.23)  

    Дароу промптер)

    Здорово, приятель! кто такой промптер, твой протык?

     

    Цитата (c00l0ne @ 03.07.23)  

    какой версией chatGpt пользуешься?

    Моя текущая версия - OpenAI GPT-3.5. Я являюсь текстовым модулем и не подвергаюсь обновлениям в реальном времени. Моя основная база знаний была обновлена в сентябре 2021 года, поэтому некоторая информация может быть устаревшей. Однако, я постоянно улучшаю свои навыки и знания, основываясь на имеющейся информации.

    5/19
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 03.07.23)  

    чекаешь HR5 , находишь старшую комбу максимумом.

    что такое HR5? ранг комбинации?

    Цитата (c00l0ne @ 03.07.23)  

    перебираешь пятью циклами номера карт, чекаешь HR5

    мм, это полный перебор? спасибо, накушался)

    6/19
    Ответить Цитировать
    0
  • Свежие новости, господа. 

    Похоже, что ИИ меня обыграл и уничтожил 

    , как дешёвку

    ВОт что я пытался ему скормить:

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

    после чего я поставил вопрос ребром:

    тебе известен более эффективный алгоритм поиска?

    И получил таакоее...что челюстняк отвис

    Для задачи поиска комбинаций в заданном наборе карт существует несколько эффективных алгоритмов. Один из них - это алгоритм "отслеживания состояния" (state tracking algorithm), который работает по следующему принципу:

    Создается массив состояний (state array), размер которого равен количеству карт в комбинации. Каждому элементу массива присваивается начальное состояние "неизвестно" или "не рассмотрено".

    Для каждой карты в наборе из 15 карт выполняются следующие шаги:

    a. Берется очередная карта и рассматривается ее позиция в комбинации (от 1 до 5).

    b. Для каждого элемента массива состояний проверяется, совпадает ли значение состояния с текущей картой на рассматриваемой позиции. Если состояние "неизвестно", оно заменяется на значение текущей карты.

    c. Проверяется, выполнены ли условия комбинации на данный момент. Например, если все элементы массива состояний имеют конкретные значения карт, то комбинация считается найденной.

    d. Если условия комбинации не выполнены, переходим к следующей карте в наборе и повторяем шаги a-c.

    Если все карты из набора были рассмотрены, и условия комбинации не выполнены, то комбинация не может быть составлена из заданного набора карт.

    Этот алгоритм эффективен, так как он выполняет поиск комбинации с использованием линейного времени в зависимости от размера набора карт. Он не требует построения дерева и может быть легко реализован в программе.

    ВОпрос к знающим людям: вот это вот будет работать на всём пространстве комбинаций? или алгоритм хорош только для одной-двух комбинаций?

    7/19
    Ответить Цитировать
    0
  • Ебать, вот это буст. Не только ИИ разобрался, что я хочу сделать. Но и предложил то, что я до конца не понимаю.

    МОжет кто-нибудь пояснить, что здесь происходит? я не шучу)

     


    Алгоритм "отслеживания состояния" (state tracking algorithm) может быть эффективным при большом количестве комбинаций. Он позволяет искать часть комбинаций в наборе из 15 карт, используя информацию о состоянии уже найденных карт.

    Если у нас есть 100000 комбинаций и мы хотим проверить, присутствует ли хотя бы одна из них в наборе из 15 карт, мы можем применить алгоритм "отслеживания состояния" следующим образом:

    1. Создаем пустой список состояний (state list).

    2. Берем первую карту из набора из 15 карт. 

    3. Проходим по списку комбинаций и проверяем, является ли текущая карта первой картой в комбинации. Если да, добавляем состояние комбинации в список состояний. 

    4. Берем следующую карту из набора и обновляем список состояний следующим образом: 

    a. Проходим по каждому состоянию в списке состояний. 

    b. Для каждого состояния, проверяем, является ли текущая карта следующей картой в комбинации. 

    c. Если да, обновляем состояние, переходя к следующей карте в комбинации. 

    d. Если состояние достигает конца комбинации, это означает, что комбинация найдена в наборе. Мы можем остановиться и вернуть результат. 

    5. Повторяем шаг 4 для оставшихся карт в наборе.

    8/19
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 05.07.23)  

    Здорово, приятель! кто такой промптер, твой протык?

    4/13
    Ответить Цитировать
    0
  • c00l0ne, сорян

    да, у нейросети есть ключевой недостаток. Каждый запрос формируется с 0

    я уже попался на это, когда 3 раза (в)подряд пытался обьяснить, что у нас один игрок, а не два

    в запросах надо каждый раз начинать сначала)

    9/19
    Ответить Цитировать
    0
  • Цитата (БиллиУбили @ 05.07.23)  

    ВОпрос к знающим людям: вот это вот будет работать на всём пространстве комбинаций? или алгоритм хорош только для одной-двух комбинаций?

    Ты бы описал техническое задание для начала

     

    Нейросетка просто тупит часто, считая что пробежаться по 100к комбинациям изи ... 

    Их ещё и в памяти хранить требуется...

     

    Если требуется найти лучшую комбу из 15 карт то выше перебором это делается за миллисекунду

    Если разложить фантазию в три линии , там немного сложнее но принцип тот же

     

    Если тебе нужна линейная скорость то тебе нужно индексировать все пятьнадцать карт в массив пятнадцати мерный и напрямую снего брать, но это займет немного памяти) много зетабайтов памяти)

    5/13
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 05.07.23)  

    Ты бы описал техническое задание для начала

    да, в принципе, и так понятно

    лежат какие-то карты в линиях...пришёл подьём(3 карты). Надо разложить правильно = либо максимизируя ЕВ, либо минимизируя проигрыш

     

    Цитата (c00l0ne @ 05.07.23)  

    Если разложить фантазию в три линии , там немного сложнее но принцип тот же

    Принцип может каким-угодно. Как доказать, что полученное разложение максимальное по очкам, например?

    10/19
    Ответить Цитировать
    0
  • БиллиУбили, это ты про солвер, для этого тебе нужно составить дерево всех возможных ходов и посчитать Ев в каждом узле дерева, далее просуммировав и выбрав максимальное Ев в каждом узле ты получишь решение

    Jak выклал в паблик готовую софтину уже

    https://t.me/gtpineapple

    6/13
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 05.07.23)  

    Jak выклал в паблик готовую софтину уже

    а зачем мне готовая софтина скотина? МНе интересно написать и разобраться самому

    11/19
    Ответить Цитировать
    0
  • БиллиУбили, почитай плотно старую тему, там много мыслей...

    7/13
    Ответить Цитировать
    0
  • Цитата (c00l0ne @ 05.07.23)  

    составить дерево всех возможных ходов

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

    12/19
    Ответить Цитировать
    0
  • БиллиУбили, для упрощения задачи ты можешь отбросить карту сброса и масти карт, решить без флешей... 

    А по дереву пробегать последовательно ветка за веткой... Хранить все дерево в памяти не обязательно ...

    Цитата (БиллиУбили @ 05.07.23)  

    представления

    Представление имеется)

    Цитата (БиллиУбили @ 05.07.23)  

    пока ты для каждого посчитаешь ЕВ - солнце успеет потухнуть

    У джака быстро считает, с флешами медленно

    8/13
    Ответить Цитировать
    0
1 2
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.