Я пытаюсь создать карту бинго, которая должна быть установлена с учетом следующих правил:Бинго Алгоритм в C#
- Бинго карта будет иметь 9 столбцов и 3 строк
- Каждый строк должен иметь 5 чисел
- Там не может быть больше, чем 2 пустые блоки следующие друг OTER в одной строке
- Там не может быть больше, чем 2 числа следующих друг с другом в одной строке
До сих пор мне удалось создать карту, содержащую 9 столбцов и 3 строки, и заполнил карту уникальными случайными числами, но я не могу понять, как достичь 3-го и 4-го правил.
В конце концов, бинго карта должна выглядеть примерно так:
1 EMPTY 18 EMPTY 12 EMPTY 40 EMPTY 32
EMPTY 2 EMPTY EMPTY 67 33 EMPTY 44 EMPTY
90 EMPTY 79 EMPTY 38 EMPTY 55 EMPTY 71
В моем алгоритме я не знаю, как поставить пустые блоки и избежать повторений их более чем в два раза
Моей карточки функция генератора:
public GameCard GetCard()
{
//This is the list of all numbers between 1 and 99
var availableNumbers = Enumerable.Range(CARD_NUM_MIN, CARD_NUM_MAX).ToList();
var card = new GameCard();
//looping for 9 columns
for (var col = 0; col < CARD_COL_COUNT; col++)
{
var cardColumn = new CardColumn();
//looping for 3 rows in each column
for (var row = 0; row < CARD_ROW_COUNT; row++)
{
var cardRow = new NumberBlock();
//getting a random number from availableNumbers and removing that number from list to avoid duplicate numbers.
var rand = RandomNumberGenerator.Instance.Next(availableNumbers.Count - 1);
cardRow.Value = availableNumbers[rand];
availableNumbers.RemoveAt(rand);
//I believe somewhere here I should check if there will be more than 5 numbers in a row, or should randomly generate empty blocks? Can't really figure out...
cardColumn.Rows.Add(cardRow);
}
card.Columns.Add(cardColumn);
}
return card;
}
GameCard класс:
public class GameCard
{
public string CardId { get; set; }
public List<CardColumn> Columns { get; set; }
public GameCard()
{
Columns = new List<CardColumn>();
}
}
класс CardColumn
public class CardColumn
{
public int Count { get; set; }
public List<NumberBlock> Rows { get; set; }
public CardColumn()
{
Rows = new List<NumberBlock>();
}
}
NumberBlock класс
public class NumberBlock
{
public int Value { get; set; }
public bool IsBlank { get; set; }
public NumberBlock()
{
IsBlank = false;
}
}
Почему существуют пустые блоки? –
Ваши правила немного расплывчаты. Не могли бы вы изменить свой вопрос, чтобы выяснить, какие меры будут нарушать ваши правила? –
Вторая строка вашего примера нарушает ваше второе правило! – Graham