SHARE
TWEET

Untitled

a guest Oct 12th, 2017 113 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
Top