fork download
  1. program ideone;
  2.  
  3. {$MODE FPC}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. procedure RLEEncodeString(const AInput: AnsiString; var AOutput: AnsiString);
  9. var
  10. pchrLetter, pchrToken, pchrLast: PAnsiChar;
  11. begin
  12. pchrLast := @AInput[Length(AInput) + 1];
  13. pchrToken := @AInput[1];
  14.  
  15. while pchrToken < pchrLast do
  16. begin
  17. pchrLetter := pchrToken;
  18.  
  19. repeat
  20. Inc(pchrToken);
  21. until pchrToken^ <> pchrLetter^;
  22.  
  23. AOutput := AOutput + pchrLetter^ + IntToStr(pchrToken - pchrLetter);
  24. end
  25. end;
  26.  
  27. procedure RLEDecodeString(const AInput: AnsiString; var AOutput: AnsiString);
  28. var
  29. pchrLetter, pchrCntBegin, pchrCntEnd, pchrLast: PAnsiChar;
  30. strCount: AnsiString;
  31. begin
  32. pchrLast := @AInput[Length(AInput) + 1];
  33. pchrLetter := @AInput[1];
  34.  
  35. while pchrLetter < pchrLast do
  36. begin
  37. pchrCntBegin := pchrLetter + 1;
  38. pchrCntEnd := pchrCntBegin + 1;
  39.  
  40. while pchrCntEnd^ in ['0' .. '9'] do
  41. Inc(pchrCntEnd);
  42.  
  43. SetLength(strCount, pchrCntEnd - pchrCntBegin);
  44. Move(pchrCntBegin^, strCount[1], pchrCntEnd - pchrCntBegin);
  45.  
  46. AOutput := AOutput + StringOfChar(pchrLetter^, StrToInt(strCount));
  47. pchrLetter := pchrCntEnd;
  48. end;
  49. end;
  50.  
  51. var
  52. strInput, strOutput: AnsiString;
  53. begin
  54. { encoding }
  55. strInput := 'AAANNNNTTTKKKK';
  56.  
  57. WriteLn('Input: ', strInput);
  58. RLEEncodeString(strInput, strOutput);
  59. WriteLn('Output: ', strOutput);
  60.  
  61. WriteLn;
  62.  
  63. { swap values }
  64. strInput := strOutput;
  65. strOutput := '';
  66.  
  67. { decoding }
  68. WriteLn('Input: ', strInput);
  69. RLEDecodeString(strInput, strOutput);
  70. WriteLn('Output: ', strOutput);
  71.  
  72. ReadLn;
  73. end.
  74.  
Success #stdin #stdout 0s 388KB
stdin
Standard input is empty
stdout
Input:  AAANNNNTTTKKKK
Output: A3N4T3K4

Input:  A3N4T3K4
Output: AAANNNNTTTKKKK