Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import csv
- from data import *
- """Edit these three values and run the script."""
- initial_seed = 0
- number_of_seeds = 5000
- filename = 'starting_trunks'
- def next_seed(seed):
- seed = (0x343FD * seed + 0x269EC3) % (2 ** 32)
- return ((seed & 0xFFFF) << 16) | (seed >> 16)
- def roll(seed):
- return (seed >> 16) & 0x7FFF
- def random_choice(pool, seed):
- pool_copy = [x for x in pool]
- for i in range(10 * len(pool)):
- seed = next_seed(seed)
- x = roll(seed) % len(pool)
- seed = next_seed(seed)
- y = roll(seed) % len(pool)
- pool_copy[x], pool_copy[y] = pool_copy[y], pool_copy[x]
- return (pool_copy[:3], seed)
- def pad_to_full_deck(trunk, seed):
- quotas = [1, 3, 26, 3, 3]
- for i in range(5):
- while quotas[i]:
- seed = next_seed(seed)
- card = roll(seed) % 1138 + 1
- if trunk[card] < ban_list[card] and groups[card] == i:
- trunk[card] += 1
- quotas[i] -= 1
- return seed
- def get_init_trunk(seed):
- trunk = [0 for _ in range(1139)]
- choices = []
- for i in range(4):
- (choice, seed) = random_choice(specials[i], seed)
- choices.append(choice)
- for i in range(3):
- for j in range(4):
- trunk[choices[j][i]] += 1
- seed = pad_to_full_deck(trunk, seed)
- return trunk
- def trunk_row(seed):
- trunk = get_init_trunk(seed)
- row = []
- for i in range(1139):
- for j in range(trunk[i]):
- row.append(names[i])
- return row
- if initial_seed < 0:
- raise ValueError('initial_seed was negative!')
- if number_of_seeds < 0:
- raise ValueError('number_of_seeds was negative!')
- seed = 0
- for i in range(initial_seed):
- seed = next_seed(seed)
- with open(f'{filename}.csv', 'w', newline='\n') as f:
- trunk_writer = csv.writer(f, delimiter=',',
- quotechar='"', quoting=csv.QUOTE_MINIMAL)
- trunk_writer.writerow(['Seed', 'Cards'])
- for i in range(number_of_seeds):
- trunk_writer.writerow([i] + trunk_row(seed))
- seed = next_seed(seed)
- print('Done')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement