Guest User

Compress/Decompress Variables

a guest
Feb 23rd, 2022
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // --- Test Example ---
  2.  
  3. var varArray = [];
  4. varArray['strings'] = ["firstname","lastname","hometown"];
  5. varArray['booleans'] = [false, false, false, false, true, false, false, true, true, false, true, true, true, false];
  6. varArray['integers'] = [1000, 123456789, 50, 1, 9, 10, 133, 500, 15351380374013745, 1, 2, 3, 10, 55, 44,99, 919191];
  7. console.log("Original - Strings: "+varArray['strings']);
  8. console.log("Original - Booleans: "+varArray['booleans']);
  9. console.log("Original - Integers: "+varArray['integers']);
  10.  
  11. var exportedString = CompressVariables(varArray);
  12. console.log("Exported: "+exportedString);
  13.  
  14. var impArray = DecompressVariables (exportedString);
  15. console.log("Imported - Strings: "+impArray['strings']);
  16. console.log("Imported - Booleans: "+impArray['booleans']);
  17. console.log("Imported - Integers: "+impArray['integers']);
  18.  
  19. /*
  20. ----------- Save System - Part 1 -----------
  21. CompressVariables(inputArray) : returns a compact string from a multidimensional array.
  22. ... CompressBooleans(inputArray) : returns a compact string from a list of booleans.
  23. ... CompressIntegers(inputArray) : returns a compact string from a list of integers.
  24. DecompressVariables(inputString) : returns a multidimensional array from a compact string.
  25. ... DecompressBooleans(inputString) : returns an array of booleans from a compact string.
  26. ... DecompressIntegers(inputString) : returns an array of integers from a compact string.
  27. */
  28.  
  29. function CompressVariables (inputArray)
  30. {
  31.   return inputArray['strings'].join('.') + ":" + CompressBooleans(inputArray['booleans']) + ":" + CompressIntegers(inputArray['integers']);
  32. }
  33.  
  34. function CompressBooleans (inputArray)
  35. {
  36.     // array of booleans -> string of booleans:
  37.     var compressionLevel1 = "";
  38.     inputArray.forEach(b => compressionLevel1 += b ? "1" : "0");
  39.  
  40.     // string of booleans -> int(2):
  41.     var compressionLevel2 = parseInt(compressionLevel1, 2);
  42.  
  43.     // int(2) -> string(36):
  44.     var outputString = compressionLevel2.toString(36);
  45.  
  46.     // add leading 0 counter:
  47.     var leadingZeroCount = 0;
  48.     for (var b of inputArray)
  49.     {
  50.       if (b) break;
  51.       leadingZeroCount++;
  52.     }
  53.     outputString += "#"+leadingZeroCount.toString();
  54.  
  55.     return outputString;
  56. }
  57.  
  58. function CompressIntegers (inputArray)
  59. {
  60.     var compressedStrings = [];
  61.     inputArray.forEach(i => compressedStrings.push(i.toString(36)));
  62.    
  63.     return compressedStrings.join('.');
  64. }
  65.  
  66. function DecompressVariables (inputString)
  67. {
  68.   var splitArray = inputString.split(':');
  69.   var importedArray = [];
  70.   importedArray['strings'] = splitArray[0].split('.');
  71.   importedArray['booleans'] = DecompressBooleans(splitArray[1]);
  72.   importedArray['integers'] = DecompressIntegers(splitArray[2]);
  73.  
  74.   return importedArray;
  75. }
  76.  
  77. function DecompressBooleans (inputString)
  78. {
  79.     var splitStrings = inputString.split('#');
  80.     var leadingZeroCount = splitStrings[1];
  81.  
  82.     // string(36) -> int(2):
  83.     var decompressionLevel2 = parseInt(splitStrings[0], 36);
  84.  
  85.     // int(2) -> string of booleans:
  86.     var decompressionLevel1 = ""
  87.     for (var i = 0; i < leadingZeroCount; i++)
  88.     {
  89.       decompressionLevel1 += "0";
  90.     }
  91.     decompressionLevel1 += decompressionLevel2.toString(2);
  92.  
  93.     // string of booleans -> array of booleans:
  94.     var stringArray = decompressionLevel1.split('');
  95.     var outputArray = [];
  96.     stringArray.forEach(x => outputArray.push(x == '1' ? true : false))
  97.    
  98.     return outputArray;
  99. }
  100.  
  101. function DecompressIntegers (inputString)
  102. {
  103.     var decompressedStrings = inputString.split('.');
  104.     var decompressedIntegers = [];
  105.     decompressedStrings.forEach(s => decompressedIntegers.push(parseInt(s, 36)));
  106.    
  107.     return decompressedIntegers;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment