Guest User

Untitled

a guest
Jul 17th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. function StateMapper(subjects,states) {
  2. var self = this;
  3. self.states = states || [];
  4. self.subjects = subjects || [];
  5.  
  6. self.encode = function(z) {
  7. z = z.toString();
  8. var x = "0123456789";
  9. var u = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!?";
  10. var s = x.length;
  11. var d = u.length;
  12. var v = 0;
  13. var n = z.length;
  14. for (var i = 0; i < n; i++) {
  15. v = v * s + x.indexOf(z.charAt(i));
  16. }
  17. if (v < 0) return 0;
  18. var r = v % d;
  19. var c = u.charAt(r);
  20. var q = Math.floor(v / d);
  21. while (q) {
  22. r = q % d; q = Math.floor(q / d); c = u.charAt(r) + c;
  23. }
  24. return c;
  25. };
  26.  
  27. self.decode = function(z) {
  28. z = z.toString();
  29. var u = "0123456789";
  30. var x = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM!?";
  31. var s = x.length;
  32. var d = u.length;
  33. var v = 0;
  34. var n = z.length;
  35. for (var i = 0; i < n; i++) {
  36. v = v * s + x.indexOf(z.charAt(i));
  37. }
  38. if (v < 0) return 0;
  39. var r = v % d;
  40. var c = u.charAt(r);
  41. var q = Math.floor(v / d);
  42. while (q) {
  43. r = q % d; q = Math.floor(q / d); c = u.charAt(r) + c;
  44. }
  45. return c;
  46. };
  47.  
  48. self.compress = function (data) {
  49. var str = "";
  50. for (var k in data) {
  51. var v = data[k];
  52. if (!self.states.includes(v)) {
  53. self.states.push(v);
  54. }
  55. self.subjects.push(k);
  56. str += self.encode(self.states.indexOf(v));
  57. }
  58. return self.code = self.encode(str);
  59. };
  60.  
  61. self.decompress = function (code) {
  62. code = code || self.code;
  63. if (!code) return ;
  64. var states = self.decode(code);
  65. if (states.length < self.subjects.length) {
  66. var l = self.subjects.length - states.length;
  67. for (var i = 0; i < l; i++) {
  68. states = "0" + states;
  69. }
  70. }
  71. states = states.split("");
  72. var out = {};
  73. states.forEach(function(state,index){
  74. out[self.subjects[index]] = self.states[parseInt(state)];
  75. });
  76. return out;
  77. };
  78. }
  79.  
  80. /*
  81. var sm = new StateMapper(["bob","joe","billy","boe"],["happy","sad","mad"]);
  82. sm.compress({ bob: "happy", joe: "sad", billy: "mad", boe: "happy" }); // "1X"
  83. sm.decompress("1X");
  84.  
  85. */
Add Comment
Please, Sign In to add comment