Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 19:44   #1
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию RLE JScript.

Нужно написать на JScript RLE, собственно. Алгоритм более менее знаю.
Начал писать encode, но, не знаю, как реализовать алгоритм.
Код:
var fso = new ActiveXObject("Scripting.FileSystemObject"); 
function file(filename) {
var ts = fso.OpenTextFile(filename); 
read = ts.ReadAll().split(" ");
file.Close();
return ts;
}
function ESC(filename) {
function encode() {
       esc = "#"
	   k=0;
	   mas=s[1];
	   if (k>3)	    
	      a = esc + String.fromCharCode(k-3) + b ;
	   else
Кодирую при помощи ESCAPE символа.

Код:
 I. Кодирование с помощью ESCAPE-символа. 

Пусть у нас есть некоторый символ. Мы назовем его ESCAPE. В качестве данного символа можно взять такой символ, который не встречается в наших данных, или, если таких нет - то, вообще говоря, любой другой. Возьмём к примеру за ESCAPE-символ знак "#". 

Определение: подстановка - замена одной серии символов на другую. 
Обозначение (n) - символ с кодом n. 

Введём следующие правила подстановки: 

1. k подряд идущих одинаковых базовых символов при k > 3 будем заменять на тройку: ESCAPE, символ с кодом k - 3, базовый. 
Пример: AA….A -> #(k-3)A. 
2. Кодирование ESCAPE-симола происходит аналогично правилу 1, пример: ##...# -> #(k)#. 
3. Менее четырех подряд идущих символов (за исключением #) оставляем как они есть, т.к. особого смысла кодировать их нет. 
4. Для короткой (длина менее 4) серии ESCAPE-символов производим аналогичную первому пункту замену: 
# -> #(1)# 
## -> #(2)# 
### -> #(3)#. 


Пример: AAAAABCDCDBBBB -> #(2)ABCDCD#(1)B. 

Замечание. 

Очевидно, что если счетчик будет достаточно большой, то он в байт не поместится. Следовательно, большие последовательности подряд идущих букв необходимо делить на части, например, закодируем 500 букв A: 
A…A -> #(255)A#(239)A 

Процесс декодирования достаточно очевиден и предполагает использование тех же правил, только в обратном порядке.

Последний раз редактировалось dixonich; 04.11.2010 в 19:48.
dixonich вне форума Ответить с цитированием
Старый 08.11.2010, 23:04   #2
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

ап)
. .
dixonich вне форума Ответить с цитированием
Старый 08.11.2010, 23:47   #3
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

в принципе могу попробовать, отпишись в асю 392459949 если все еще необходимо)
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 09.11.2010, 17:11   #4
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

да нет, мне просто бы алгоритм
я не совсем понял, как это сделать(
dixonich вне форума Ответить с цитированием
Старый 11.11.2010, 16:01   #5
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

ну как самый тривиальный вариант - циклом (только не for) проходишься по строке. Имеешь переменную счетчик, и если символ в текущей позиции = символу в преддущей, то увеличиваешь на 1, иначе смотришь, если предыдущий символ = #, то удаляешь эту частьстроки и заменяешь ее на #(k)#, иначе только если больше 3, после этого счетсик присваиваешь к 1
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 11.11.2010, 18:54   #6
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
ну как самый тривиальный вариант - циклом (только не for) проходишься по строке. Имеешь переменную счетчик, и если символ в текущей позиции = символу в преддущей, то увеличиваешь на 1, иначе смотришь, если предыдущий символ = #, то удаляешь эту частьстроки и заменяешь ее на #(k)#, иначе только если больше 3, после этого счетсик присваиваешь к 1
а почему не фором?
dixonich вне форума Ответить с цитированием
Старый 11.11.2010, 20:44   #7
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

кстати да) но в таком случае просто нужно сразу в новую строку записывать закодированный вариант, а не заменять исходную как в первом случае
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 11.11.2010, 23:09   #8
dixonich
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 79
По умолчанию

спасибо, завтра попробую
dixonich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RLE FeNiX_IU8 Помощь студентам 1 29.10.2009 17:54
Сжатие информации. Метод RLE. WPALI4 Помощь студентам 4 19.11.2008 19:50
гостевая на JScript ГОСЕАН JavaScript, Ajax 1 27.12.2007 07:51