RosettaCodeData/Task/Move-to-front-algorithm/PascalABC.NET/move-to-front-algorithm.pas

38 lines
847 B
ObjectPascal

const
SymbolTable = Lst('a'..'z');
function encode(s: string): list<integer>;
begin
result := new List<integer>;
var symtable := SymbolTable;
foreach var c in s do
begin
var idx := symtable.IndexOf(c);
result.add(idx);
symtable.RemoveAt(idx);
symtable.Insert(0, c);
end;
end;
function decode(s: list<integer>): string;
begin
var symtable := SymbolTable;
foreach var idx in s do
begin
var c := symtable[idx];
result += c;
symtable.RemoveAt(idx);
symtable.Insert(0, c);
end;
end;
begin
foreach var word in ['broood', 'babanaaa', 'hiphophiphop'] do
begin
var encoded := encode(word);
var decoded := decode(encoded);
var status := if decoded = word then 'correctly' else 'incorrectly';
println(word, 'encodes to', encoded, 'which', status, 'decodes to', decoded);
end;
end.