Advertisement
Guest User

Untitled

a guest
May 1st, 2016
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. #!/usr/bin/env python2
  2. #
  3. # File: pnw.py
  4. # by @BitK_
  5. #
  6.  
  7. from z3 import *
  8.  
  9. solver = Solver()
  10.  
  11. s = [BitVec('s[%d]' % d, 8) for d in range(51)]
  12. for x in s:
  13. solver.add(x > 0)
  14.  
  15. solver.add(s[0] == s[6] + (s[38] ^ s[30]) - s[8])
  16. solver.add(s[1] == s[42] ^ s[38] ^ s[20] ^ s[19])
  17. solver.add(s[2] == s[35] + s[36] - s[19] - s[3] - s[44])
  18. solver.add(s[3] == s[19] + (s[17] ^ (s[41] - s[10] - s[10])))
  19. solver.add(s[4] == s[33] - s[21])
  20. solver.add(s[5] == s[4] ^ s[4] ^ s[8] ^ s[39])
  21. solver.add(s[6] == s[14] ^ (s[10] + s[25] - s[39]))
  22. solver.add(s[7] == s[32] + (s[15] ^ s[1]))
  23. solver.add(s[8] == s[8])
  24. solver.add(s[9] == s[24] ^ s[7])
  25. solver.add(s[10] == s[32] + (s[49] ^ s[17]) - s[4] )
  26. solver.add(s[11] == (s[42] ^ s[38]) - s[17] - s[8])
  27. solver.add(s[12] == s[14] + s[8])
  28. solver.add(s[13] == s[45] + s[20])
  29. solver.add(s[14] == s[9] + (s[20] ^ (s[25] - s[48])))
  30. solver.add(s[15] == s[18] - s[31])
  31. solver.add(s[16] == s[24] ^ s[46])
  32. solver.add(s[17] == (s[13] + s[2] + s[47]) ^ s[14] ^ s[50])
  33. solver.add(s[18] == s[0] + s[36] + s[44] - s[3])
  34. solver.add(s[19] == (s[41] ^ s[30]) - s[25] - s[28])
  35. solver.add(s[20] == s[25] ^ s[44])
  36. solver.add(s[21] == s[25] + ((s[28] + s[22]) ^ (s[39] ^ s[21])))
  37. solver.add(s[22] == (s[31] ^ s[44] - s[4] - s[12]) - s[30])
  38. solver.add(s[23] == s[39] ^ (s[32] - s[14]))
  39. solver.add(s[24] == s[21] ^ s[0] ^ s[18] ^ s[21])
  40. solver.add(s[25] == s[18] + s[4] + (s[12] ^ s[17]) - s[11])
  41. solver.add(s[26] == (s[32] ^ s[46]) + s[49] + s[20])
  42. solver.add(s[27] == (s[36] + s[25] + s[39] - s[48] ))
  43. solver.add(s[28] == s[14] ^ s[15])
  44. solver.add(s[29] == s[1] + s[35] - s[42])
  45. solver.add(s[30] == s[8] - s[31] - s[30] - s[24])
  46. solver.add(s[31] == s[42] ^ (s[15] + (s[18] - s[29])))
  47. solver.add(s[32] == s[14] + s[5] + s[15] - s[44])
  48. solver.add(s[33] == (s[20] ^ (s[45] - s[15])) - s[32])
  49. solver.add(s[34] == (s[3] ^ s[33]) - s[20] - s[10])
  50. solver.add(s[35] == (s[44] ^ (s[6] - s[43])) + s[1] - s[44])
  51. solver.add(s[36] == s[49] ^ (s[31] + s[25] - s[28]))
  52. solver.add(s[37] == s[11] + (s[34] ^ s[31]) - s[34])
  53. solver.add(s[38] == s[42] + (s[27] ^ s[36]) - s[5])
  54. solver.add(s[39] == s[37] ^ s[8])
  55. solver.add(s[40] == (s[44] ^ (s[7] + s[28])) - s[10])
  56. solver.add(s[41] == s[20] ^ s[7] ^ s[17] ^ s[26])
  57. solver.add(s[42] == s[50] + s[1] - s[28])
  58. solver.add(s[43] == s[46] + s[33] - s[15])
  59. solver.add(s[44] == (s[24] + s[42] + s[16]) ^ s[45] ^ s[21])
  60. solver.add(s[45] == s[22] - s[40])
  61. solver.add(s[46] == s[12] - s[46] - s[7] - s[35])
  62. solver.add(s[47] == (s[39] ^ (s[15] + s[26])) - s[12])
  63. solver.add(s[48] == s[11] ^ (s[15] - s[8]))
  64. solver.add(s[49] == s[27] ^ s[37])
  65. solver.add(s[50] == (s[13] + s[8] + s[17]) ^ s[24] ^ s[15])
  66.  
  67. #solver.add(s[] == )
  68. print ("SOLVING ...")
  69. print solver.check()
  70. solution = solver.model()
  71. print "".join(chr(solution[s[d]].as_long()) for d in range(51))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement