96 lines
2.0 KiB
ObjectPascal
96 lines
2.0 KiB
ObjectPascal
|
unit dualdigitsset;
|
||
|
|
||
|
{$mode objfpc}{$H+}
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
SysUtils;
|
||
|
|
||
|
type
|
||
|
TDigits = 0..9;
|
||
|
TDigitSet = set of TDigits;
|
||
|
|
||
|
{ TDualAZSet }
|
||
|
|
||
|
TDualAZSet = class
|
||
|
private
|
||
|
FsetA, FsetZ: TDigitSet;
|
||
|
function GetDiffAZAsText: string;
|
||
|
function GetDiffZAAsText: string;
|
||
|
function GetIntersectionAsText: string;
|
||
|
function GetSetAasText: string;
|
||
|
function GetSetZasText: string;
|
||
|
function GetSymDiffAsText: string;
|
||
|
function GetUnionAsText: string;
|
||
|
function SetAsString(s: TDigitSet): string;
|
||
|
public
|
||
|
property DiffAZAsText: string read GetDiffAZAsText;
|
||
|
property DiffZAAsText: string read GetDiffZAAsText;
|
||
|
property IntersectionAsText: string read GetIntersectionAsText;
|
||
|
property SetA: TDigitSet read FsetA write FsetA;
|
||
|
property SetAasText: string read GetSetAasText;
|
||
|
property SetZ: TDigitSet read FsetZ write FsetZ;
|
||
|
property SetZasText: string read GetSetZasText;
|
||
|
property SymDiffAsText: string read GetSymDiffAsText;
|
||
|
property UnionAsText: string read GetUnionAsText;
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
{ TDualAZSet }
|
||
|
|
||
|
function TDualAZSet.GetDiffAZAsText: string;
|
||
|
begin
|
||
|
Result := SetAsString(FsetA - FsetZ);
|
||
|
end;
|
||
|
|
||
|
function TDualAZSet.GetDiffZAAsText: string;
|
||
|
begin
|
||
|
Result := SetAsString(FsetZ - FsetA);
|
||
|
end;
|
||
|
|
||
|
function TDualAZSet.GetIntersectionAsText: string;
|
||
|
begin
|
||
|
Result := SetAsString(FsetA * FsetZ);
|
||
|
end;
|
||
|
|
||
|
function TDualAZSet.GetSetAasText: string;
|
||
|
begin
|
||
|
Result := SetAsString(FsetA);
|
||
|
end;
|
||
|
|
||
|
function TDualAZSet.GetSetZasText: string;
|
||
|
begin
|
||
|
Result := SetAsString(FsetZ);
|
||
|
end;
|
||
|
|
||
|
function TDualAZSet.GetSymDiffAsText: string;
|
||
|
begin
|
||
|
Result := SetAsString(FsetA + FsetZ - FsetA * FsetZ);
|
||
|
end;
|
||
|
|
||
|
function TDualAZSet.GetUnionAsText: string;
|
||
|
begin
|
||
|
Result := SetAsString(FsetA + FsetZ);
|
||
|
end;
|
||
|
|
||
|
function TDualAZSet.SetAsString(s: TDigitSet): string;
|
||
|
var d: TDigits;
|
||
|
begin
|
||
|
Result := EmptyStr;
|
||
|
for d in TDigitSet do
|
||
|
if (d in s) then
|
||
|
begin
|
||
|
if Length(Result) > 0
|
||
|
then AppendStr(Result, ',');
|
||
|
|
||
|
AppendStr(Result, IntToStr(d));
|
||
|
end;
|
||
|
|
||
|
Result := Format('[%s]', [Result]);
|
||
|
end;
|
||
|
|
||
|
end.
|
||
|
|