[Randomizer] Nurbolat Solution

 avatar
Alemkhan
csharp
8 months ago
4.9 kB
1
Indexable
Never
using System;

string[] names = new string[]
{
    "name1",
    "name2",
    "name3",
    "name4",
    "name5",
};


void Menu()
{
    Console.WriteLine(
        "Добро пожаловать в рандомайзер!\n" +
        "################################\n" +
        "1. Показать все имена\n" +
        "2. Добавить имена\n" +
        "3. Получить случайные имена\n" +
        "4. Получить случайные команды"
        );

    int input = Convert.ToInt32(Console.ReadLine());

    switch (input)
    {
        case 1:
            PrintNames();
            break;
        case 2:
            AddNames();
            break;
        case 3:
            RandomNames();
            break;
        case 4:
            CreateRandomTeam();
            break;
    }
}


void PrintNames()
{
    int i = 1;
    foreach (string name in names)
    {
        Console.WriteLine($"{i}. {name}");
        i++;
    }
    Console.WriteLine("--------------------");
    Pause();
    Menu();
}


void AddNames()
{
    Console.WriteLine("Напишите все имена через пробел");
    string? tempNames = Console.ReadLine();
    string[] tempArrayNames = tempNames.Split(" ");

    string[] tempArray = new string[tempArrayNames.Length + names.Length];
    for (int i = 0; i < names.Length; i++)
    {
        tempArray[i] = names[i];
    }
    for (int i = names.Length; i < tempArray.Length; i++)
    {
        tempArray[i] = tempArrayNames[i - names.Length];
    }
    names = tempArray;
    Console.WriteLine("Имена успешно сохранились!");

    Pause();
    Menu();
}

string[] RandomElements(int input)
{
    Random random = new Random();

    string[] tempElements = new string[names.Length];

    int i = 0;
    while (i < input)
    {
        int randomIndex = random.Next(names.Length);
        string randomName = names[randomIndex];

        while (tempElements.Contains(randomName))
        {
            randomIndex = random.Next(names.Length);
            randomName = names[randomIndex];
        }

        tempElements[i] = randomName;
        i++;
    }

    return tempElements;
}

void RandomNames()
{
    Console.WriteLine(
        $"Сколько имен хотите в диапазоне от 0 до {names.Length}"
        );
    int input = Convert.ToInt32(Console.ReadLine());
    if (input > 0 && input <= names.Length)
    {
        string[] tempNames = RandomElements(input);

        Console.WriteLine("Случайные имена:");
        foreach (string tempName in tempNames)
        {
            Console.WriteLine(tempName);
        }

        Pause();
        Menu();
    }
}


void CreateRandomTeam()
{
    Console.WriteLine($"Введите количество участников в одной команде (число не должно быть больше чем {names.Length})");
    int teamSize = Convert.ToInt32(Console.ReadLine());

    if (teamSize <= 0 || teamSize > names.Length)
    {
        Console.WriteLine("Неверный ввод. Пожалуйста, укажите корректное количество участников в команде.");
        Pause();
        Menu();
        return;
    }

    Random random = new Random();

    string[] remainingNames = new string[names.Length];
    Array.Copy(names, remainingNames, names.Length);

    int numberOfTeams = (int)Math.Ceiling((double)names.Length / teamSize); 

    string[][] teams = new string[numberOfTeams][];
    for (int i = 0; i < numberOfTeams; i++)
    {
        int currentTeamSize = Math.Min(teamSize, remainingNames.Length);
        teams[i] = new string[currentTeamSize];

        for (int j = 0; j < currentTeamSize; j++)
        {
            int randomIndex = random.Next(remainingNames.Length);
            teams[i][j] = remainingNames[randomIndex];

            string[] tempNames = new string[remainingNames.Length - 1];
            Array.Copy(remainingNames, 0, tempNames, 0, randomIndex);
            Array.Copy(remainingNames, randomIndex + 1, tempNames, randomIndex, remainingNames.Length - randomIndex - 1);
            remainingNames = tempNames;
        }
    }

    Console.WriteLine($"Количество участников в команде: {teamSize}\n");
    for (int i = 0; i < numberOfTeams; i++)
    {
        Console.WriteLine($"Команда {i + 1}: {string.Join(", ", teams[i])}");
    }

    Pause();
    Menu();
}

Menu();
void Pause()
{
    Console.WriteLine("Нажмите на любую клавишу для возвращение в меню");
    Console.ReadKey();
    Console.Clear();
}
Leave a Comment