fork download
  1. import random
  2.  
  3. def pair(x,y):
  4. z = 0
  5. i = 0
  6. while x > 0 or y > 0:
  7. z |= (x & 1)<<i
  8. i += 1
  9. z |= (y & 1)<<i
  10. i += 1
  11. x >>= 1
  12. y >>= 1
  13. return z
  14.  
  15. def unpair(z):
  16. x = 0
  17. y = 0
  18. i = 0
  19. while z > 0:
  20. x |= (z & 1) << i
  21. y |= (z & 2) >> 1 << i
  22. i += 1
  23. z >>= 2
  24. return (x,y)
  25.  
  26. def pair_many(seq):
  27. z = pair(seq[0], seq[1])
  28. for item in seq[2:]:
  29. z = pair(z, item)
  30. return z
  31.  
  32. def unpair_many(z, size):
  33. result = []
  34. for _ in range(size-1):
  35. z, item = unpair(z)
  36. result.append(item)
  37. result.append(z)
  38. result.reverse()
  39. return result
  40.  
  41. seq = [4, 8, 15, 16, 23, 42]
  42. z = pair_many(seq)
  43. print(z)
  44. print(unpair_many(z, len(seq)))
Success #stdin #stdout 0.02s 11636KB
stdin
Standard input is empty
stdout
5192296858534846147333332324847052
[4, 8, 15, 16, 23, 42]