namespace BitArraySet
{
public class CSet
{
private BitArray data;
public CSet()
{
data = new BitArray(5);
}
public void Add(int item)
{
data[item] = true;
}
public bool IsMember(int item)
{
return data[item];
}
public void Remove(int item)
{
data[item] = false;
}
public CSet Union(CSet aSet)
{
CSet tempSet = new CSet();
for (int i = 0; i < data.Count; i++)
{
tempSet.data[i] = (this.data[i] || aSet.data[i]);
}
return tempSet;
}
public CSet Intersection(CSet aSet)
{
CSet tempSet = new CSet();
for (int i = 0; i < data.Count; i++)
{
tempSet.data[i] = (this.data[i] && aSet.data[i]);
}
return tempSet;
}
public CSet Difference(CSet aSet)
{
CSet tempSet = new CSet();
for (int i = 0; i < data.Count; i++)
{
tempSet.data[i] = (this.data[i] && (!(aSet.data[i])));
}
return tempSet;
}
public bool IsSubset(CSet aSet)
{
CSet tempSet = new CSet();
for (int i = 0; i < data.Count; i++)
{
if (this.data[i] && (!(aSet.data[i])))
{
return false;
}
}
return true;
}
public override string ToString()
{
string s = "";
for (int i = 0; i < data.Count; i++)
{
if (data[i])
{
s += i.ToString(); ;
}
}
return s;
}
}
class Program
{
static void Main(string[] args)
{
CSet setA = new CSet();
CSet setB = new CSet();
setA.Add(1);
setA.Add(2);
setA.Add(3);
setB.Add(2);
setB.Add(3);
CSet setC = new CSet();
setC = setA.Union(setB);
Console.WriteLine();
Console.WriteLine(setA.ToString());
Console.WriteLine(setB.ToString());
setC = setA.Intersection(setB);
Console.WriteLine(setC.ToString());
setC = setA.Difference(setB);
Console.WriteLine(setC.ToString());
if (setB.IsSubset(setA))
{
Console.WriteLine("B is a subset of A");
}
else
{
Console.WriteLine("B is not a subset of A");
}
}
}
}

