Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Функция кодирования строки по алгоритму rle
- function rle_code(line) {
- //Если на вход подается не строка, то ничего
- if (typeof(line) != 'srting')
- return undefined;
- //Результат данной функции
- var result = new Srting();
- //Посчитаем сколько раз встречается в строке тот или иной символ
- for(var i = 0; i < line.lenght; i++)
- {
- //Счетчик кратности символа
- var counter = 0;
- //Считаем повторения символа i
- while ((i + counter < line.lenght) && (line.charAt(counter + i) == line.charAt(i)))
- {
- counter++;
- }
- //Если количество повторов меньше четырех, то кодировать не имеет смысла
- //Однако # мы кодируем всегда
- if ((counter < 4) && (line.charAt(i) != '#'))
- {
- result += line.substring(i, counter);
- continue;
- }
- //Переходим к следующему элементу
- i += counter - 1;
- //Выписываем символы по 127
- while (counter > 0) {
- result += '#' + String.fromCharCode(Math.min(counter, 127)) + line.charAt(i);
- counter -= Math.min(counter, 127);
- }
- }
- return result;
- }
- //Функция декодирования строки, закодированной алгоритмом rle
- function rle_decode(line) {
- if (typeof(line) != 'string')
- return undefined;
- var result = new String();
- //Если символ не решётка, то добавляем его в результат
- //Иначе добавляем столько раз, сколько символ указан
- for (var i = 0; i < line.length; i++)
- {
- if (line.charAt(i) != '#')
- {
- result += line.charAt(i);
- continue;
- }
- //Выписываем line.charCodeAt(i + 1) символов line.charAt(i + 2)
- for (var k = 0; k < line.charCodeAt(i + 1); k++)
- result += line.charAt(i + 2);
- //Переходим к следующей части
- i += 2;
- }
- return result;
- }
- if (WSH.Arguments.length < 3)
- {
- WSH.echo("No enought parameters");
- WSH.exit(1);
- }
- var fo = new ActiveXObject("Scripting.FileSystemObject");
- var input_file = fo.OpenTextFile(WSH.Arguments(1));
- var output_file = fo.OpenTextFile(WSH.Arguments(2), 2, true);
- try
- {
- if (WSH.Arguments(0) == "code")
- {
- output_file.Write(rle_code(input_file.ReadAll()));
- }
- else if (WSH.Arguments(0) == "decode")
- {
- output_file.Write(rle_decode(input_file.ReadAll()));
- }
- else
- {
- WSH.echo("Unknown command");
- }
- }
- catch(error)
- {
- WSH.echo(error.message);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement