258 lines
7.0 KiB
C#
258 lines
7.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Program
|
|
{
|
|
class Program
|
|
{
|
|
//public static List<List<char>> Boxes = new List<List<char>>();
|
|
public static List<List<(char, bool)>> Boxes = new List<List<(char, bool)>>();
|
|
static void Main(string[] args)
|
|
{
|
|
string path = "../../../forrasok/dobozok.txt";
|
|
var AllBoxes = File.ReadAllText(path).ToCharArray();
|
|
|
|
//TaskA(AllBoxes);
|
|
TaskBWithDefectiveBoxes(AllBoxes);
|
|
|
|
}
|
|
/*
|
|
static void TaskA(char[] AllBoxes)
|
|
{
|
|
Boxes.Clear();
|
|
|
|
foreach (char character in AllBoxes)
|
|
{
|
|
bool shouldIAddIt = true;
|
|
|
|
foreach (var location in Boxes)
|
|
{
|
|
if (CanContain(location.Last(), character))
|
|
{
|
|
location.Add(character);
|
|
shouldIAddIt = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (shouldIAddIt)
|
|
{
|
|
Boxes.Add(new List<char> { character });
|
|
}
|
|
}
|
|
|
|
Console.WriteLine($"Task A: Minimum number of wrapped packages: {Boxes.Count}");
|
|
}
|
|
|
|
*/
|
|
|
|
static void TaskBWithDefectiveBoxes(char[] AllBoxes)
|
|
{
|
|
Boxes.Clear();
|
|
int maxActiveLocations = 0;
|
|
int aCount = 0;
|
|
int bCount = 0;
|
|
|
|
foreach (char character in AllBoxes)
|
|
{
|
|
bool shouldIAddIt = true;
|
|
bool isDefective = false;
|
|
|
|
if (character == 'A')
|
|
{
|
|
aCount++;
|
|
if (aCount % 25 == 0)
|
|
{
|
|
isDefective = true;
|
|
}
|
|
}
|
|
else if (character == 'B')
|
|
{
|
|
bCount++;
|
|
if (bCount % 25 == 0)
|
|
{
|
|
isDefective = true;
|
|
}
|
|
}
|
|
|
|
foreach (var location in Boxes)
|
|
{
|
|
if (CanContain(location.Last(), (character, isDefective)))
|
|
{
|
|
location.Add((character, isDefective));
|
|
shouldIAddIt = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (shouldIAddIt)
|
|
{
|
|
Boxes.Add(new List<(char, bool)> { (character, isDefective) });
|
|
}
|
|
|
|
// Remove wrapped locations (those containing 'C')
|
|
Boxes.RemoveAll(location => location.Any(box => box.Item1 == 'C'));
|
|
Boxes.RemoveAll(location => location.Any(box => box.Item1 == 'B' && box.Item2 == true));
|
|
|
|
maxActiveLocations = Math.Max(maxActiveLocations, Boxes.Count);
|
|
}
|
|
|
|
Console.WriteLine($"Task B with Defective Boxes: Maximum number of active packing locations: {maxActiveLocations}");
|
|
}
|
|
|
|
static bool CanContain((char, bool) outer, (char, bool) inner)
|
|
{
|
|
char outerType = outer.Item1;
|
|
bool outerDefective = outer.Item2;
|
|
char innerType = inner.Item1;
|
|
bool innerDefective = inner.Item2;
|
|
|
|
if (outerType == 'A')
|
|
{
|
|
if (outerDefective)
|
|
{
|
|
return innerType == 'C';
|
|
}
|
|
else
|
|
{
|
|
return innerType == 'B' || innerType == 'C';
|
|
}
|
|
}
|
|
if (outerType == 'B')
|
|
{
|
|
if (outerDefective)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return innerType == 'C';
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
static void TaskB(char[] AllBoxes)
|
|
{
|
|
Boxes.Clear();
|
|
int maxActiveLocations = 0;
|
|
|
|
foreach (char character in AllBoxes)
|
|
{
|
|
bool shouldIAddIt = true;
|
|
|
|
foreach (var location in Boxes)
|
|
{
|
|
if (CanContain(location.Last(), character))
|
|
{
|
|
location.Add(character);
|
|
shouldIAddIt = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (shouldIAddIt)
|
|
{
|
|
Boxes.Add(new List<char> { character });
|
|
}
|
|
|
|
// Remove wrapped locations (those containing 'C')
|
|
Boxes.RemoveAll(location => location.Contains('C'));
|
|
|
|
maxActiveLocations = Math.Max(maxActiveLocations, Boxes.Count);
|
|
}
|
|
|
|
Console.WriteLine($"Task B: Maximum number of active packing locations: {maxActiveLocations}");
|
|
}
|
|
|
|
static bool CanContain(char outer, char inner)
|
|
{
|
|
if (outer == 'A' && (inner == 'B' || inner == 'C'))
|
|
return true;
|
|
if (outer == 'B' && inner == 'C')
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
*/
|
|
|
|
static void Feladat2(string path, char[] AllBoxes)
|
|
{
|
|
foreach (var character in AllBoxes)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/*
|
|
static void Feladat1(string path, char[] AllBoxes)
|
|
{
|
|
|
|
foreach (char character in AllBoxes)
|
|
{
|
|
if (character == 'A')
|
|
{
|
|
Boxes.Add(new List<char> { 'A' });
|
|
continue;
|
|
}
|
|
|
|
bool shouldIAddIt = false;
|
|
int counter = 0;
|
|
foreach (var hely in Boxes)
|
|
{
|
|
if (character == 'B')
|
|
{
|
|
if (!hely.Contains('B') && !hely.Contains('C'))
|
|
{
|
|
hely.Add('B');
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
if (character == 'C')
|
|
{
|
|
if (!hely.Contains('C'))
|
|
{
|
|
hely.Add('C');
|
|
break;
|
|
}
|
|
}
|
|
counter++;
|
|
}
|
|
|
|
if (counter == Boxes.Count)
|
|
{
|
|
shouldIAddIt = true;
|
|
}
|
|
|
|
if (shouldIAddIt)
|
|
{
|
|
Boxes.Add(new List<char> { character });
|
|
}
|
|
}
|
|
|
|
|
|
|
|
foreach (var item in Boxes)
|
|
{
|
|
foreach (char character in item)
|
|
{
|
|
Console.Write($"{character}");
|
|
}
|
|
Console.WriteLine();
|
|
}
|
|
|
|
Console.WriteLine($"1. feladat a: {Boxes.Count}");
|
|
}
|
|
|
|
*/
|
|
|
|
}
|
|
}
|