Exemple #1
0
    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()
Exemple #2
0
    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()