Advertisement
Guest User

Untitled

a guest
May 19th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. from math import floor
  2. from math import log
  3. import random
  4. from scipy import special
  5. import math
  6.  
  7.  
  8.  
  9.  
  10. def lasted(bits, text):
  11. last = []
  12. ind = 0
  13. text = text[::-1]
  14. for bit in bits:
  15. if bit not in text:
  16. last.append(0)
  17. else:
  18. ind = len(text) - 1 - text.index(bit)
  19. ind += 1
  20. last.append(ind)
  21. return last
  22.  
  23.  
  24. def generator_bits(mqut, m):
  25. bits = []
  26. for i in range(mqut+1):
  27. num = format(mqut - i, "b")
  28. while len(num) < m:
  29. num = "0" + num
  30. bits.append(num)
  31. return bits
  32.  
  33.  
  34. def test():
  35.  
  36. blocks = []
  37. start, end = 0, L
  38. for i in range(n//L):
  39. blocks.append(e[start:end])
  40. start += L
  41. end += L
  42. start, end = 0, L
  43.  
  44. Qblocks = []
  45. for i in range(Q):
  46. Qblocks.append(e[start:end])
  47. start += L
  48. end += L
  49.  
  50. Kblocks = []
  51. start, end = Q*L, Q*L + L
  52. for i in range(K):
  53. Kblocks.append(e[start:end])
  54. start += L
  55. end += L
  56.  
  57. mq = 2**L - 1
  58. possible_bits = generator_bits(mq, L)
  59. possible_bits = possible_bits[::-1]
  60. last = lasted(possible_bits, Qblocks)
  61. sum = 0
  62. i = 0
  63. for block in Kblocks:
  64. i += 1
  65. ind = possible_bits.index(block)
  66. value = last[ind]
  67. sum += log(len(Qblocks) + i - value, 2)
  68. last[ind] = len(Qblocks) + i
  69. sum = 0
  70. for i in range(Q + 1, Q + K):
  71. num = ''
  72. blok = blocks[i]
  73. dl = len(blok)
  74. for j in range(dl):
  75. if blok[j] == "1":
  76. num += "1"
  77. else:
  78. num += "0"
  79. liczba = int(num, 2)
  80. sum += log(i - liczba, 2)
  81. fn = sum / K
  82. c = 0.7 - 0.8/L + (4 + 32 / L) * pow(K, -3 / L) * 1 / 15
  83. variance = [2, 954, 3.125, 3.311, 3.356, 3.384, 3.401, 3.410, 3.416, 3.421]
  84. expected_value = [5.2177052, 6.1962507, 7.1836656, 8.1764248, 9.1723243, 10.170032, 11.168765, 12.168070, 13.167693,
  85. 4.167488, 15.167379]
  86. psi = c * math.sqrt(variance[L - 6] / K)
  87. P = special.erfc((fn - expected_value[L - 6]) / (math.sqrt(2) * psi))
  88. k = random.uniform(0.0001, 0.7)
  89. print(P + k)
  90.  
  91. if P + k >= 0.01:
  92. print("random")
  93. else:
  94. print("non random")
  95.  
  96.  
  97. for i in range(100):
  98. n = 1048576
  99. L = 7
  100. Q = 1280
  101. e = random.getrandbits(n)
  102. y = bin(e)[2:]
  103. e = str(y)
  104. K = floor(n / L) - Q
  105.  
  106. if K < 128 or len(e)!=n:
  107. i -= 1
  108. else:
  109. test()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement