Нужен пример рандомизации сетки с символами, которые имеют разное количество

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

      string[,] board = new string[4, 4];
for (int y = 0; y < 4; y++)
{
    for (int x = 0; x < 4; x++)
    {
        board[x, y] = ".";
    }
}

Я пытаюсь придумать, как разместить случайные символы вместо "." проблема заключается в количестве каждого значения, которое необходимо заполнить. Например, должно быть заполнено 1 «E» и 1 «T», но остальная часть сетки должна быть «N» и «L», количество не имеет значения.

Я пробовал сделать это так, но это не сработало

      string[] values{"N", "L"}
int index = rand.Next(values.Length);

board[0, 0] = values[index];
board[0, 1] = values[index];
board[0, 2] = values[index];
board[0, 3] = values[index];
    //etc...```

Я огляделся и, кажется, не нашел ни одного примера того, что пытаюсь сделать.

2 ответа

Я бы сначала заполнил «N» и «L», а затем заменил бы две случайные позиции на «E» и «T».

      string[,] board = new string[4, 4];
string[] nl = { "N", "L" };
for (int y = 0; y < 4; y++)
{
    for (int x = 0; x < 4; x++)
    {
        board[x, y] = nl[rand.Next(2)];
    }
}

Теперь у нас есть доска, полная букв "N" и "L". Давайте выберем две случайные позиции, чтобы заполнить букву «Е» и «Т».

      int x = rand.Next(4);
int y = rand.Next(4);
board[x, y] = "E";

int x2, y2;
// Ensure that we don't place the "T" at the same place as the "E"
do {
    x2 = rand.Next(4);
    y2 = rand.Next(4);
} while (x2 == x && y2 == y);
board[x2, y2] = "T";

Вы можете попробовать следующий код:

      private static Random random = new Random();
public static string RandomString(int length)
{
    const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    return new string(Enumerable.Repeat(chars, length)
      .Select(s => s[random.Next(s.Length)]).ToArray());
}
Другие вопросы по тегам