Не совсем понимаю как решить подобную задачу
Можете подсказать — как решить такую задачу? В каком направлении думать? Тз задачи.
п.1 имеется список слов 300 штук
п.2 имеется 8 ячеек для слов, далее - комплект.
п.3 В комплекте могут быть только уникальные слова из списка, без повторений.
п.4 порядок слов имеет значение - один и тот же набор из 8 слов, но с расположением в разных ячейках дает другой комплект
пример -
Яблоко, джинсы, крем, мыло, телефон, бутылка, лампа, сумка - это один комплект.
Сумка, яблоко, джинсы, крем, мыло, телефон, бутылка, лампа, - это уже другой комплект.
Имея 2 переменных (п.1 и п.2 ) необходимо написать формулу подсчета количество комплектов с учетом правила п.3 и п.4. с пояснениями.
Ответы (3 шт):
Пошел таким путем:
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 уже используется другим процессом. Что не так делаю?
Кому интересно, сделал рабочий вариант подсчета уникальных значений в списке и всего сколько тоже считает.
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("Работа выполнена");
}
}
Более или менее разобрался с подсчетом комплектов. Что получилось:
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, а должна матрица вся заполняться цифрами, те каждый ряд должны быть уникальным. Вроде так правильно. Подскажите, что не так делаю?