~cpp
function HasDorEAtFirst (const S: String): Boolean;
function HasGAtLast (const S: String; APos: Integer): Boolean;
function FindF (const S: String): Integer;
function IsSlump (const S: String): Boolean;
function IsSlimp (const S: String): Boolean;
function IsSlurpy (const S: String): Boolean;
implementation
function HasDorEAtFirst (const S: String): Boolean;
begin
Result := (S[1] = 'D') or (S[1] = 'E');
end;
function HasGAtLast (const S: String; APos: Integer): Boolean;
begin
Result := (S[APos+1] = 'G') and (APos+1 = Length(S));
end;
function FindF (const S: String): Integer;
var
i: Integer;
FirstFind: Boolean;
begin
FirstFind := False;
Result := -1;
if S[2] <> 'F' then
begin
exit;
end;
for i:=2 to Length(S) do
begin
if S[i] = 'F' then
begin
FirstFind := True;
end else
begin
if FirstFind then
begin
Result := i-1;
exit;
end;
end;
end;
end;
function IsSlump (const S: String): Boolean;
var
FPos: Integer;
begin
Result := False;
try
if Length(S) < 3 then
begin
exit;
end;
if HasDorEAtFirst (S) = False then
begin
exit;
end;
FPos := FindF (S);
if FPos = -1 then
begin
exit;
end;
if HasGAtLast (S,FPos) then
begin
Result := True;
exit;
end;
if IsSlump(Copy(S, FPos+1, MAX_STR_LEN)) then
begin
Result := True;
exit;
end;
except
Result := False;
end;
end;
function IsSlimp (const S: String): Boolean;
begin
Result := False;
try
if Length(S) < 2 then
begin
exit;
end;
if S[1] <> 'A' then
begin
exit;
end;
if Length(S) = 2 then
begin
Result := (S[2] = 'H');
exit;
end;
if S[Length(S)] <> 'C' then
begin
exit;
end;
if S[2] = 'B' then
begin
Result := IsSlimp(Copy(S,3,Length(S)-3));
exit;
end else
begin
Result := IsSlump(Copy(S,2,Length(S)-2));
exit;
end;
except
Result := False;
end;
end;
function IsSlurpy (const S: String): Boolean;
var
i: Integer;
begin
Result := False;
for i:=1 to Length(S)-1 do
begin
if IsSlimp(Copy(S,1,i)) and IsSlump(Copy(S,i+1,MAX_STR_LEN)) then
begin
Result := True;
exit;
end;
end;
end;
오랜만에 코딩해본다. ㅠ.ㅠ










