Tuesday, October 30, 2018

Q3: A stream of data is received , split it to bytes and needs to be reversed

Question: A stream of data is received and needs to be reversed. Each segment is 8 bits meaning the order of these segments need to be reversed:

11111111 00000000 00001111 10101010

(byte1) (byte2) (byte3) (byte4)

10101010 00001111 00000000 11111111

(byte4) (byte3) (byte2) (byte1)

Total number of bits will always be a multiple of 8. The data is given in an array (flat list) as such:

[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,1,0,1,0] 

And output should be like below (flat list)
[1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]


3 comments:

  1. Hi,

    Below is my solution,


    from functools import reduce

    x = [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0]
    print(x)
    newx = reduce(lambda i, j: i + j, [x[i:i + 8] for i in range(0, len(x), 8)][::-1])
    print(newx)

    ReplyDelete
  2. one liner haha

    l = [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0]
    print([item for innerlist in [l[i:i+8] for i in range(0, len(l), 8)][::-1] for item in innerlist])

    ReplyDelete