def code(self, data, verbose=False): """ Return coded sequence """ index = 0 bw = BitStreamWriter() while index < len(data): for n,border in zip(xrange(len(self.border),0,-1), self.border): data1 = data[index:index + self.counts[n - 1] ] if verbose: print n, data1 if (len(data1) == self.counts[n - 1]) and all([ d <= border for d in data1 ]): if verbose: print ''.join([ str(bit) for bit in self.bits(n - 1)[-self.n_ctrl:] ]), ' ', for bit in self.bits(n - 1)[-self.n_ctrl:]: bw.add(bit) for number in data1: if verbose: print ''.join([ str(b) for b in self.bits(number)[-(self.n_data / self.counts[n - 1]):] ]), for bit in self.bits(number)[-(self.n_data / self.counts[n - 1]):]: bw.add(bit) if n == 7 or n == 3: if verbose: print '0' bw.add(0) elif n == 5: if verbose: print '000' for i in xrange(3): bw.add(0) elif verbose: print index += self.counts[n - 1] break else: raise ValueError return bw.getbytes()
def code(self, data, verbose=False): """ Найти max число Фибоначчи отнять, найти, отнять... получить последовательность 1 и нулей развернуть её, записать 1, записать в файл data - list """ all_bits = [] for number in data: bits = [1] if verbose: print "number=%d\n" % number index = 0 while number: n_index = bisect(self.fib_series, number) - 1 if verbose: print number, self.fib_series[n_index] number -= self.fib_series[n_index] if verbose: print ('index=%d fib=%d number=%d' % (n_index, self.fib_series[n_index], number)) for i in range(index - n_index - 1): bits.append(0) bits.append(1) index = n_index while index: bits.append(0) index -= 1 if verbose: print '\n', ''.join(str(b) for b in bits[::-1]) all_bits += bits[::-1] bw = BitStreamWriter() for b in all_bits: bw.add(b) return bw.getbytes()