program ideone;
{$mode objfpc}{$H+}
function MultiCharsCountAsInteger(AInput: array of AnsiChar): Integer;
const
COUNTED_CHAR_VALUE = AnsiChar(#0);
var
intCharToken, intCounterToken, intCharCount: Integer;
begin
Result := 0;
for intCharToken := Low(AInput) to High(AInput) do
if AInput[intCharToken] <> COUNTED_CHAR_VALUE then
begin
intCharCount := 1;
for intCounterToken := intCharToken + 1 to High(AInput) do
if AInput[intCharToken] = AInput[intCounterToken] then
begin
Inc(intCharCount);
AInput[intCounterToken] := COUNTED_CHAR_VALUE;
end;
if intCharCount > 1 then
Inc(Result);
end;
end;
function MultiCharsCountAsString(AInput: array of AnsiChar): AnsiString;
const
COUNTED_CHAR_VALUE = AnsiChar(#0);
var
intCharToken, intCounterToken, intCharCount: Integer;
begin
Result := '';
for intCharToken := Low(AInput) to High(AInput) do
if AInput[intCharToken] <> COUNTED_CHAR_VALUE then
begin
intCharCount := 1;
for intCounterToken := intCharToken + 1 to High(AInput) do
if AInput[intCharToken] = AInput[intCounterToken] then
begin
Inc(intCharCount);
AInput[intCounterToken] := COUNTED_CHAR_VALUE;
end;
if intCharCount > 1 then
Result += AInput[intCharToken];
end;
end;
const
STRING_TO_TEST = AnsiString('aabbcdaaebbfgaah');
begin
WriteLn('As Integer: ', MultiCharsCountAsInteger(STRING_TO_TEST));
WriteLn('As String: ', MultiCharsCountAsString(STRING_TO_TEST));
end.
cHJvZ3JhbSBpZGVvbmU7Cgp7JG1vZGUgb2JqZnBjfXskSCt9CgogIGZ1bmN0aW9uIE11bHRpQ2hhcnNDb3VudEFzSW50ZWdlcihBSW5wdXQ6IGFycmF5IG9mIEFuc2lDaGFyKTogSW50ZWdlcjsKICBjb25zdAogICAgQ09VTlRFRF9DSEFSX1ZBTFVFID0gQW5zaUNoYXIoIzApOwogIHZhcgogICAgaW50Q2hhclRva2VuLCBpbnRDb3VudGVyVG9rZW4sIGludENoYXJDb3VudDogSW50ZWdlcjsKICBiZWdpbgogICAgUmVzdWx0IDo9IDA7CgogICAgZm9yIGludENoYXJUb2tlbiA6PSBMb3coQUlucHV0KSB0byBIaWdoKEFJbnB1dCkgZG8KICAgICAgaWYgQUlucHV0W2ludENoYXJUb2tlbl0gPD4gQ09VTlRFRF9DSEFSX1ZBTFVFIHRoZW4KICAgICAgYmVnaW4KICAgICAgICBpbnRDaGFyQ291bnQgOj0gMTsKCiAgICAgICAgZm9yIGludENvdW50ZXJUb2tlbiA6PSBpbnRDaGFyVG9rZW4gKyAxIHRvIEhpZ2goQUlucHV0KSBkbwogICAgICAgICAgaWYgQUlucHV0W2ludENoYXJUb2tlbl0gPSBBSW5wdXRbaW50Q291bnRlclRva2VuXSB0aGVuCiAgICAgICAgICBiZWdpbgogICAgICAgICAgICBJbmMoaW50Q2hhckNvdW50KTsKICAgICAgICAgICAgQUlucHV0W2ludENvdW50ZXJUb2tlbl0gOj0gQ09VTlRFRF9DSEFSX1ZBTFVFOwogICAgICAgICAgZW5kOwoKICAgICAgICBpZiBpbnRDaGFyQ291bnQgPiAxIHRoZW4KICAgICAgICAgIEluYyhSZXN1bHQpOwogICAgICBlbmQ7CiAgZW5kOwoKICBmdW5jdGlvbiBNdWx0aUNoYXJzQ291bnRBc1N0cmluZyhBSW5wdXQ6IGFycmF5IG9mIEFuc2lDaGFyKTogQW5zaVN0cmluZzsKICBjb25zdAogICAgQ09VTlRFRF9DSEFSX1ZBTFVFID0gQW5zaUNoYXIoIzApOwogIHZhcgogICAgaW50Q2hhclRva2VuLCBpbnRDb3VudGVyVG9rZW4sIGludENoYXJDb3VudDogSW50ZWdlcjsKICBiZWdpbgogICAgUmVzdWx0IDo9ICcnOwoKICAgIGZvciBpbnRDaGFyVG9rZW4gOj0gTG93KEFJbnB1dCkgdG8gSGlnaChBSW5wdXQpIGRvCiAgICAgIGlmIEFJbnB1dFtpbnRDaGFyVG9rZW5dIDw+IENPVU5URURfQ0hBUl9WQUxVRSB0aGVuCiAgICAgIGJlZ2luCiAgICAgICAgaW50Q2hhckNvdW50IDo9IDE7CgogICAgICAgIGZvciBpbnRDb3VudGVyVG9rZW4gOj0gaW50Q2hhclRva2VuICsgMSB0byBIaWdoKEFJbnB1dCkgZG8KICAgICAgICAgIGlmIEFJbnB1dFtpbnRDaGFyVG9rZW5dID0gQUlucHV0W2ludENvdW50ZXJUb2tlbl0gdGhlbgogICAgICAgICAgYmVnaW4KICAgICAgICAgICAgSW5jKGludENoYXJDb3VudCk7CiAgICAgICAgICAgIEFJbnB1dFtpbnRDb3VudGVyVG9rZW5dIDo9IENPVU5URURfQ0hBUl9WQUxVRTsKICAgICAgICAgIGVuZDsKCiAgICAgICAgaWYgaW50Q2hhckNvdW50ID4gMSB0aGVuCiAgICAgICAgICBSZXN1bHQgKz0gQUlucHV0W2ludENoYXJUb2tlbl07CiAgICAgIGVuZDsKICBlbmQ7Cgpjb25zdAogIFNUUklOR19UT19URVNUID0gQW5zaVN0cmluZygnYWFiYmNkYWFlYmJmZ2FhaCcpOwpiZWdpbgogIFdyaXRlTG4oJ0FzIEludGVnZXI6ICcsIE11bHRpQ2hhcnNDb3VudEFzSW50ZWdlcihTVFJJTkdfVE9fVEVTVCkpOwogIFdyaXRlTG4oJ0FzIFN0cmluZzogICcsIE11bHRpQ2hhcnNDb3VudEFzU3RyaW5nKFNUUklOR19UT19URVNUKSk7CmVuZC4K