7Bpencil

RLE

Dec 22nd, 2019
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict"
  2. test();
  3.  
  4. function test() {
  5.     let test1 = "aaaaaabccccceekkk";
  6.     let test2 = "aaaa$$$$bcce$ekkkk";
  7.     let test1Encoded = Encode(test1);
  8.     let test2Encoded = Encode(test2);
  9.     let test1Decoded = Decode(test1Encoded);
  10.     let test2Decoded = Decode(test2Encoded);
  11.     console.log(test1 == test1Decoded);
  12.     console.log(test2 == test2Decoded);
  13. }
  14.  
  15. function Encode(message) {
  16.     result = ""
  17.     let sequenceLength = 1;
  18.     for (let i = 1; i < message.length + 1; i++) {
  19.         if (message[i] == message[i - 1]) {
  20.             sequenceLength++;
  21.         } else {
  22.             if (sequenceLength > 3 || IsSpecialSymbol(message[i - 1])) {
  23.                 result += GetEncodedSequence(message, sequenceLength, i - 1);
  24.             } else {
  25.                 result += GetNotEncodedSequence(message, sequenceLength, i - 1);
  26.             }
  27.             sequenceLength = 1;
  28.         }
  29.     }
  30.     return result;
  31. }
  32.  
  33.  
  34. function Decode(message) {
  35.     result = "";
  36.     let i = 0;
  37.     while (i < message.length) {
  38.         if (IsSpecialSymbol(message[i])) {
  39.             result += GetDecodedSequence(message.charCodeAt(i + 1), message[i + 2]);
  40.             i += 3;
  41.         } else {
  42.             result += message[i];
  43.             i++;
  44.         }
  45.     }
  46.     return result;
  47. }
  48.  
  49.  
  50. function GetDecodedSequence(sequenceLength, symbol) {
  51.     result = "";
  52.     for (let i = 0; i < sequenceLength; i++) {
  53.         result += symbol;
  54.     }
  55.     return result;
  56. }
  57.  
  58. function GetNotEncodedSequence(message, sequenceLength, lastSymbolPosition) {
  59.     return message.slice(lastSymbolPosition - sequenceLength + 1, lastSymbolPosition + 1);
  60. }
  61.  
  62. function GetEncodedSequence(message, sequenceLength, lastSymbolPosition) {
  63.     return String.fromCharCode(36) + String.fromCharCode(sequenceLength) + message[lastSymbolPosition];
  64. }
  65.  
  66. function IsSpecialSymbol(symbol) {
  67.     return symbol == String.fromCharCode(36);
  68. }
Advertisement
Add Comment
Please, Sign In to add comment