# * * * * * * * * * * * * * * * * * * * * * # * TECNOLOGIES MULTIMEDIA * # * - - - - - - - - - - - - - - - - - - - * # * Ejercicio AvCont-5: RICE coding * # * @Vicent Roig * # * @Igor Dzinka * # * * * * * * * * * * * * * * * * * * * * *

In [95]:
import numpy as np

def rice_compress(data, M):
    compressed = []
    
    if (M != 0 and ((M & (M - 1)) == 0))==False:
        raise Exception(">> M must be a power of 2")
    else:
         pr = int(np.log2(M))
        
    binary = list(bin(data))
    if binary[0]=='-':
        compressed += ['0']
    else:
        compressed += ['1']
    
    Q = int(abs(data)/M)
    R = int(abs(data)%M)
    #print M,Q,R

    rbin = ''.join( str(i) for i in list(bin(R))[2:] ).zfill(pr)
    compressed += [ '1' for i in range(Q) ] + ['0'] + list(rbin)
    
    #return compressed
    return ''.join( str(i) for i in compressed )

def rice_uncompress(data):
    compr = [int(i) for i in list(data)]
    s = compr.pop(0)
    if s==0:
        s = -1
    
    q = []
    for i in compr:
        q += [compr.pop(0)]
        if (q[-1]==0):
            break
    #print s, q, compr
    Q = sum(q)
    R = int(''.join(str(i) for i in compr), 2)
    M = 2**len(compr)
    #print M,Q,R

    return s*(Q*M + R)

In [96]:
#Tests
unitary_tests = [(578,256),(-135,256),(1089,256)]

for test in unitary_tests:
    compr = rice_compress(test[0],test[1])
    dcompr = rice_uncompress(compr)
    print test, dcompr, test[0]==dcompr


(578, 256) 578 True
(-135, 256) -135 True
(1089, 256) 1089 True

a) ¿Cuántos bits son necesarios para codificar todos los enteros entre -1023 y +1023 ? (en codificación binaria natural con bit de signo)


In [97]:
bits = np.ceil(np.log2(1023)) + 1
print "Se requieren", int(bits), "bits"
#print "Se requieren", len(bin(-1023)[2:]), "bits"


Se requieren 11 bits

b) Calculad el código Rice de todos los enteros N entre -1023 y +1023 con M = 32.


In [98]:
M = 32
result = [ (i,rice_compress(i, M)) for i in range(-1023, 1023 +1) ]

#show generated Rice codes 
for i in result:
    print i


(-1023, '01111111111111111111111111111111011111')
(-1022, '01111111111111111111111111111111011110')
(-1021, '01111111111111111111111111111111011101')
(-1020, '01111111111111111111111111111111011100')
(-1019, '01111111111111111111111111111111011011')
(-1018, '01111111111111111111111111111111011010')
(-1017, '01111111111111111111111111111111011001')
(-1016, '01111111111111111111111111111111011000')
(-1015, '01111111111111111111111111111111010111')
(-1014, '01111111111111111111111111111111010110')
(-1013, '01111111111111111111111111111111010101')
(-1012, '01111111111111111111111111111111010100')
(-1011, '01111111111111111111111111111111010011')
(-1010, '01111111111111111111111111111111010010')
(-1009, '01111111111111111111111111111111010001')
(-1008, '01111111111111111111111111111111010000')
(-1007, '01111111111111111111111111111111001111')
(-1006, '01111111111111111111111111111111001110')
(-1005, '01111111111111111111111111111111001101')
(-1004, '01111111111111111111111111111111001100')
(-1003, '01111111111111111111111111111111001011')
(-1002, '01111111111111111111111111111111001010')
(-1001, '01111111111111111111111111111111001001')
(-1000, '01111111111111111111111111111111001000')
(-999, '01111111111111111111111111111111000111')
(-998, '01111111111111111111111111111111000110')
(-997, '01111111111111111111111111111111000101')
(-996, '01111111111111111111111111111111000100')
(-995, '01111111111111111111111111111111000011')
(-994, '01111111111111111111111111111111000010')
(-993, '01111111111111111111111111111111000001')
(-992, '01111111111111111111111111111111000000')
(-991, '0111111111111111111111111111111011111')
(-990, '0111111111111111111111111111111011110')
(-989, '0111111111111111111111111111111011101')
(-988, '0111111111111111111111111111111011100')
(-987, '0111111111111111111111111111111011011')
(-986, '0111111111111111111111111111111011010')
(-985, '0111111111111111111111111111111011001')
(-984, '0111111111111111111111111111111011000')
(-983, '0111111111111111111111111111111010111')
(-982, '0111111111111111111111111111111010110')
(-981, '0111111111111111111111111111111010101')
(-980, '0111111111111111111111111111111010100')
(-979, '0111111111111111111111111111111010011')
(-978, '0111111111111111111111111111111010010')
(-977, '0111111111111111111111111111111010001')
(-976, '0111111111111111111111111111111010000')
(-975, '0111111111111111111111111111111001111')
(-974, '0111111111111111111111111111111001110')
(-973, '0111111111111111111111111111111001101')
(-972, '0111111111111111111111111111111001100')
(-971, '0111111111111111111111111111111001011')
(-970, '0111111111111111111111111111111001010')
(-969, '0111111111111111111111111111111001001')
(-968, '0111111111111111111111111111111001000')
(-967, '0111111111111111111111111111111000111')
(-966, '0111111111111111111111111111111000110')
(-965, '0111111111111111111111111111111000101')
(-964, '0111111111111111111111111111111000100')
(-963, '0111111111111111111111111111111000011')
(-962, '0111111111111111111111111111111000010')
(-961, '0111111111111111111111111111111000001')
(-960, '0111111111111111111111111111111000000')
(-959, '011111111111111111111111111111011111')
(-958, '011111111111111111111111111111011110')
(-957, '011111111111111111111111111111011101')
(-956, '011111111111111111111111111111011100')
(-955, '011111111111111111111111111111011011')
(-954, '011111111111111111111111111111011010')
(-953, '011111111111111111111111111111011001')
(-952, '011111111111111111111111111111011000')
(-951, '011111111111111111111111111111010111')
(-950, '011111111111111111111111111111010110')
(-949, '011111111111111111111111111111010101')
(-948, '011111111111111111111111111111010100')
(-947, '011111111111111111111111111111010011')
(-946, '011111111111111111111111111111010010')
(-945, '011111111111111111111111111111010001')
(-944, '011111111111111111111111111111010000')
(-943, '011111111111111111111111111111001111')
(-942, '011111111111111111111111111111001110')
(-941, '011111111111111111111111111111001101')
(-940, '011111111111111111111111111111001100')
(-939, '011111111111111111111111111111001011')
(-938, '011111111111111111111111111111001010')
(-937, '011111111111111111111111111111001001')
(-936, '011111111111111111111111111111001000')
(-935, '011111111111111111111111111111000111')
(-934, '011111111111111111111111111111000110')
(-933, '011111111111111111111111111111000101')
(-932, '011111111111111111111111111111000100')
(-931, '011111111111111111111111111111000011')
(-930, '011111111111111111111111111111000010')
(-929, '011111111111111111111111111111000001')
(-928, '011111111111111111111111111111000000')
(-927, '01111111111111111111111111111011111')
(-926, '01111111111111111111111111111011110')
(-925, '01111111111111111111111111111011101')
(-924, '01111111111111111111111111111011100')
(-923, '01111111111111111111111111111011011')
(-922, '01111111111111111111111111111011010')
(-921, '01111111111111111111111111111011001')
(-920, '01111111111111111111111111111011000')
(-919, '01111111111111111111111111111010111')
(-918, '01111111111111111111111111111010110')
(-917, '01111111111111111111111111111010101')
(-916, '01111111111111111111111111111010100')
(-915, '01111111111111111111111111111010011')
(-914, '01111111111111111111111111111010010')
(-913, '01111111111111111111111111111010001')
(-912, '01111111111111111111111111111010000')
(-911, '01111111111111111111111111111001111')
(-910, '01111111111111111111111111111001110')
(-909, '01111111111111111111111111111001101')
(-908, '01111111111111111111111111111001100')
(-907, '01111111111111111111111111111001011')
(-906, '01111111111111111111111111111001010')
(-905, '01111111111111111111111111111001001')
(-904, '01111111111111111111111111111001000')
(-903, '01111111111111111111111111111000111')
(-902, '01111111111111111111111111111000110')
(-901, '01111111111111111111111111111000101')
(-900, '01111111111111111111111111111000100')
(-899, '01111111111111111111111111111000011')
(-898, '01111111111111111111111111111000010')
(-897, '01111111111111111111111111111000001')
(-896, '01111111111111111111111111111000000')
(-895, '0111111111111111111111111111011111')
(-894, '0111111111111111111111111111011110')
(-893, '0111111111111111111111111111011101')
(-892, '0111111111111111111111111111011100')
(-891, '0111111111111111111111111111011011')
(-890, '0111111111111111111111111111011010')
(-889, '0111111111111111111111111111011001')
(-888, '0111111111111111111111111111011000')
(-887, '0111111111111111111111111111010111')
(-886, '0111111111111111111111111111010110')
(-885, '0111111111111111111111111111010101')
(-884, '0111111111111111111111111111010100')
(-883, '0111111111111111111111111111010011')
(-882, '0111111111111111111111111111010010')
(-881, '0111111111111111111111111111010001')
(-880, '0111111111111111111111111111010000')
(-879, '0111111111111111111111111111001111')
(-878, '0111111111111111111111111111001110')
(-877, '0111111111111111111111111111001101')
(-876, '0111111111111111111111111111001100')
(-875, '0111111111111111111111111111001011')
(-874, '0111111111111111111111111111001010')
(-873, '0111111111111111111111111111001001')
(-872, '0111111111111111111111111111001000')
(-871, '0111111111111111111111111111000111')
(-870, '0111111111111111111111111111000110')
(-869, '0111111111111111111111111111000101')
(-868, '0111111111111111111111111111000100')
(-867, '0111111111111111111111111111000011')
(-866, '0111111111111111111111111111000010')
(-865, '0111111111111111111111111111000001')
(-864, '0111111111111111111111111111000000')
(-863, '011111111111111111111111111011111')
(-862, '011111111111111111111111111011110')
(-861, '011111111111111111111111111011101')
(-860, '011111111111111111111111111011100')
(-859, '011111111111111111111111111011011')
(-858, '011111111111111111111111111011010')
(-857, '011111111111111111111111111011001')
(-856, '011111111111111111111111111011000')
(-855, '011111111111111111111111111010111')
(-854, '011111111111111111111111111010110')
(-853, '011111111111111111111111111010101')
(-852, '011111111111111111111111111010100')
(-851, '011111111111111111111111111010011')
(-850, '011111111111111111111111111010010')
(-849, '011111111111111111111111111010001')
(-848, '011111111111111111111111111010000')
(-847, '011111111111111111111111111001111')
(-846, '011111111111111111111111111001110')
(-845, '011111111111111111111111111001101')
(-844, '011111111111111111111111111001100')
(-843, '011111111111111111111111111001011')
(-842, '011111111111111111111111111001010')
(-841, '011111111111111111111111111001001')
(-840, '011111111111111111111111111001000')
(-839, '011111111111111111111111111000111')
(-838, '011111111111111111111111111000110')
(-837, '011111111111111111111111111000101')
(-836, '011111111111111111111111111000100')
(-835, '011111111111111111111111111000011')
(-834, '011111111111111111111111111000010')
(-833, '011111111111111111111111111000001')
(-832, '011111111111111111111111111000000')
(-831, '01111111111111111111111111011111')
(-830, '01111111111111111111111111011110')
(-829, '01111111111111111111111111011101')
(-828, '01111111111111111111111111011100')
(-827, '01111111111111111111111111011011')
(-826, '01111111111111111111111111011010')
(-825, '01111111111111111111111111011001')
(-824, '01111111111111111111111111011000')
(-823, '01111111111111111111111111010111')
(-822, '01111111111111111111111111010110')
(-821, '01111111111111111111111111010101')
(-820, '01111111111111111111111111010100')
(-819, '01111111111111111111111111010011')
(-818, '01111111111111111111111111010010')
(-817, '01111111111111111111111111010001')
(-816, '01111111111111111111111111010000')
(-815, '01111111111111111111111111001111')
(-814, '01111111111111111111111111001110')
(-813, '01111111111111111111111111001101')
(-812, '01111111111111111111111111001100')
(-811, '01111111111111111111111111001011')
(-810, '01111111111111111111111111001010')
(-809, '01111111111111111111111111001001')
(-808, '01111111111111111111111111001000')
(-807, '01111111111111111111111111000111')
(-806, '01111111111111111111111111000110')
(-805, '01111111111111111111111111000101')
(-804, '01111111111111111111111111000100')
(-803, '01111111111111111111111111000011')
(-802, '01111111111111111111111111000010')
(-801, '01111111111111111111111111000001')
(-800, '01111111111111111111111111000000')
(-799, '0111111111111111111111111011111')
(-798, '0111111111111111111111111011110')
(-797, '0111111111111111111111111011101')
(-796, '0111111111111111111111111011100')
(-795, '0111111111111111111111111011011')
(-794, '0111111111111111111111111011010')
(-793, '0111111111111111111111111011001')
(-792, '0111111111111111111111111011000')
(-791, '0111111111111111111111111010111')
(-790, '0111111111111111111111111010110')
(-789, '0111111111111111111111111010101')
(-788, '0111111111111111111111111010100')
(-787, '0111111111111111111111111010011')
(-786, '0111111111111111111111111010010')
(-785, '0111111111111111111111111010001')
(-784, '0111111111111111111111111010000')
(-783, '0111111111111111111111111001111')
(-782, '0111111111111111111111111001110')
(-781, '0111111111111111111111111001101')
(-780, '0111111111111111111111111001100')
(-779, '0111111111111111111111111001011')
(-778, '0111111111111111111111111001010')
(-777, '0111111111111111111111111001001')
(-776, '0111111111111111111111111001000')
(-775, '0111111111111111111111111000111')
(-774, '0111111111111111111111111000110')
(-773, '0111111111111111111111111000101')
(-772, '0111111111111111111111111000100')
(-771, '0111111111111111111111111000011')
(-770, '0111111111111111111111111000010')
(-769, '0111111111111111111111111000001')
(-768, '0111111111111111111111111000000')
(-767, '011111111111111111111111011111')
(-766, '011111111111111111111111011110')
(-765, '011111111111111111111111011101')
(-764, '011111111111111111111111011100')
(-763, '011111111111111111111111011011')
(-762, '011111111111111111111111011010')
(-761, '011111111111111111111111011001')
(-760, '011111111111111111111111011000')
(-759, '011111111111111111111111010111')
(-758, '011111111111111111111111010110')
(-757, '011111111111111111111111010101')
(-756, '011111111111111111111111010100')
(-755, '011111111111111111111111010011')
(-754, '011111111111111111111111010010')
(-753, '011111111111111111111111010001')
(-752, '011111111111111111111111010000')
(-751, '011111111111111111111111001111')
(-750, '011111111111111111111111001110')
(-749, '011111111111111111111111001101')
(-748, '011111111111111111111111001100')
(-747, '011111111111111111111111001011')
(-746, '011111111111111111111111001010')
(-745, '011111111111111111111111001001')
(-744, '011111111111111111111111001000')
(-743, '011111111111111111111111000111')
(-742, '011111111111111111111111000110')
(-741, '011111111111111111111111000101')
(-740, '011111111111111111111111000100')
(-739, '011111111111111111111111000011')
(-738, '011111111111111111111111000010')
(-737, '011111111111111111111111000001')
(-736, '011111111111111111111111000000')
(-735, '01111111111111111111111011111')
(-734, '01111111111111111111111011110')
(-733, '01111111111111111111111011101')
(-732, '01111111111111111111111011100')
(-731, '01111111111111111111111011011')
(-730, '01111111111111111111111011010')
(-729, '01111111111111111111111011001')
(-728, '01111111111111111111111011000')
(-727, '01111111111111111111111010111')
(-726, '01111111111111111111111010110')
(-725, '01111111111111111111111010101')
(-724, '01111111111111111111111010100')
(-723, '01111111111111111111111010011')
(-722, '01111111111111111111111010010')
(-721, '01111111111111111111111010001')
(-720, '01111111111111111111111010000')
(-719, '01111111111111111111111001111')
(-718, '01111111111111111111111001110')
(-717, '01111111111111111111111001101')
(-716, '01111111111111111111111001100')
(-715, '01111111111111111111111001011')
(-714, '01111111111111111111111001010')
(-713, '01111111111111111111111001001')
(-712, '01111111111111111111111001000')
(-711, '01111111111111111111111000111')
(-710, '01111111111111111111111000110')
(-709, '01111111111111111111111000101')
(-708, '01111111111111111111111000100')
(-707, '01111111111111111111111000011')
(-706, '01111111111111111111111000010')
(-705, '01111111111111111111111000001')
(-704, '01111111111111111111111000000')
(-703, '0111111111111111111111011111')
(-702, '0111111111111111111111011110')
(-701, '0111111111111111111111011101')
(-700, '0111111111111111111111011100')
(-699, '0111111111111111111111011011')
(-698, '0111111111111111111111011010')
(-697, '0111111111111111111111011001')
(-696, '0111111111111111111111011000')
(-695, '0111111111111111111111010111')
(-694, '0111111111111111111111010110')
(-693, '0111111111111111111111010101')
(-692, '0111111111111111111111010100')
(-691, '0111111111111111111111010011')
(-690, '0111111111111111111111010010')
(-689, '0111111111111111111111010001')
(-688, '0111111111111111111111010000')
(-687, '0111111111111111111111001111')
(-686, '0111111111111111111111001110')
(-685, '0111111111111111111111001101')
(-684, '0111111111111111111111001100')
(-683, '0111111111111111111111001011')
(-682, '0111111111111111111111001010')
(-681, '0111111111111111111111001001')
(-680, '0111111111111111111111001000')
(-679, '0111111111111111111111000111')
(-678, '0111111111111111111111000110')
(-677, '0111111111111111111111000101')
(-676, '0111111111111111111111000100')
(-675, '0111111111111111111111000011')
(-674, '0111111111111111111111000010')
(-673, '0111111111111111111111000001')
(-672, '0111111111111111111111000000')
(-671, '011111111111111111111011111')
(-670, '011111111111111111111011110')
(-669, '011111111111111111111011101')
(-668, '011111111111111111111011100')
(-667, '011111111111111111111011011')
(-666, '011111111111111111111011010')
(-665, '011111111111111111111011001')
(-664, '011111111111111111111011000')
(-663, '011111111111111111111010111')
(-662, '011111111111111111111010110')
(-661, '011111111111111111111010101')
(-660, '011111111111111111111010100')
(-659, '011111111111111111111010011')
(-658, '011111111111111111111010010')
(-657, '011111111111111111111010001')
(-656, '011111111111111111111010000')
(-655, '011111111111111111111001111')
(-654, '011111111111111111111001110')
(-653, '011111111111111111111001101')
(-652, '011111111111111111111001100')
(-651, '011111111111111111111001011')
(-650, '011111111111111111111001010')
(-649, '011111111111111111111001001')
(-648, '011111111111111111111001000')
(-647, '011111111111111111111000111')
(-646, '011111111111111111111000110')
(-645, '011111111111111111111000101')
(-644, '011111111111111111111000100')
(-643, '011111111111111111111000011')
(-642, '011111111111111111111000010')
(-641, '011111111111111111111000001')
(-640, '011111111111111111111000000')
(-639, '01111111111111111111011111')
(-638, '01111111111111111111011110')
(-637, '01111111111111111111011101')
(-636, '01111111111111111111011100')
(-635, '01111111111111111111011011')
(-634, '01111111111111111111011010')
(-633, '01111111111111111111011001')
(-632, '01111111111111111111011000')
(-631, '01111111111111111111010111')
(-630, '01111111111111111111010110')
(-629, '01111111111111111111010101')
(-628, '01111111111111111111010100')
(-627, '01111111111111111111010011')
(-626, '01111111111111111111010010')
(-625, '01111111111111111111010001')
(-624, '01111111111111111111010000')
(-623, '01111111111111111111001111')
(-622, '01111111111111111111001110')
(-621, '01111111111111111111001101')
(-620, '01111111111111111111001100')
(-619, '01111111111111111111001011')
(-618, '01111111111111111111001010')
(-617, '01111111111111111111001001')
(-616, '01111111111111111111001000')
(-615, '01111111111111111111000111')
(-614, '01111111111111111111000110')
(-613, '01111111111111111111000101')
(-612, '01111111111111111111000100')
(-611, '01111111111111111111000011')
(-610, '01111111111111111111000010')
(-609, '01111111111111111111000001')
(-608, '01111111111111111111000000')
(-607, '0111111111111111111011111')
(-606, '0111111111111111111011110')
(-605, '0111111111111111111011101')
(-604, '0111111111111111111011100')
(-603, '0111111111111111111011011')
(-602, '0111111111111111111011010')
(-601, '0111111111111111111011001')
(-600, '0111111111111111111011000')
(-599, '0111111111111111111010111')
(-598, '0111111111111111111010110')
(-597, '0111111111111111111010101')
(-596, '0111111111111111111010100')
(-595, '0111111111111111111010011')
(-594, '0111111111111111111010010')
(-593, '0111111111111111111010001')
(-592, '0111111111111111111010000')
(-591, '0111111111111111111001111')
(-590, '0111111111111111111001110')
(-589, '0111111111111111111001101')
(-588, '0111111111111111111001100')
(-587, '0111111111111111111001011')
(-586, '0111111111111111111001010')
(-585, '0111111111111111111001001')
(-584, '0111111111111111111001000')
(-583, '0111111111111111111000111')
(-582, '0111111111111111111000110')
(-581, '0111111111111111111000101')
(-580, '0111111111111111111000100')
(-579, '0111111111111111111000011')
(-578, '0111111111111111111000010')
(-577, '0111111111111111111000001')
(-576, '0111111111111111111000000')
(-575, '011111111111111111011111')
(-574, '011111111111111111011110')
(-573, '011111111111111111011101')
(-572, '011111111111111111011100')
(-571, '011111111111111111011011')
(-570, '011111111111111111011010')
(-569, '011111111111111111011001')
(-568, '011111111111111111011000')
(-567, '011111111111111111010111')
(-566, '011111111111111111010110')
(-565, '011111111111111111010101')
(-564, '011111111111111111010100')
(-563, '011111111111111111010011')
(-562, '011111111111111111010010')
(-561, '011111111111111111010001')
(-560, '011111111111111111010000')
(-559, '011111111111111111001111')
(-558, '011111111111111111001110')
(-557, '011111111111111111001101')
(-556, '011111111111111111001100')
(-555, '011111111111111111001011')
(-554, '011111111111111111001010')
(-553, '011111111111111111001001')
(-552, '011111111111111111001000')
(-551, '011111111111111111000111')
(-550, '011111111111111111000110')
(-549, '011111111111111111000101')
(-548, '011111111111111111000100')
(-547, '011111111111111111000011')
(-546, '011111111111111111000010')
(-545, '011111111111111111000001')
(-544, '011111111111111111000000')
(-543, '01111111111111111011111')
(-542, '01111111111111111011110')
(-541, '01111111111111111011101')
(-540, '01111111111111111011100')
(-539, '01111111111111111011011')
(-538, '01111111111111111011010')
(-537, '01111111111111111011001')
(-536, '01111111111111111011000')
(-535, '01111111111111111010111')
(-534, '01111111111111111010110')
(-533, '01111111111111111010101')
(-532, '01111111111111111010100')
(-531, '01111111111111111010011')
(-530, '01111111111111111010010')
(-529, '01111111111111111010001')
(-528, '01111111111111111010000')
(-527, '01111111111111111001111')
(-526, '01111111111111111001110')
(-525, '01111111111111111001101')
(-524, '01111111111111111001100')
(-523, '01111111111111111001011')
(-522, '01111111111111111001010')
(-521, '01111111111111111001001')
(-520, '01111111111111111001000')
(-519, '01111111111111111000111')
(-518, '01111111111111111000110')
(-517, '01111111111111111000101')
(-516, '01111111111111111000100')
(-515, '01111111111111111000011')
(-514, '01111111111111111000010')
(-513, '01111111111111111000001')
(-512, '01111111111111111000000')
(-511, '0111111111111111011111')
(-510, '0111111111111111011110')
(-509, '0111111111111111011101')
(-508, '0111111111111111011100')
(-507, '0111111111111111011011')
(-506, '0111111111111111011010')
(-505, '0111111111111111011001')
(-504, '0111111111111111011000')
(-503, '0111111111111111010111')
(-502, '0111111111111111010110')
(-501, '0111111111111111010101')
(-500, '0111111111111111010100')
(-499, '0111111111111111010011')
(-498, '0111111111111111010010')
(-497, '0111111111111111010001')
(-496, '0111111111111111010000')
(-495, '0111111111111111001111')
(-494, '0111111111111111001110')
(-493, '0111111111111111001101')
(-492, '0111111111111111001100')
(-491, '0111111111111111001011')
(-490, '0111111111111111001010')
(-489, '0111111111111111001001')
(-488, '0111111111111111001000')
(-487, '0111111111111111000111')
(-486, '0111111111111111000110')
(-485, '0111111111111111000101')
(-484, '0111111111111111000100')
(-483, '0111111111111111000011')
(-482, '0111111111111111000010')
(-481, '0111111111111111000001')
(-480, '0111111111111111000000')
(-479, '011111111111111011111')
(-478, '011111111111111011110')
(-477, '011111111111111011101')
(-476, '011111111111111011100')
(-475, '011111111111111011011')
(-474, '011111111111111011010')
(-473, '011111111111111011001')
(-472, '011111111111111011000')
(-471, '011111111111111010111')
(-470, '011111111111111010110')
(-469, '011111111111111010101')
(-468, '011111111111111010100')
(-467, '011111111111111010011')
(-466, '011111111111111010010')
(-465, '011111111111111010001')
(-464, '011111111111111010000')
(-463, '011111111111111001111')
(-462, '011111111111111001110')
(-461, '011111111111111001101')
(-460, '011111111111111001100')
(-459, '011111111111111001011')
(-458, '011111111111111001010')
(-457, '011111111111111001001')
(-456, '011111111111111001000')
(-455, '011111111111111000111')
(-454, '011111111111111000110')
(-453, '011111111111111000101')
(-452, '011111111111111000100')
(-451, '011111111111111000011')
(-450, '011111111111111000010')
(-449, '011111111111111000001')
(-448, '011111111111111000000')
(-447, '01111111111111011111')
(-446, '01111111111111011110')
(-445, '01111111111111011101')
(-444, '01111111111111011100')
(-443, '01111111111111011011')
(-442, '01111111111111011010')
(-441, '01111111111111011001')
(-440, '01111111111111011000')
(-439, '01111111111111010111')
(-438, '01111111111111010110')
(-437, '01111111111111010101')
(-436, '01111111111111010100')
(-435, '01111111111111010011')
(-434, '01111111111111010010')
(-433, '01111111111111010001')
(-432, '01111111111111010000')
(-431, '01111111111111001111')
(-430, '01111111111111001110')
(-429, '01111111111111001101')
(-428, '01111111111111001100')
(-427, '01111111111111001011')
(-426, '01111111111111001010')
(-425, '01111111111111001001')
(-424, '01111111111111001000')
(-423, '01111111111111000111')
(-422, '01111111111111000110')
(-421, '01111111111111000101')
(-420, '01111111111111000100')
(-419, '01111111111111000011')
(-418, '01111111111111000010')
(-417, '01111111111111000001')
(-416, '01111111111111000000')
(-415, '0111111111111011111')
(-414, '0111111111111011110')
(-413, '0111111111111011101')
(-412, '0111111111111011100')
(-411, '0111111111111011011')
(-410, '0111111111111011010')
(-409, '0111111111111011001')
(-408, '0111111111111011000')
(-407, '0111111111111010111')
(-406, '0111111111111010110')
(-405, '0111111111111010101')
(-404, '0111111111111010100')
(-403, '0111111111111010011')
(-402, '0111111111111010010')
(-401, '0111111111111010001')
(-400, '0111111111111010000')
(-399, '0111111111111001111')
(-398, '0111111111111001110')
(-397, '0111111111111001101')
(-396, '0111111111111001100')
(-395, '0111111111111001011')
(-394, '0111111111111001010')
(-393, '0111111111111001001')
(-392, '0111111111111001000')
(-391, '0111111111111000111')
(-390, '0111111111111000110')
(-389, '0111111111111000101')
(-388, '0111111111111000100')
(-387, '0111111111111000011')
(-386, '0111111111111000010')
(-385, '0111111111111000001')
(-384, '0111111111111000000')
(-383, '011111111111011111')
(-382, '011111111111011110')
(-381, '011111111111011101')
(-380, '011111111111011100')
(-379, '011111111111011011')
(-378, '011111111111011010')
(-377, '011111111111011001')
(-376, '011111111111011000')
(-375, '011111111111010111')
(-374, '011111111111010110')
(-373, '011111111111010101')
(-372, '011111111111010100')
(-371, '011111111111010011')
(-370, '011111111111010010')
(-369, '011111111111010001')
(-368, '011111111111010000')
(-367, '011111111111001111')
(-366, '011111111111001110')
(-365, '011111111111001101')
(-364, '011111111111001100')
(-363, '011111111111001011')
(-362, '011111111111001010')
(-361, '011111111111001001')
(-360, '011111111111001000')
(-359, '011111111111000111')
(-358, '011111111111000110')
(-357, '011111111111000101')
(-356, '011111111111000100')
(-355, '011111111111000011')
(-354, '011111111111000010')
(-353, '011111111111000001')
(-352, '011111111111000000')
(-351, '01111111111011111')
(-350, '01111111111011110')
(-349, '01111111111011101')
(-348, '01111111111011100')
(-347, '01111111111011011')
(-346, '01111111111011010')
(-345, '01111111111011001')
(-344, '01111111111011000')
(-343, '01111111111010111')
(-342, '01111111111010110')
(-341, '01111111111010101')
(-340, '01111111111010100')
(-339, '01111111111010011')
(-338, '01111111111010010')
(-337, '01111111111010001')
(-336, '01111111111010000')
(-335, '01111111111001111')
(-334, '01111111111001110')
(-333, '01111111111001101')
(-332, '01111111111001100')
(-331, '01111111111001011')
(-330, '01111111111001010')
(-329, '01111111111001001')
(-328, '01111111111001000')
(-327, '01111111111000111')
(-326, '01111111111000110')
(-325, '01111111111000101')
(-324, '01111111111000100')
(-323, '01111111111000011')
(-322, '01111111111000010')
(-321, '01111111111000001')
(-320, '01111111111000000')
(-319, '0111111111011111')
(-318, '0111111111011110')
(-317, '0111111111011101')
(-316, '0111111111011100')
(-315, '0111111111011011')
(-314, '0111111111011010')
(-313, '0111111111011001')
(-312, '0111111111011000')
(-311, '0111111111010111')
(-310, '0111111111010110')
(-309, '0111111111010101')
(-308, '0111111111010100')
(-307, '0111111111010011')
(-306, '0111111111010010')
(-305, '0111111111010001')
(-304, '0111111111010000')
(-303, '0111111111001111')
(-302, '0111111111001110')
(-301, '0111111111001101')
(-300, '0111111111001100')
(-299, '0111111111001011')
(-298, '0111111111001010')
(-297, '0111111111001001')
(-296, '0111111111001000')
(-295, '0111111111000111')
(-294, '0111111111000110')
(-293, '0111111111000101')
(-292, '0111111111000100')
(-291, '0111111111000011')
(-290, '0111111111000010')
(-289, '0111111111000001')
(-288, '0111111111000000')
(-287, '011111111011111')
(-286, '011111111011110')
(-285, '011111111011101')
(-284, '011111111011100')
(-283, '011111111011011')
(-282, '011111111011010')
(-281, '011111111011001')
(-280, '011111111011000')
(-279, '011111111010111')
(-278, '011111111010110')
(-277, '011111111010101')
(-276, '011111111010100')
(-275, '011111111010011')
(-274, '011111111010010')
(-273, '011111111010001')
(-272, '011111111010000')
(-271, '011111111001111')
(-270, '011111111001110')
(-269, '011111111001101')
(-268, '011111111001100')
(-267, '011111111001011')
(-266, '011111111001010')
(-265, '011111111001001')
(-264, '011111111001000')
(-263, '011111111000111')
(-262, '011111111000110')
(-261, '011111111000101')
(-260, '011111111000100')
(-259, '011111111000011')
(-258, '011111111000010')
(-257, '011111111000001')
(-256, '011111111000000')
(-255, '01111111011111')
(-254, '01111111011110')
(-253, '01111111011101')
(-252, '01111111011100')
(-251, '01111111011011')
(-250, '01111111011010')
(-249, '01111111011001')
(-248, '01111111011000')
(-247, '01111111010111')
(-246, '01111111010110')
(-245, '01111111010101')
(-244, '01111111010100')
(-243, '01111111010011')
(-242, '01111111010010')
(-241, '01111111010001')
(-240, '01111111010000')
(-239, '01111111001111')
(-238, '01111111001110')
(-237, '01111111001101')
(-236, '01111111001100')
(-235, '01111111001011')
(-234, '01111111001010')
(-233, '01111111001001')
(-232, '01111111001000')
(-231, '01111111000111')
(-230, '01111111000110')
(-229, '01111111000101')
(-228, '01111111000100')
(-227, '01111111000011')
(-226, '01111111000010')
(-225, '01111111000001')
(-224, '01111111000000')
(-223, '0111111011111')
(-222, '0111111011110')
(-221, '0111111011101')
(-220, '0111111011100')
(-219, '0111111011011')
(-218, '0111111011010')
(-217, '0111111011001')
(-216, '0111111011000')
(-215, '0111111010111')
(-214, '0111111010110')
(-213, '0111111010101')
(-212, '0111111010100')
(-211, '0111111010011')
(-210, '0111111010010')
(-209, '0111111010001')
(-208, '0111111010000')
(-207, '0111111001111')
(-206, '0111111001110')
(-205, '0111111001101')
(-204, '0111111001100')
(-203, '0111111001011')
(-202, '0111111001010')
(-201, '0111111001001')
(-200, '0111111001000')
(-199, '0111111000111')
(-198, '0111111000110')
(-197, '0111111000101')
(-196, '0111111000100')
(-195, '0111111000011')
(-194, '0111111000010')
(-193, '0111111000001')
(-192, '0111111000000')
(-191, '011111011111')
(-190, '011111011110')
(-189, '011111011101')
(-188, '011111011100')
(-187, '011111011011')
(-186, '011111011010')
(-185, '011111011001')
(-184, '011111011000')
(-183, '011111010111')
(-182, '011111010110')
(-181, '011111010101')
(-180, '011111010100')
(-179, '011111010011')
(-178, '011111010010')
(-177, '011111010001')
(-176, '011111010000')
(-175, '011111001111')
(-174, '011111001110')
(-173, '011111001101')
(-172, '011111001100')
(-171, '011111001011')
(-170, '011111001010')
(-169, '011111001001')
(-168, '011111001000')
(-167, '011111000111')
(-166, '011111000110')
(-165, '011111000101')
(-164, '011111000100')
(-163, '011111000011')
(-162, '011111000010')
(-161, '011111000001')
(-160, '011111000000')
(-159, '01111011111')
(-158, '01111011110')
(-157, '01111011101')
(-156, '01111011100')
(-155, '01111011011')
(-154, '01111011010')
(-153, '01111011001')
(-152, '01111011000')
(-151, '01111010111')
(-150, '01111010110')
(-149, '01111010101')
(-148, '01111010100')
(-147, '01111010011')
(-146, '01111010010')
(-145, '01111010001')
(-144, '01111010000')
(-143, '01111001111')
(-142, '01111001110')
(-141, '01111001101')
(-140, '01111001100')
(-139, '01111001011')
(-138, '01111001010')
(-137, '01111001001')
(-136, '01111001000')
(-135, '01111000111')
(-134, '01111000110')
(-133, '01111000101')
(-132, '01111000100')
(-131, '01111000011')
(-130, '01111000010')
(-129, '01111000001')
(-128, '01111000000')
(-127, '0111011111')
(-126, '0111011110')
(-125, '0111011101')
(-124, '0111011100')
(-123, '0111011011')
(-122, '0111011010')
(-121, '0111011001')
(-120, '0111011000')
(-119, '0111010111')
(-118, '0111010110')
(-117, '0111010101')
(-116, '0111010100')
(-115, '0111010011')
(-114, '0111010010')
(-113, '0111010001')
(-112, '0111010000')
(-111, '0111001111')
(-110, '0111001110')
(-109, '0111001101')
(-108, '0111001100')
(-107, '0111001011')
(-106, '0111001010')
(-105, '0111001001')
(-104, '0111001000')
(-103, '0111000111')
(-102, '0111000110')
(-101, '0111000101')
(-100, '0111000100')
(-99, '0111000011')
(-98, '0111000010')
(-97, '0111000001')
(-96, '0111000000')
(-95, '011011111')
(-94, '011011110')
(-93, '011011101')
(-92, '011011100')
(-91, '011011011')
(-90, '011011010')
(-89, '011011001')
(-88, '011011000')
(-87, '011010111')
(-86, '011010110')
(-85, '011010101')
(-84, '011010100')
(-83, '011010011')
(-82, '011010010')
(-81, '011010001')
(-80, '011010000')
(-79, '011001111')
(-78, '011001110')
(-77, '011001101')
(-76, '011001100')
(-75, '011001011')
(-74, '011001010')
(-73, '011001001')
(-72, '011001000')
(-71, '011000111')
(-70, '011000110')
(-69, '011000101')
(-68, '011000100')
(-67, '011000011')
(-66, '011000010')
(-65, '011000001')
(-64, '011000000')
(-63, '01011111')
(-62, '01011110')
(-61, '01011101')
(-60, '01011100')
(-59, '01011011')
(-58, '01011010')
(-57, '01011001')
(-56, '01011000')
(-55, '01010111')
(-54, '01010110')
(-53, '01010101')
(-52, '01010100')
(-51, '01010011')
(-50, '01010010')
(-49, '01010001')
(-48, '01010000')
(-47, '01001111')
(-46, '01001110')
(-45, '01001101')
(-44, '01001100')
(-43, '01001011')
(-42, '01001010')
(-41, '01001001')
(-40, '01001000')
(-39, '01000111')
(-38, '01000110')
(-37, '01000101')
(-36, '01000100')
(-35, '01000011')
(-34, '01000010')
(-33, '01000001')
(-32, '01000000')
(-31, '0011111')
(-30, '0011110')
(-29, '0011101')
(-28, '0011100')
(-27, '0011011')
(-26, '0011010')
(-25, '0011001')
(-24, '0011000')
(-23, '0010111')
(-22, '0010110')
(-21, '0010101')
(-20, '0010100')
(-19, '0010011')
(-18, '0010010')
(-17, '0010001')
(-16, '0010000')
(-15, '0001111')
(-14, '0001110')
(-13, '0001101')
(-12, '0001100')
(-11, '0001011')
(-10, '0001010')
(-9, '0001001')
(-8, '0001000')
(-7, '0000111')
(-6, '0000110')
(-5, '0000101')
(-4, '0000100')
(-3, '0000011')
(-2, '0000010')
(-1, '0000001')
(0, '1000000')
(1, '1000001')
(2, '1000010')
(3, '1000011')
(4, '1000100')
(5, '1000101')
(6, '1000110')
(7, '1000111')
(8, '1001000')
(9, '1001001')
(10, '1001010')
(11, '1001011')
(12, '1001100')
(13, '1001101')
(14, '1001110')
(15, '1001111')
(16, '1010000')
(17, '1010001')
(18, '1010010')
(19, '1010011')
(20, '1010100')
(21, '1010101')
(22, '1010110')
(23, '1010111')
(24, '1011000')
(25, '1011001')
(26, '1011010')
(27, '1011011')
(28, '1011100')
(29, '1011101')
(30, '1011110')
(31, '1011111')
(32, '11000000')
(33, '11000001')
(34, '11000010')
(35, '11000011')
(36, '11000100')
(37, '11000101')
(38, '11000110')
(39, '11000111')
(40, '11001000')
(41, '11001001')
(42, '11001010')
(43, '11001011')
(44, '11001100')
(45, '11001101')
(46, '11001110')
(47, '11001111')
(48, '11010000')
(49, '11010001')
(50, '11010010')
(51, '11010011')
(52, '11010100')
(53, '11010101')
(54, '11010110')
(55, '11010111')
(56, '11011000')
(57, '11011001')
(58, '11011010')
(59, '11011011')
(60, '11011100')
(61, '11011101')
(62, '11011110')
(63, '11011111')
(64, '111000000')
(65, '111000001')
(66, '111000010')
(67, '111000011')
(68, '111000100')
(69, '111000101')
(70, '111000110')
(71, '111000111')
(72, '111001000')
(73, '111001001')
(74, '111001010')
(75, '111001011')
(76, '111001100')
(77, '111001101')
(78, '111001110')
(79, '111001111')
(80, '111010000')
(81, '111010001')
(82, '111010010')
(83, '111010011')
(84, '111010100')
(85, '111010101')
(86, '111010110')
(87, '111010111')
(88, '111011000')
(89, '111011001')
(90, '111011010')
(91, '111011011')
(92, '111011100')
(93, '111011101')
(94, '111011110')
(95, '111011111')
(96, '1111000000')
(97, '1111000001')
(98, '1111000010')
(99, '1111000011')
(100, '1111000100')
(101, '1111000101')
(102, '1111000110')
(103, '1111000111')
(104, '1111001000')
(105, '1111001001')
(106, '1111001010')
(107, '1111001011')
(108, '1111001100')
(109, '1111001101')
(110, '1111001110')
(111, '1111001111')
(112, '1111010000')
(113, '1111010001')
(114, '1111010010')
(115, '1111010011')
(116, '1111010100')
(117, '1111010101')
(118, '1111010110')
(119, '1111010111')
(120, '1111011000')
(121, '1111011001')
(122, '1111011010')
(123, '1111011011')
(124, '1111011100')
(125, '1111011101')
(126, '1111011110')
(127, '1111011111')
(128, '11111000000')
(129, '11111000001')
(130, '11111000010')
(131, '11111000011')
(132, '11111000100')
(133, '11111000101')
(134, '11111000110')
(135, '11111000111')
(136, '11111001000')
(137, '11111001001')
(138, '11111001010')
(139, '11111001011')
(140, '11111001100')
(141, '11111001101')
(142, '11111001110')
(143, '11111001111')
(144, '11111010000')
(145, '11111010001')
(146, '11111010010')
(147, '11111010011')
(148, '11111010100')
(149, '11111010101')
(150, '11111010110')
(151, '11111010111')
(152, '11111011000')
(153, '11111011001')
(154, '11111011010')
(155, '11111011011')
(156, '11111011100')
(157, '11111011101')
(158, '11111011110')
(159, '11111011111')
(160, '111111000000')
(161, '111111000001')
(162, '111111000010')
(163, '111111000011')
(164, '111111000100')
(165, '111111000101')
(166, '111111000110')
(167, '111111000111')
(168, '111111001000')
(169, '111111001001')
(170, '111111001010')
(171, '111111001011')
(172, '111111001100')
(173, '111111001101')
(174, '111111001110')
(175, '111111001111')
(176, '111111010000')
(177, '111111010001')
(178, '111111010010')
(179, '111111010011')
(180, '111111010100')
(181, '111111010101')
(182, '111111010110')
(183, '111111010111')
(184, '111111011000')
(185, '111111011001')
(186, '111111011010')
(187, '111111011011')
(188, '111111011100')
(189, '111111011101')
(190, '111111011110')
(191, '111111011111')
(192, '1111111000000')
(193, '1111111000001')
(194, '1111111000010')
(195, '1111111000011')
(196, '1111111000100')
(197, '1111111000101')
(198, '1111111000110')
(199, '1111111000111')
(200, '1111111001000')
(201, '1111111001001')
(202, '1111111001010')
(203, '1111111001011')
(204, '1111111001100')
(205, '1111111001101')
(206, '1111111001110')
(207, '1111111001111')
(208, '1111111010000')
(209, '1111111010001')
(210, '1111111010010')
(211, '1111111010011')
(212, '1111111010100')
(213, '1111111010101')
(214, '1111111010110')
(215, '1111111010111')
(216, '1111111011000')
(217, '1111111011001')
(218, '1111111011010')
(219, '1111111011011')
(220, '1111111011100')
(221, '1111111011101')
(222, '1111111011110')
(223, '1111111011111')
(224, '11111111000000')
(225, '11111111000001')
(226, '11111111000010')
(227, '11111111000011')
(228, '11111111000100')
(229, '11111111000101')
(230, '11111111000110')
(231, '11111111000111')
(232, '11111111001000')
(233, '11111111001001')
(234, '11111111001010')
(235, '11111111001011')
(236, '11111111001100')
(237, '11111111001101')
(238, '11111111001110')
(239, '11111111001111')
(240, '11111111010000')
(241, '11111111010001')
(242, '11111111010010')
(243, '11111111010011')
(244, '11111111010100')
(245, '11111111010101')
(246, '11111111010110')
(247, '11111111010111')
(248, '11111111011000')
(249, '11111111011001')
(250, '11111111011010')
(251, '11111111011011')
(252, '11111111011100')
(253, '11111111011101')
(254, '11111111011110')
(255, '11111111011111')
(256, '111111111000000')
(257, '111111111000001')
(258, '111111111000010')
(259, '111111111000011')
(260, '111111111000100')
(261, '111111111000101')
(262, '111111111000110')
(263, '111111111000111')
(264, '111111111001000')
(265, '111111111001001')
(266, '111111111001010')
(267, '111111111001011')
(268, '111111111001100')
(269, '111111111001101')
(270, '111111111001110')
(271, '111111111001111')
(272, '111111111010000')
(273, '111111111010001')
(274, '111111111010010')
(275, '111111111010011')
(276, '111111111010100')
(277, '111111111010101')
(278, '111111111010110')
(279, '111111111010111')
(280, '111111111011000')
(281, '111111111011001')
(282, '111111111011010')
(283, '111111111011011')
(284, '111111111011100')
(285, '111111111011101')
(286, '111111111011110')
(287, '111111111011111')
(288, '1111111111000000')
(289, '1111111111000001')
(290, '1111111111000010')
(291, '1111111111000011')
(292, '1111111111000100')
(293, '1111111111000101')
(294, '1111111111000110')
(295, '1111111111000111')
(296, '1111111111001000')
(297, '1111111111001001')
(298, '1111111111001010')
(299, '1111111111001011')
(300, '1111111111001100')
(301, '1111111111001101')
(302, '1111111111001110')
(303, '1111111111001111')
(304, '1111111111010000')
(305, '1111111111010001')
(306, '1111111111010010')
(307, '1111111111010011')
(308, '1111111111010100')
(309, '1111111111010101')
(310, '1111111111010110')
(311, '1111111111010111')
(312, '1111111111011000')
(313, '1111111111011001')
(314, '1111111111011010')
(315, '1111111111011011')
(316, '1111111111011100')
(317, '1111111111011101')
(318, '1111111111011110')
(319, '1111111111011111')
(320, '11111111111000000')
(321, '11111111111000001')
(322, '11111111111000010')
(323, '11111111111000011')
(324, '11111111111000100')
(325, '11111111111000101')
(326, '11111111111000110')
(327, '11111111111000111')
(328, '11111111111001000')
(329, '11111111111001001')
(330, '11111111111001010')
(331, '11111111111001011')
(332, '11111111111001100')
(333, '11111111111001101')
(334, '11111111111001110')
(335, '11111111111001111')
(336, '11111111111010000')
(337, '11111111111010001')
(338, '11111111111010010')
(339, '11111111111010011')
(340, '11111111111010100')
(341, '11111111111010101')
(342, '11111111111010110')
(343, '11111111111010111')
(344, '11111111111011000')
(345, '11111111111011001')
(346, '11111111111011010')
(347, '11111111111011011')
(348, '11111111111011100')
(349, '11111111111011101')
(350, '11111111111011110')
(351, '11111111111011111')
(352, '111111111111000000')
(353, '111111111111000001')
(354, '111111111111000010')
(355, '111111111111000011')
(356, '111111111111000100')
(357, '111111111111000101')
(358, '111111111111000110')
(359, '111111111111000111')
(360, '111111111111001000')
(361, '111111111111001001')
(362, '111111111111001010')
(363, '111111111111001011')
(364, '111111111111001100')
(365, '111111111111001101')
(366, '111111111111001110')
(367, '111111111111001111')
(368, '111111111111010000')
(369, '111111111111010001')
(370, '111111111111010010')
(371, '111111111111010011')
(372, '111111111111010100')
(373, '111111111111010101')
(374, '111111111111010110')
(375, '111111111111010111')
(376, '111111111111011000')
(377, '111111111111011001')
(378, '111111111111011010')
(379, '111111111111011011')
(380, '111111111111011100')
(381, '111111111111011101')
(382, '111111111111011110')
(383, '111111111111011111')
(384, '1111111111111000000')
(385, '1111111111111000001')
(386, '1111111111111000010')
(387, '1111111111111000011')
(388, '1111111111111000100')
(389, '1111111111111000101')
(390, '1111111111111000110')
(391, '1111111111111000111')
(392, '1111111111111001000')
(393, '1111111111111001001')
(394, '1111111111111001010')
(395, '1111111111111001011')
(396, '1111111111111001100')
(397, '1111111111111001101')
(398, '1111111111111001110')
(399, '1111111111111001111')
(400, '1111111111111010000')
(401, '1111111111111010001')
(402, '1111111111111010010')
(403, '1111111111111010011')
(404, '1111111111111010100')
(405, '1111111111111010101')
(406, '1111111111111010110')
(407, '1111111111111010111')
(408, '1111111111111011000')
(409, '1111111111111011001')
(410, '1111111111111011010')
(411, '1111111111111011011')
(412, '1111111111111011100')
(413, '1111111111111011101')
(414, '1111111111111011110')
(415, '1111111111111011111')
(416, '11111111111111000000')
(417, '11111111111111000001')
(418, '11111111111111000010')
(419, '11111111111111000011')
(420, '11111111111111000100')
(421, '11111111111111000101')
(422, '11111111111111000110')
(423, '11111111111111000111')
(424, '11111111111111001000')
(425, '11111111111111001001')
(426, '11111111111111001010')
(427, '11111111111111001011')
(428, '11111111111111001100')
(429, '11111111111111001101')
(430, '11111111111111001110')
(431, '11111111111111001111')
(432, '11111111111111010000')
(433, '11111111111111010001')
(434, '11111111111111010010')
(435, '11111111111111010011')
(436, '11111111111111010100')
(437, '11111111111111010101')
(438, '11111111111111010110')
(439, '11111111111111010111')
(440, '11111111111111011000')
(441, '11111111111111011001')
(442, '11111111111111011010')
(443, '11111111111111011011')
(444, '11111111111111011100')
(445, '11111111111111011101')
(446, '11111111111111011110')
(447, '11111111111111011111')
(448, '111111111111111000000')
(449, '111111111111111000001')
(450, '111111111111111000010')
(451, '111111111111111000011')
(452, '111111111111111000100')
(453, '111111111111111000101')
(454, '111111111111111000110')
(455, '111111111111111000111')
(456, '111111111111111001000')
(457, '111111111111111001001')
(458, '111111111111111001010')
(459, '111111111111111001011')
(460, '111111111111111001100')
(461, '111111111111111001101')
(462, '111111111111111001110')
(463, '111111111111111001111')
(464, '111111111111111010000')
(465, '111111111111111010001')
(466, '111111111111111010010')
(467, '111111111111111010011')
(468, '111111111111111010100')
(469, '111111111111111010101')
(470, '111111111111111010110')
(471, '111111111111111010111')
(472, '111111111111111011000')
(473, '111111111111111011001')
(474, '111111111111111011010')
(475, '111111111111111011011')
(476, '111111111111111011100')
(477, '111111111111111011101')
(478, '111111111111111011110')
(479, '111111111111111011111')
(480, '1111111111111111000000')
(481, '1111111111111111000001')
(482, '1111111111111111000010')
(483, '1111111111111111000011')
(484, '1111111111111111000100')
(485, '1111111111111111000101')
(486, '1111111111111111000110')
(487, '1111111111111111000111')
(488, '1111111111111111001000')
(489, '1111111111111111001001')
(490, '1111111111111111001010')
(491, '1111111111111111001011')
(492, '1111111111111111001100')
(493, '1111111111111111001101')
(494, '1111111111111111001110')
(495, '1111111111111111001111')
(496, '1111111111111111010000')
(497, '1111111111111111010001')
(498, '1111111111111111010010')
(499, '1111111111111111010011')
(500, '1111111111111111010100')
(501, '1111111111111111010101')
(502, '1111111111111111010110')
(503, '1111111111111111010111')
(504, '1111111111111111011000')
(505, '1111111111111111011001')
(506, '1111111111111111011010')
(507, '1111111111111111011011')
(508, '1111111111111111011100')
(509, '1111111111111111011101')
(510, '1111111111111111011110')
(511, '1111111111111111011111')
(512, '11111111111111111000000')
(513, '11111111111111111000001')
(514, '11111111111111111000010')
(515, '11111111111111111000011')
(516, '11111111111111111000100')
(517, '11111111111111111000101')
(518, '11111111111111111000110')
(519, '11111111111111111000111')
(520, '11111111111111111001000')
(521, '11111111111111111001001')
(522, '11111111111111111001010')
(523, '11111111111111111001011')
(524, '11111111111111111001100')
(525, '11111111111111111001101')
(526, '11111111111111111001110')
(527, '11111111111111111001111')
(528, '11111111111111111010000')
(529, '11111111111111111010001')
(530, '11111111111111111010010')
(531, '11111111111111111010011')
(532, '11111111111111111010100')
(533, '11111111111111111010101')
(534, '11111111111111111010110')
(535, '11111111111111111010111')
(536, '11111111111111111011000')
(537, '11111111111111111011001')
(538, '11111111111111111011010')
(539, '11111111111111111011011')
(540, '11111111111111111011100')
(541, '11111111111111111011101')
(542, '11111111111111111011110')
(543, '11111111111111111011111')
(544, '111111111111111111000000')
(545, '111111111111111111000001')
(546, '111111111111111111000010')
(547, '111111111111111111000011')
(548, '111111111111111111000100')
(549, '111111111111111111000101')
(550, '111111111111111111000110')
(551, '111111111111111111000111')
(552, '111111111111111111001000')
(553, '111111111111111111001001')
(554, '111111111111111111001010')
(555, '111111111111111111001011')
(556, '111111111111111111001100')
(557, '111111111111111111001101')
(558, '111111111111111111001110')
(559, '111111111111111111001111')
(560, '111111111111111111010000')
(561, '111111111111111111010001')
(562, '111111111111111111010010')
(563, '111111111111111111010011')
(564, '111111111111111111010100')
(565, '111111111111111111010101')
(566, '111111111111111111010110')
(567, '111111111111111111010111')
(568, '111111111111111111011000')
(569, '111111111111111111011001')
(570, '111111111111111111011010')
(571, '111111111111111111011011')
(572, '111111111111111111011100')
(573, '111111111111111111011101')
(574, '111111111111111111011110')
(575, '111111111111111111011111')
(576, '1111111111111111111000000')
(577, '1111111111111111111000001')
(578, '1111111111111111111000010')
(579, '1111111111111111111000011')
(580, '1111111111111111111000100')
(581, '1111111111111111111000101')
(582, '1111111111111111111000110')
(583, '1111111111111111111000111')
(584, '1111111111111111111001000')
(585, '1111111111111111111001001')
(586, '1111111111111111111001010')
(587, '1111111111111111111001011')
(588, '1111111111111111111001100')
(589, '1111111111111111111001101')
(590, '1111111111111111111001110')
(591, '1111111111111111111001111')
(592, '1111111111111111111010000')
(593, '1111111111111111111010001')
(594, '1111111111111111111010010')
(595, '1111111111111111111010011')
(596, '1111111111111111111010100')
(597, '1111111111111111111010101')
(598, '1111111111111111111010110')
(599, '1111111111111111111010111')
(600, '1111111111111111111011000')
(601, '1111111111111111111011001')
(602, '1111111111111111111011010')
(603, '1111111111111111111011011')
(604, '1111111111111111111011100')
(605, '1111111111111111111011101')
(606, '1111111111111111111011110')
(607, '1111111111111111111011111')
(608, '11111111111111111111000000')
(609, '11111111111111111111000001')
(610, '11111111111111111111000010')
(611, '11111111111111111111000011')
(612, '11111111111111111111000100')
(613, '11111111111111111111000101')
(614, '11111111111111111111000110')
(615, '11111111111111111111000111')
(616, '11111111111111111111001000')
(617, '11111111111111111111001001')
(618, '11111111111111111111001010')
(619, '11111111111111111111001011')
(620, '11111111111111111111001100')
(621, '11111111111111111111001101')
(622, '11111111111111111111001110')
(623, '11111111111111111111001111')
(624, '11111111111111111111010000')
(625, '11111111111111111111010001')
(626, '11111111111111111111010010')
(627, '11111111111111111111010011')
(628, '11111111111111111111010100')
(629, '11111111111111111111010101')
(630, '11111111111111111111010110')
(631, '11111111111111111111010111')
(632, '11111111111111111111011000')
(633, '11111111111111111111011001')
(634, '11111111111111111111011010')
(635, '11111111111111111111011011')
(636, '11111111111111111111011100')
(637, '11111111111111111111011101')
(638, '11111111111111111111011110')
(639, '11111111111111111111011111')
(640, '111111111111111111111000000')
(641, '111111111111111111111000001')
(642, '111111111111111111111000010')
(643, '111111111111111111111000011')
(644, '111111111111111111111000100')
(645, '111111111111111111111000101')
(646, '111111111111111111111000110')
(647, '111111111111111111111000111')
(648, '111111111111111111111001000')
(649, '111111111111111111111001001')
(650, '111111111111111111111001010')
(651, '111111111111111111111001011')
(652, '111111111111111111111001100')
(653, '111111111111111111111001101')
(654, '111111111111111111111001110')
(655, '111111111111111111111001111')
(656, '111111111111111111111010000')
(657, '111111111111111111111010001')
(658, '111111111111111111111010010')
(659, '111111111111111111111010011')
(660, '111111111111111111111010100')
(661, '111111111111111111111010101')
(662, '111111111111111111111010110')
(663, '111111111111111111111010111')
(664, '111111111111111111111011000')
(665, '111111111111111111111011001')
(666, '111111111111111111111011010')
(667, '111111111111111111111011011')
(668, '111111111111111111111011100')
(669, '111111111111111111111011101')
(670, '111111111111111111111011110')
(671, '111111111111111111111011111')
(672, '1111111111111111111111000000')
(673, '1111111111111111111111000001')
(674, '1111111111111111111111000010')
(675, '1111111111111111111111000011')
(676, '1111111111111111111111000100')
(677, '1111111111111111111111000101')
(678, '1111111111111111111111000110')
(679, '1111111111111111111111000111')
(680, '1111111111111111111111001000')
(681, '1111111111111111111111001001')
(682, '1111111111111111111111001010')
(683, '1111111111111111111111001011')
(684, '1111111111111111111111001100')
(685, '1111111111111111111111001101')
(686, '1111111111111111111111001110')
(687, '1111111111111111111111001111')
(688, '1111111111111111111111010000')
(689, '1111111111111111111111010001')
(690, '1111111111111111111111010010')
(691, '1111111111111111111111010011')
(692, '1111111111111111111111010100')
(693, '1111111111111111111111010101')
(694, '1111111111111111111111010110')
(695, '1111111111111111111111010111')
(696, '1111111111111111111111011000')
(697, '1111111111111111111111011001')
(698, '1111111111111111111111011010')
(699, '1111111111111111111111011011')
(700, '1111111111111111111111011100')
(701, '1111111111111111111111011101')
(702, '1111111111111111111111011110')
(703, '1111111111111111111111011111')
(704, '11111111111111111111111000000')
(705, '11111111111111111111111000001')
(706, '11111111111111111111111000010')
(707, '11111111111111111111111000011')
(708, '11111111111111111111111000100')
(709, '11111111111111111111111000101')
(710, '11111111111111111111111000110')
(711, '11111111111111111111111000111')
(712, '11111111111111111111111001000')
(713, '11111111111111111111111001001')
(714, '11111111111111111111111001010')
(715, '11111111111111111111111001011')
(716, '11111111111111111111111001100')
(717, '11111111111111111111111001101')
(718, '11111111111111111111111001110')
(719, '11111111111111111111111001111')
(720, '11111111111111111111111010000')
(721, '11111111111111111111111010001')
(722, '11111111111111111111111010010')
(723, '11111111111111111111111010011')
(724, '11111111111111111111111010100')
(725, '11111111111111111111111010101')
(726, '11111111111111111111111010110')
(727, '11111111111111111111111010111')
(728, '11111111111111111111111011000')
(729, '11111111111111111111111011001')
(730, '11111111111111111111111011010')
(731, '11111111111111111111111011011')
(732, '11111111111111111111111011100')
(733, '11111111111111111111111011101')
(734, '11111111111111111111111011110')
(735, '11111111111111111111111011111')
(736, '111111111111111111111111000000')
(737, '111111111111111111111111000001')
(738, '111111111111111111111111000010')
(739, '111111111111111111111111000011')
(740, '111111111111111111111111000100')
(741, '111111111111111111111111000101')
(742, '111111111111111111111111000110')
(743, '111111111111111111111111000111')
(744, '111111111111111111111111001000')
(745, '111111111111111111111111001001')
(746, '111111111111111111111111001010')
(747, '111111111111111111111111001011')
(748, '111111111111111111111111001100')
(749, '111111111111111111111111001101')
(750, '111111111111111111111111001110')
(751, '111111111111111111111111001111')
(752, '111111111111111111111111010000')
(753, '111111111111111111111111010001')
(754, '111111111111111111111111010010')
(755, '111111111111111111111111010011')
(756, '111111111111111111111111010100')
(757, '111111111111111111111111010101')
(758, '111111111111111111111111010110')
(759, '111111111111111111111111010111')
(760, '111111111111111111111111011000')
(761, '111111111111111111111111011001')
(762, '111111111111111111111111011010')
(763, '111111111111111111111111011011')
(764, '111111111111111111111111011100')
(765, '111111111111111111111111011101')
(766, '111111111111111111111111011110')
(767, '111111111111111111111111011111')
(768, '1111111111111111111111111000000')
(769, '1111111111111111111111111000001')
(770, '1111111111111111111111111000010')
(771, '1111111111111111111111111000011')
(772, '1111111111111111111111111000100')
(773, '1111111111111111111111111000101')
(774, '1111111111111111111111111000110')
(775, '1111111111111111111111111000111')
(776, '1111111111111111111111111001000')
(777, '1111111111111111111111111001001')
(778, '1111111111111111111111111001010')
(779, '1111111111111111111111111001011')
(780, '1111111111111111111111111001100')
(781, '1111111111111111111111111001101')
(782, '1111111111111111111111111001110')
(783, '1111111111111111111111111001111')
(784, '1111111111111111111111111010000')
(785, '1111111111111111111111111010001')
(786, '1111111111111111111111111010010')
(787, '1111111111111111111111111010011')
(788, '1111111111111111111111111010100')
(789, '1111111111111111111111111010101')
(790, '1111111111111111111111111010110')
(791, '1111111111111111111111111010111')
(792, '1111111111111111111111111011000')
(793, '1111111111111111111111111011001')
(794, '1111111111111111111111111011010')
(795, '1111111111111111111111111011011')
(796, '1111111111111111111111111011100')
(797, '1111111111111111111111111011101')
(798, '1111111111111111111111111011110')
(799, '1111111111111111111111111011111')
(800, '11111111111111111111111111000000')
(801, '11111111111111111111111111000001')
(802, '11111111111111111111111111000010')
(803, '11111111111111111111111111000011')
(804, '11111111111111111111111111000100')
(805, '11111111111111111111111111000101')
(806, '11111111111111111111111111000110')
(807, '11111111111111111111111111000111')
(808, '11111111111111111111111111001000')
(809, '11111111111111111111111111001001')
(810, '11111111111111111111111111001010')
(811, '11111111111111111111111111001011')
(812, '11111111111111111111111111001100')
(813, '11111111111111111111111111001101')
(814, '11111111111111111111111111001110')
(815, '11111111111111111111111111001111')
(816, '11111111111111111111111111010000')
(817, '11111111111111111111111111010001')
(818, '11111111111111111111111111010010')
(819, '11111111111111111111111111010011')
(820, '11111111111111111111111111010100')
(821, '11111111111111111111111111010101')
(822, '11111111111111111111111111010110')
(823, '11111111111111111111111111010111')
(824, '11111111111111111111111111011000')
(825, '11111111111111111111111111011001')
(826, '11111111111111111111111111011010')
(827, '11111111111111111111111111011011')
(828, '11111111111111111111111111011100')
(829, '11111111111111111111111111011101')
(830, '11111111111111111111111111011110')
(831, '11111111111111111111111111011111')
(832, '111111111111111111111111111000000')
(833, '111111111111111111111111111000001')
(834, '111111111111111111111111111000010')
(835, '111111111111111111111111111000011')
(836, '111111111111111111111111111000100')
(837, '111111111111111111111111111000101')
(838, '111111111111111111111111111000110')
(839, '111111111111111111111111111000111')
(840, '111111111111111111111111111001000')
(841, '111111111111111111111111111001001')
(842, '111111111111111111111111111001010')
(843, '111111111111111111111111111001011')
(844, '111111111111111111111111111001100')
(845, '111111111111111111111111111001101')
(846, '111111111111111111111111111001110')
(847, '111111111111111111111111111001111')
(848, '111111111111111111111111111010000')
(849, '111111111111111111111111111010001')
(850, '111111111111111111111111111010010')
(851, '111111111111111111111111111010011')
(852, '111111111111111111111111111010100')
(853, '111111111111111111111111111010101')
(854, '111111111111111111111111111010110')
(855, '111111111111111111111111111010111')
(856, '111111111111111111111111111011000')
(857, '111111111111111111111111111011001')
(858, '111111111111111111111111111011010')
(859, '111111111111111111111111111011011')
(860, '111111111111111111111111111011100')
(861, '111111111111111111111111111011101')
(862, '111111111111111111111111111011110')
(863, '111111111111111111111111111011111')
(864, '1111111111111111111111111111000000')
(865, '1111111111111111111111111111000001')
(866, '1111111111111111111111111111000010')
(867, '1111111111111111111111111111000011')
(868, '1111111111111111111111111111000100')
(869, '1111111111111111111111111111000101')
(870, '1111111111111111111111111111000110')
(871, '1111111111111111111111111111000111')
(872, '1111111111111111111111111111001000')
(873, '1111111111111111111111111111001001')
(874, '1111111111111111111111111111001010')
(875, '1111111111111111111111111111001011')
(876, '1111111111111111111111111111001100')
(877, '1111111111111111111111111111001101')
(878, '1111111111111111111111111111001110')
(879, '1111111111111111111111111111001111')
(880, '1111111111111111111111111111010000')
(881, '1111111111111111111111111111010001')
(882, '1111111111111111111111111111010010')
(883, '1111111111111111111111111111010011')
(884, '1111111111111111111111111111010100')
(885, '1111111111111111111111111111010101')
(886, '1111111111111111111111111111010110')
(887, '1111111111111111111111111111010111')
(888, '1111111111111111111111111111011000')
(889, '1111111111111111111111111111011001')
(890, '1111111111111111111111111111011010')
(891, '1111111111111111111111111111011011')
(892, '1111111111111111111111111111011100')
(893, '1111111111111111111111111111011101')
(894, '1111111111111111111111111111011110')
(895, '1111111111111111111111111111011111')
(896, '11111111111111111111111111111000000')
(897, '11111111111111111111111111111000001')
(898, '11111111111111111111111111111000010')
(899, '11111111111111111111111111111000011')
(900, '11111111111111111111111111111000100')
(901, '11111111111111111111111111111000101')
(902, '11111111111111111111111111111000110')
(903, '11111111111111111111111111111000111')
(904, '11111111111111111111111111111001000')
(905, '11111111111111111111111111111001001')
(906, '11111111111111111111111111111001010')
(907, '11111111111111111111111111111001011')
(908, '11111111111111111111111111111001100')
(909, '11111111111111111111111111111001101')
(910, '11111111111111111111111111111001110')
(911, '11111111111111111111111111111001111')
(912, '11111111111111111111111111111010000')
(913, '11111111111111111111111111111010001')
(914, '11111111111111111111111111111010010')
(915, '11111111111111111111111111111010011')
(916, '11111111111111111111111111111010100')
(917, '11111111111111111111111111111010101')
(918, '11111111111111111111111111111010110')
(919, '11111111111111111111111111111010111')
(920, '11111111111111111111111111111011000')
(921, '11111111111111111111111111111011001')
(922, '11111111111111111111111111111011010')
(923, '11111111111111111111111111111011011')
(924, '11111111111111111111111111111011100')
(925, '11111111111111111111111111111011101')
(926, '11111111111111111111111111111011110')
(927, '11111111111111111111111111111011111')
(928, '111111111111111111111111111111000000')
(929, '111111111111111111111111111111000001')
(930, '111111111111111111111111111111000010')
(931, '111111111111111111111111111111000011')
(932, '111111111111111111111111111111000100')
(933, '111111111111111111111111111111000101')
(934, '111111111111111111111111111111000110')
(935, '111111111111111111111111111111000111')
(936, '111111111111111111111111111111001000')
(937, '111111111111111111111111111111001001')
(938, '111111111111111111111111111111001010')
(939, '111111111111111111111111111111001011')
(940, '111111111111111111111111111111001100')
(941, '111111111111111111111111111111001101')
(942, '111111111111111111111111111111001110')
(943, '111111111111111111111111111111001111')
(944, '111111111111111111111111111111010000')
(945, '111111111111111111111111111111010001')
(946, '111111111111111111111111111111010010')
(947, '111111111111111111111111111111010011')
(948, '111111111111111111111111111111010100')
(949, '111111111111111111111111111111010101')
(950, '111111111111111111111111111111010110')
(951, '111111111111111111111111111111010111')
(952, '111111111111111111111111111111011000')
(953, '111111111111111111111111111111011001')
(954, '111111111111111111111111111111011010')
(955, '111111111111111111111111111111011011')
(956, '111111111111111111111111111111011100')
(957, '111111111111111111111111111111011101')
(958, '111111111111111111111111111111011110')
(959, '111111111111111111111111111111011111')
(960, '1111111111111111111111111111111000000')
(961, '1111111111111111111111111111111000001')
(962, '1111111111111111111111111111111000010')
(963, '1111111111111111111111111111111000011')
(964, '1111111111111111111111111111111000100')
(965, '1111111111111111111111111111111000101')
(966, '1111111111111111111111111111111000110')
(967, '1111111111111111111111111111111000111')
(968, '1111111111111111111111111111111001000')
(969, '1111111111111111111111111111111001001')
(970, '1111111111111111111111111111111001010')
(971, '1111111111111111111111111111111001011')
(972, '1111111111111111111111111111111001100')
(973, '1111111111111111111111111111111001101')
(974, '1111111111111111111111111111111001110')
(975, '1111111111111111111111111111111001111')
(976, '1111111111111111111111111111111010000')
(977, '1111111111111111111111111111111010001')
(978, '1111111111111111111111111111111010010')
(979, '1111111111111111111111111111111010011')
(980, '1111111111111111111111111111111010100')
(981, '1111111111111111111111111111111010101')
(982, '1111111111111111111111111111111010110')
(983, '1111111111111111111111111111111010111')
(984, '1111111111111111111111111111111011000')
(985, '1111111111111111111111111111111011001')
(986, '1111111111111111111111111111111011010')
(987, '1111111111111111111111111111111011011')
(988, '1111111111111111111111111111111011100')
(989, '1111111111111111111111111111111011101')
(990, '1111111111111111111111111111111011110')
(991, '1111111111111111111111111111111011111')
(992, '11111111111111111111111111111111000000')
(993, '11111111111111111111111111111111000001')
(994, '11111111111111111111111111111111000010')
(995, '11111111111111111111111111111111000011')
(996, '11111111111111111111111111111111000100')
(997, '11111111111111111111111111111111000101')
(998, '11111111111111111111111111111111000110')
(999, '11111111111111111111111111111111000111')
(1000, '11111111111111111111111111111111001000')
(1001, '11111111111111111111111111111111001001')
(1002, '11111111111111111111111111111111001010')
(1003, '11111111111111111111111111111111001011')
(1004, '11111111111111111111111111111111001100')
(1005, '11111111111111111111111111111111001101')
(1006, '11111111111111111111111111111111001110')
(1007, '11111111111111111111111111111111001111')
(1008, '11111111111111111111111111111111010000')
(1009, '11111111111111111111111111111111010001')
(1010, '11111111111111111111111111111111010010')
(1011, '11111111111111111111111111111111010011')
(1012, '11111111111111111111111111111111010100')
(1013, '11111111111111111111111111111111010101')
(1014, '11111111111111111111111111111111010110')
(1015, '11111111111111111111111111111111010111')
(1016, '11111111111111111111111111111111011000')
(1017, '11111111111111111111111111111111011001')
(1018, '11111111111111111111111111111111011010')
(1019, '11111111111111111111111111111111011011')
(1020, '11111111111111111111111111111111011100')
(1021, '11111111111111111111111111111111011101')
(1022, '11111111111111111111111111111111011110')
(1023, '11111111111111111111111111111111011111')

c) ¿Para qué rango de valores de N, el código Rice requiere menos bits que la codificación binaria natural con bit de signo necesaria para representar todo el rango entre -1023 y +1023? Si la mayoría de datos a codificar pertenecen a este rango (rango de entrada óptima), el uso de código Rice será aconsejable (habrá ahorro de bits) ¿Cuál es el máximo ahorro de bits?


In [99]:
def getSubset(results, nb):
    subset = []
    for i in result:
        if len(i[1]) < bits:
            subset += [i]
    return subset


subset = getSubset(result, bits)

print "> El rango de valores de N cuya codificación RICE requiere de menos de",int(bits),"bits es", (min(subset)[0], max(subset)[0])
min_nb = min(subset, key = lambda t: len(t[1]))
print "> Máximo ahorro de bits:",int(bits) - len(min_nb[1])


> El rango de valores de N cuya codificación RICE requiere de menos de 11 bits es (-127, 127)
> Máximo ahorro de bits: 4

d) ¿Para qué valor de M el rango de entrada óptima se extiende entre -255 y +255? ¿Cuál es el máximo ahorro de bits ahora?


In [100]:
M = 128
result = [ (i,rice_compress(i, M)) for i in range(-1023, 1023 +1) ]
subset = getSubset(result, bits)

print "> M =",M
print "> Rango de entrada óptima:", (min(subset)[0], max(subset)[0])
min_nb = min(subset, key = lambda t: len(t[1]))
print "> Máximo ahorro de bits:",int(bits) - len(min_nb[1])


> M = 128
> Rango de entrada óptima: (-255, 255)
> Máximo ahorro de bits: 2

e) ¿Cuál es el mayor valor de M que permite lograr un máximo ahorro de hasta 6 bits? ¿Cuál es el rango de entrada óptima ahora?


In [101]:
M = 8
result = [ (i,rice_compress(i, M)) for i in range(-1023, 1023 +1) ]
subset = getSubset(result, bits)

print "> M =",M
print "> Rango de entrada óptima:", (min(subset)[0], max(subset)[0])
min_nb = min(subset, key = lambda t: len(t[1]))
print "> Máximo ahorro de bits:",int(bits) - len(min_nb[1])


> M = 8
> Rango de entrada óptima: (-47, 47)
> Máximo ahorro de bits: 6