25flip
Окт. 15, 2010 09:44:03
При обнаружении последовательности одинаковых байтов, она кодируется при помощи
двух байтов. Первый байт хранит количество повторов следующего за ним байтов.
Например, последовательность байт AAABBBBC, будет представлена в виде следующей
последовательности байт:
3, ‘A’, 4, ‘B’, 1, ‘C’
Таким образом, исходная 8-байтовая последовательность будет представлена при
помощи всего шести байт. Входные файлы нулевой длины представляются в виде выходных
файлов нулевой длины. Возможность появления последовательности одинаковых байтов
длиной более 255 байт исключена. Также очевидно, что однобайтовые последовательности
требуют в 2 раза больше данных.
Реализовать функцию распаковки.
кто что посоветует?
25flip
Окт. 15, 2010 10:51:50
Я написал так, кто нибудь может проще?
# -*- coding: cp1251 -*-
import re
s,match,b = 'abbcccddddfjja','',''
t = []
for i in s:
if i == b: continue
b = i
pattern = '%s{1,}' % i
match = re.search(pattern, s)
s_ = str(len(match.group())) + match.group()
t.append(s_[:2])
#match = re.sub(pattern, s_[:2], s)
print 'строка: ' + s + '\n' + 'заархивирована: ' + str(t)
s = ''
for i in t:
s += int(i[0])*i[1]
print "разархивирована: " + s
Андрей Светлов
Окт. 15, 2010 11:39:48
А если без регулярок? Перебирайте байты, не стесняйтесь.
25flip
Окт. 15, 2010 11:52:22
Андрей Светлов
А если без регулярок? Перебирайте байты, не стесняйтесь.
ну и как их перебирать к примеру?
o7412369815963
Окт. 15, 2010 20:07:42
эту задачу вроде уже решали… см поиск