Не совсем понимаю как решить подобную задачу

Можете подсказать — как решить такую задачу? В каком направлении думать? Тз задачи.

п.1 имеется список слов 300 штук
п.2 имеется 8 ячеек для слов, далее - комплект.
п.3 В комплекте могут быть только уникальные слова из списка, без повторений.
п.4 порядок слов имеет значение - один и тот же набор из 8 слов, но с расположением в разных ячейках дает другой комплект пример -

Яблоко, джинсы, крем, мыло, телефон, бутылка, лампа, сумка - это один комплект.
Сумка, яблоко, джинсы, крем, мыло, телефон, бутылка, лампа, - это уже другой комплект.

Имея 2 переменных (п.1 и п.2 ) необходимо написать формулу подсчета количество комплектов с учетом правила п.3 и п.4. с пояснениями.


Ответы (3 шт):

Автор решения: artsmm

Пошел таким путем:

private void calcBtn_Click(object sender, EventArgs e)
    {
        string mainFolder = Directory.GetCurrentDirectory() + @"\Files";
        string pattern = @"\b(ArtId=[0-9]*)\b";

        using (StreamWriter sw = File.CreateText(Directory.GetCurrentDirectory() + @"\Files\Words.txt"))
        {
            var lineToWrite = new SortedDictionary<string,string>();

            foreach (var file in Directory.EnumerateFiles(mainFolder, "*.txt", SearchOption.AllDirectories))
            {
                lineToWrite.Clear();

                using (StreamReader sr = new StreamReader(file, System.Text.Encoding.Default))
                {
                    string line;
                    while((line = sr.ReadLine()) != null)
                    {
                        string newString = line.Substring(0, 8);
                        Match match = Regex.Match(line, pattern, RegexOptions.IgnoreCase);
                        if (match.Success && !lineToWrite.ContainsKey(newString))
                        {
                            lineToWrite.Add(newString, file + " " + newString + " " + match.Value);
                        }
                    }
                }

                foreach(var kvp in lineToWrite)
                {
                    sw.Write(kvp.Value);
                }
            }
            MessageBox.Show("Работа выполнена");
        }
    }

но вылетает ошибка, что файл Words уже используется другим процессом. Что не так делаю?

→ Ссылка
Автор решения: artsmm

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

private void calcBtn_Click(object sender, EventArgs e)
    {
        string mainFolder = Directory.GetCurrentDirectory() + @"\Files";
        string pattern = @"\b(ArtId=[0-9]*)\b";

        int count = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\Files\Words.txt").Length;

        using (StreamWriter sw = File.CreateText(Directory.GetCurrentDirectory() + @"\Files\target.txt"))
        {
            List<string> linesToWrite = new List<string>();
            List<string> linesToWrite2 = new List<string>();

            foreach (var file in Directory.EnumerateFiles(mainFolder, "*.txt", SearchOption.AllDirectories))
            {
                using (StreamReader sr = new StreamReader(Directory.GetCurrentDirectory() + @"\Files\Words.txt", System.Text.Encoding.Default))
                {
                    string line;
                    for (int i = 0; i < count; i++)
                    {
                        string newString = sr.ReadLine();
                        linesToWrite.Add(newString);
                    }
                }
            }

            linesToWrite2 = linesToWrite.Distinct().ToList();

            Variables.Variables.unicResults = linesToWrite2.Count.ToString();

            // Выводим количество вариантов - уникальных и всего
            resultBox.Text += Variables.Variables.unicResults;
            totalOptions.Text += count.ToString();

            MessageBox.Show("Работа выполнена");
        }
    }
→ Ссылка
Автор решения: artsmm

Более или менее разобрался с подсчетом комплектов. Что получилось:

private void CountOfVariants(int n)
    {
        int N = 0;
        int[,] a = new int[Variables.Variables.countOfNums, Variables.Variables.countOfWords]; // Размерность массива, по ТЗ 300 и 8

        int x = n % 7;
        int y = n / 7;
        for (int k, j, i = 1; i <= 7 && N < 10; i++)
        {
            for (j = 0; j < x; j++)
                if (a[y, j] == i) break;
            if (j < x) continue;
            for (j = 0; j < y; j++)
                if (a[j, x] == i) break;
            if (j < y) continue;
            if (y > 0 && x > 0)
            {
                int b = a[y, x - 1];
                for (j = 0; j < y; j++)
                {
                    for (k = 0; k < 6; k++)
                        if (a[j, k] == b && a[j, k + 1] == i) break;
                    if (k < 6) break;
                }
                if (j < y) continue;
            }
            a[y, x] = i;
            if (n < 34) CountOfVariants(n + 1);
            else
            {
                for (j = 0; j < 5; j++)
                {
                    for (k = 0; k < 7; k++)
                        Console.Write(" " + a[j, k]);
                    Console.WriteLine();
                }
                Console.WriteLine();
                N++;
            }
        }
    }

но! при построении, у меня матрица получается такого вида:

0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 7

вместо 7 может быть 1 или 2, или 3, или 4, или 5, а должна матрица вся заполняться цифрами, те каждый ряд должны быть уникальным. Вроде так правильно. Подскажите, что не так делаю?

→ Ссылка