Advertisement
Guest User

Untitled

a guest
Oct 12th, 2017
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. //Функция кодирования строки по алгоритму rle
  2. function rle_code(line) {
  3.  
  4. //Если на вход подается не строка, то ничего
  5. if (typeof(line) != 'srting')
  6. return undefined;
  7.  
  8. //Результат данной функции
  9. var result = new Srting();
  10.  
  11.  
  12. //Посчитаем сколько раз встречается в строке тот или иной символ
  13. for(var i = 0; i < line.lenght; i++)
  14. {
  15. //Счетчик кратности символа
  16. var counter = 0;
  17.  
  18. //Считаем повторения символа i
  19. while ((i + counter < line.lenght) && (line.charAt(counter + i) == line.charAt(i)))
  20. {
  21. counter++;
  22. }
  23.  
  24.  
  25.  
  26. //Если количество повторов меньше четырех, то кодировать не имеет смысла
  27. //Однако # мы кодируем всегда
  28. if ((counter < 4) && (line.charAt(i) != '#'))
  29. {
  30. result += line.substring(i, counter);
  31. continue;
  32. }
  33.  
  34. //Переходим к следующему элементу
  35. i += counter - 1;
  36.  
  37. //Выписываем символы по 127
  38. while (counter > 0) {
  39. result += '#' + String.fromCharCode(Math.min(counter, 127)) + line.charAt(i);
  40. counter -= Math.min(counter, 127);
  41. }
  42. }
  43.  
  44. return result;
  45. }
  46.  
  47.  
  48. //Функция декодирования строки, закодированной алгоритмом rle
  49. function rle_decode(line) {
  50.  
  51. if (typeof(line) != 'string')
  52. return undefined;
  53.  
  54. var result = new String();
  55.  
  56. //Если символ не решётка, то добавляем его в результат
  57. //Иначе добавляем столько раз, сколько символ указан
  58. for (var i = 0; i < line.length; i++)
  59. {
  60. if (line.charAt(i) != '#')
  61. {
  62. result += line.charAt(i);
  63. continue;
  64. }
  65.  
  66. //Выписываем line.charCodeAt(i + 1) символов line.charAt(i + 2)
  67. for (var k = 0; k < line.charCodeAt(i + 1); k++)
  68. result += line.charAt(i + 2);
  69.  
  70. //Переходим к следующей части
  71. i += 2;
  72. }
  73.  
  74. return result;
  75. }
  76.  
  77.  
  78. if (WSH.Arguments.length < 3)
  79. {
  80. WSH.echo("No enought parameters");
  81. WSH.exit(1);
  82. }
  83.  
  84. var fo = new ActiveXObject("Scripting.FileSystemObject");
  85. var input_file = fo.OpenTextFile(WSH.Arguments(1));
  86. var output_file = fo.OpenTextFile(WSH.Arguments(2), 2, true);
  87.  
  88. try
  89. {
  90. if (WSH.Arguments(0) == "code")
  91. {
  92. output_file.Write(rle_code(input_file.ReadAll()));
  93. }
  94. else if (WSH.Arguments(0) == "decode")
  95. {
  96. output_file.Write(rle_decode(input_file.ReadAll()));
  97. }
  98. else
  99. {
  100. WSH.echo("Unknown command");
  101. }
  102. }
  103. catch(error)
  104. {
  105. WSH.echo(error.message);
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement