![]() |
![]() |
![]() |
|
Генерация карт лото или три года спустя | ☑ | ||
---|---|---|---|---|
0
1Сергей
18.07.12
✎
09:59
|
Продолжение некротемы Генерация карт лото
Задача была "для себя", потому сильно не стал заморачиваться, и бросил. Но, сейчас, спустя три года меня осенило. Я её таки решил. Если кому интересно рассказываю алгоритм. По условию задачи, имеются 6 карт с таблицами 3*9 клеток. В них записаны номера с 1 по 90, по 15 номеров на каждой карте. В каждой строке каждой карты по 5 номеров (4 пустых клетки). В колонке карты может быть 1 или 2 номера (не ноль и не три) пример http://savepic.su/2208500.gif Таким образом, в колонке 1 размещены 9 номеров(1-9), в колонках 2-8 по 10 номеров, в колонке 9 - 11 номеров (80-90) Чтобы 15 номеров (одна карта) распределить на 9 кучек (колонок) по 1 или 2 номера, может получится только 1+1+1+2+2+2+2+2+2. Других вариантов быть не может. Рассмотрим распределения колонок по 6 картам: 1 колонка, 9 номеров: 1+1+1+2+2+2 2-8 колонки, 10 номеров: 1+1+2+2+2+2 9 колонка, 11 номеров: 1+2+2+2+2+2 Теперь сам алгоритм 1. Распределяем "единицы" (колонки с одним номером) по картам/колонкам 1.1. Случайным образом выбираем одну карту, в которой в последней колонке будет 1 номер. 1.2. В колонках 1-8 случайным образом выбираем две карты, в которых будут "единицы". Следим, чтобы в карточке не получалось больше 3 единиц. 1.3. В одной из карт должно получится всего 2 единицы. Если в первой колонке этой карты уже установлена единица, то следует повторить п.1.2, перезаполнить колонки 1-8. Если же в первой колонке этой карты единицы нет, то устанавливаем туда единицу. 2. Распределяем единицы и двойки по строкам карт. Или, точнее, выбираем клетки, которые будут заполнены. 2.1. Заполняем первые строки карт. Для каждой карты случайным образом выбираем 5 колонок. В первых строках этих карт в выбранных колонках будут номера. 2.2. Заполняем вторые строки карт. 2.2.1. Вибираем колонки с двойками, в которых первые строки пустые. В таких колонках вторые (и третьи) строки будут заполнены. 2.2.2. Случайным образом выбираем ещё колонки для заполнения 2-ой строки (должно быть заполнено 5 клеток). Следим, чтобы количество заполненных клеток по колонке карты не превышало 1 или 2 согласно распределенным единицам и двойкам в п.1. 2.3. Заполняем третьи строки. Выбираем колонки, в которых количество заполненных клеток меньше распределенных нами единиц и двоек (п.1). 3. Распределяем номера по выбранным нами клеткам в п.2. 3.1. Для каждого номера 1-90 определяем номер колонки. Случайным образом выбираем незаполненную клетку (карту/строку), согласно п.2. она должна быть выбранна нами для заполнения. Реализация на 1С 77: http://zalil.ru/33582480 |
|||
1
Vladal
18.07.12
✎
10:22
|
Когда-то О-Планет на Инфостарте писал о реализации Спортлото, как-то так у него всё быстро работало на файловой со всеми мильёнами вариантов. Или не так.
|
|||
2
Vladal
18.07.12
✎
10:22
|
Повесь эту игрушку на Инфостарт.
|
|||
3
vde69
18.07.12
✎
10:25
|
почему нельзя использовать заранее определенные варианты и генератором выбирать просто порядковый номер?
|
|||
4
Ненавижу 1С
гуру
18.07.12
✎
10:25
|
(3) ну тогда надо либо все варианты заранее сгенерировать, либо не все варианты будут использованы
|
|||
5
vde69
18.07.12
✎
10:27
|
(4) в реальном лото ты выбираешь из готовой пачки, там не так много вариантов...
|
|||
6
Ненавижу 1С
гуру
18.07.12
✎
10:27
|
(5) то реальное
|
|||
7
vde69
18.07.12
✎
10:33
|
(6) кстати хороший вброс: сколько может быть вариантов?
|
|||
8
1Сергей
18.07.12
✎
10:44
|
(6) вариантов на самом деле очень много. Некоторые лотереи генерируют билеты по тому же принципу, а билетов у них миллионы
|
|||
9
Алистар
18.07.12
✎
10:45
|
вчера поиграл в лото в Сбербанке проиграл 30р
|
|||
10
1Сергей
18.07.12
✎
10:49
|
(1) много встречал реализаций данной задачи, но не одна не выполняла всех правил. Часто каждая карточка заполнялась отдельно, отчего в трёх карточка подряд могли попадаться одинаковые номера. Видел, что в карточках заполнялись сразу три клетки в колонке или даже совсем ни одной
|
|||
11
1Сергей
18.07.12
✎
10:51
|
Кстати, в воскресенье купил настольную игру Лото. И что же я там увидел? Неправильно заполненные карточки. Собственно, это и побудило меня "взяться за старое"
|
|||
12
Sensodin
18.07.12
✎
11:01
|
(11) а как вы определили то что они неправильно заполнены?
|
|||
13
1Сергей
18.07.12
✎
11:02
|
(12) на первой и второй карте (они пронумерованы) были одинаковые числа. В некоторых колонках по 3 числа, в некоторых ни одного
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |