Как случайно перемешать и раздать карты в Excel с помощью динамических массивов
Динамические массивы в Excel открывают новые возможности для моделирования случайных процессов. В этой статье мы разберем, как создать, перемешать и раздать колоду из 52 карт, используя современные функции, такие как ПОСТОЛБЦ (TOCOL), СОРТПО (SORTBY), СЛУЧМАССИВ (RANDARRAY), СВЕРНСТОЛБЦ (WRAPCOLS) и СВЕРНСТРОК (WRAPROWS).
Этот метод идеально подходит для создания симуляторов карточных игр, проведения статистических экспериментов или просто для демонстрации мощности динамических массивов.
Создание и перемешивание колоды
Сначала создадим полный набор из 52 карт. Предположим, что значения карт (от двойки до туза) находятся в диапазоне A5:A17, а масти (пики, червы, бубны, трефы) — в B4:E4.
- В ячейке
B5введите формулу для создания прямоугольного массива всех карт:
Эта формула объединит каждое значение с каждой мастью, создав массив 13x4.=А5:А17&Б4:Д4 (=A5:A17&B4:E4) - Чтобы преобразовать этот двумерный массив в один столбец, используйте функцию
ПОСТОЛБЦ (TOCOL)в ячейкеG5:
Символ=ПОСТОЛБЦ(Б5#) (=TOCOL(B5#))#указывает на весь динамический массив из предыдущего шага. - Для случайного перемешивания колоды примените
СОРТПО (SORTBY)вместе сСЛУЧМАССИВ (RANDARRAY):
Каждый пересчет листа (например, нажатие=СОРТПО(Ё5#, СЛУЧМАССИВ(52)) (=SORTBY(G5#, RANDARRAY(52)))F9) генерирует новую случайную последовательность карт.
Совет:
Динамические массивы по-прежнему не копируют форматирование. Красный цвет для бубнов и червей на скриншоте достигается с помощью правил условного форматирования, примененных ко всему листу.
Раздача карт игрокам
После того как колода перемешана, карты можно раздать игрокам с помощью функций СВЕРНСТОЛБЦ (WRAPCOLS) (по столбцам) или СВЕРНСТРОК (WRAPROWS) (по строкам).
- Предположим, перемешанная колода находится в динамическом массиве
I5#. Чтобы раздать карты 6 игрокам, используйте:
Аргумент=СВЕРНСТОЛБЦ(З5#, 6, "") (=WRAPCOLS(I5#, 6, ""))""(пустая строка) вPad_Withпредотвращает ошибку#Ч (N)/A, если количество карт не кратно числу игроков. В этом случае первые 4 игрока получат по 9 карт, а последние два — по 8. - Если в игре карты раздаются по одной (сначала всем по одной, потом по второй и т.д.), лучше подойдет
СВЕРНСТРОК (WRAPROWS). Чтобы раздать первые 8 карт в одну стопку:=СВЕРНСТРОК(TAKE(З5#, 8), 4) (=WRAPROWS(TAKE(I5#, 8), 4))
Продвинутые техники: все в одной формуле
Можно объединить все шаги — создание, перемешивание и раздачу — в одну мощную формулу.
=СВЕРНСТОЛБЦ(СОРТПО(ПОСТОЛБЦ(А5:А17&Б4:Д4), СЛУЧМАССИВ(52)), 6, "") (=WRAPCOLS(SORTBY(TOCOL(A5:A17&B4:E4), RANDARRAY(52)), 6, ""))
Чтобы гарантировать, что каждый игрок получит ровно по 5 карт (например, для покера), используйте функцию TAKE (TAKE):
=TAKE(СВЕРНСТОЛБЦ(З5#, 4), , 5) (=TAKE(WRAPCOLS(I5#, 4), , 5))
Эта формула сначала раздает карты на 4 игрока, а затем берет только первые 5 столбцов (карт) для каждого.
Заключение
Использование динамических массивов для перемешивания и раздачи карт в Excel — это наглядный пример того, как современные функции упрощают сложные операции с данными. Комбинируя ПОСТОЛБЦ (TOCOL), СОРТПО (SORTBY), СЛУЧМАССИВ (RANDARRAY), СВЕРНСТОЛБЦ (WRAPCOLS)/СВЕРНСТРОК (WRAPROWS) и TAKE (TAKE), вы можете создавать гибкие и эффективные модели для игр, симуляций и анализа данных прямо в электронной таблице.