Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
96
Task/Run-length-encoding/Delphi/run-length-encoding.delphi
Normal file
96
Task/Run-length-encoding/Delphi/run-length-encoding.delphi
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
program RunLengthTest;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
System.SysUtils;
|
||||
|
||||
type
|
||||
TRLEPair = record
|
||||
count: Integer;
|
||||
letter: Char;
|
||||
end;
|
||||
|
||||
TRLEncoded = TArray<TRLEPair>;
|
||||
|
||||
TRLEncodedHelper = record helper for TRLEncoded
|
||||
public
|
||||
procedure Clear;
|
||||
function Add(c: Char): Integer;
|
||||
procedure Encode(Data: string);
|
||||
function Decode: string;
|
||||
function ToString: string;
|
||||
end;
|
||||
|
||||
{ TRLEncodedHelper }
|
||||
|
||||
function TRLEncodedHelper.Add(c: Char): Integer;
|
||||
begin
|
||||
SetLength(self, length(self) + 1);
|
||||
Result := length(self) - 1;
|
||||
with self[Result] do
|
||||
begin
|
||||
count := 1;
|
||||
letter := c;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRLEncodedHelper.Clear;
|
||||
begin
|
||||
SetLength(self, 0);
|
||||
end;
|
||||
|
||||
function TRLEncodedHelper.Decode: string;
|
||||
var
|
||||
p: TRLEPair;
|
||||
begin
|
||||
Result := '';
|
||||
for p in Self do
|
||||
Result := Result + string.Create(p.letter, p.count);
|
||||
end;
|
||||
|
||||
procedure TRLEncodedHelper.Encode(Data: string);
|
||||
var
|
||||
pivot: Char;
|
||||
i, index: Integer;
|
||||
begin
|
||||
Clear;
|
||||
if Data.Length = 0 then
|
||||
exit;
|
||||
|
||||
pivot := Data[1];
|
||||
index := Add(pivot);
|
||||
|
||||
for i := 2 to Data.Length do
|
||||
begin
|
||||
if pivot = Data[i] then
|
||||
inc(self[index].count)
|
||||
else
|
||||
begin
|
||||
pivot := Data[i];
|
||||
index := Add(pivot);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TRLEncodedHelper.ToString: string;
|
||||
var
|
||||
p: TRLEPair;
|
||||
begin
|
||||
Result := '';
|
||||
for p in Self do
|
||||
Result := Result + p.count.ToString + p.letter;
|
||||
end;
|
||||
|
||||
const
|
||||
Input = 'WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW';
|
||||
|
||||
var
|
||||
Data: TRLEncoded;
|
||||
|
||||
begin
|
||||
Data.Encode(Input);
|
||||
Writeln(Data.ToString);
|
||||
writeln(Data.Decode);
|
||||
Readln;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue