37 lines
1.1 KiB
Ada
37 lines
1.1 KiB
Ada
with Ada.Text_IO;
|
|
|
|
procedure Shortest is
|
|
|
|
function Scs (Left, Right : in String) return String is
|
|
Left_Tail : String renames Left (Left'First + 1 .. Left'Last);
|
|
Right_Tail : String renames Right (Right'First + 1 .. Right'Last);
|
|
begin
|
|
if Left = "" then return Right; end if;
|
|
if Right = "" then return Left; end if;
|
|
|
|
if Left (Left'First) = Right (Right'First) then
|
|
return Left (Left'First) & Scs (Left_Tail, Right_Tail);
|
|
end if;
|
|
|
|
declare
|
|
S1 : constant String := Scs (Left, Right_Tail);
|
|
S2 : constant String := Scs (Left_Tail, Right);
|
|
begin
|
|
return (if S1'Length <= S2'Length
|
|
then Right (Right'First) & S1
|
|
else Left (Left'First) & S2);
|
|
end;
|
|
end Scs;
|
|
|
|
procedure Exercise (Left, Right : String) is
|
|
use Ada.Text_Io;
|
|
begin
|
|
Put ("scs ( "); Put (Left); Put (" , "); Put (Right); Put ( " ) -> ");
|
|
Put (Scs (Left, Right));
|
|
New_Line;
|
|
end Exercise;
|
|
|
|
begin
|
|
Exercise ("abcbdab", "bdcaba");
|
|
Exercise ("WEASELS", "WARDANCE");
|
|
end Shortest;
|