Advertisement
GenericMadScientist

main_script.py

Oct 10th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. import csv
  2. from data import *
  3.  
  4. """Edit these three values and run the script."""
  5. initial_seed = 0
  6. number_of_seeds = 5000
  7. filename = 'starting_trunks'
  8.  
  9.  
  10. def next_seed(seed):
  11. seed = (0x343FD * seed + 0x269EC3) % (2 ** 32)
  12. return ((seed & 0xFFFF) << 16) | (seed >> 16)
  13.  
  14.  
  15. def roll(seed):
  16. return (seed >> 16) & 0x7FFF
  17.  
  18.  
  19. def random_choice(pool, seed):
  20. pool_copy = [x for x in pool]
  21. for i in range(10 * len(pool)):
  22. seed = next_seed(seed)
  23. x = roll(seed) % len(pool)
  24. seed = next_seed(seed)
  25. y = roll(seed) % len(pool)
  26. pool_copy[x], pool_copy[y] = pool_copy[y], pool_copy[x]
  27. return (pool_copy[:3], seed)
  28.  
  29.  
  30. def pad_to_full_deck(trunk, seed):
  31. quotas = [1, 3, 26, 3, 3]
  32.  
  33. for i in range(5):
  34. while quotas[i]:
  35. seed = next_seed(seed)
  36. card = roll(seed) % 1138 + 1
  37. if trunk[card] < ban_list[card] and groups[card] == i:
  38. trunk[card] += 1
  39. quotas[i] -= 1
  40.  
  41. return seed
  42.  
  43.  
  44. def get_init_trunk(seed):
  45. trunk = [0 for _ in range(1139)]
  46.  
  47. choices = []
  48. for i in range(4):
  49. (choice, seed) = random_choice(specials[i], seed)
  50. choices.append(choice)
  51.  
  52. for i in range(3):
  53. for j in range(4):
  54. trunk[choices[j][i]] += 1
  55. seed = pad_to_full_deck(trunk, seed)
  56.  
  57. return trunk
  58.  
  59.  
  60. def trunk_row(seed):
  61. trunk = get_init_trunk(seed)
  62. row = []
  63. for i in range(1139):
  64. for j in range(trunk[i]):
  65. row.append(names[i])
  66. return row
  67.  
  68.  
  69. if initial_seed < 0:
  70. raise ValueError('initial_seed was negative!')
  71. if number_of_seeds < 0:
  72. raise ValueError('number_of_seeds was negative!')
  73.  
  74. seed = 0
  75. for i in range(initial_seed):
  76. seed = next_seed(seed)
  77.  
  78. with open(f'{filename}.csv', 'w', newline='\n') as f:
  79. trunk_writer = csv.writer(f, delimiter=',',
  80. quotechar='"', quoting=csv.QUOTE_MINIMAL)
  81. trunk_writer.writerow(['Seed', 'Cards'])
  82. for i in range(number_of_seeds):
  83. trunk_writer.writerow([i] + trunk_row(seed))
  84. seed = next_seed(seed)
  85.  
  86. print('Done')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement