Talk:Size and weight variation
From Bulbapedia, the community-driven Pokémon encyclopedia.
Jump to navigationJump to search
Gen III-IV min/max size odds
Decided to run calcs on the chances of min/max sizes in gen II-IV and here are my results;
Total personality values checked: 1099511627776
Number of personality values with maximum size: 436207616
Number of personality values with minimum size: 167772160
Values processed per minute: 235767534.877467
Total time elapsed: 279812.47588157654 seconds
Calculated odds
Smallest Size: 1/6553.6
Largest Size: 1/2,520.6153846153846153846153846154
My code just in case anyone is curious how these were calculated, I iterated through all the s values of all 16bitPID/ID' combos and sorted the values accordingly
Code
import time def calculate_size(): # Constants for the calculation h = 10 # Species' height in tenths of a meter # Initialize counters for maximum and minimum size counts max_size_count = 0 min_size_count = 0 total_values_checked = 0 # Start time start_time = time.time() # Iterate through all possible combinations of the last 16 bits of the PID for last_16_bits in range(65536): # Iterate through all possible IV prime combinations for HP_prime in range(16): for Atk_prime in range(16): for Def_prime in range(16): for Spd_prime in range(16): for SpAtk_prime in range(16): for SpDef_prime in range(16): # Calculate the intermediate value 's' p1 = last_16_bits % 256 p2 = (last_16_bits // 256) % 256 s = 256 * (p1 ^ (HP_prime * (Atk_prime ^ Def_prime))) + (p2 ^ (Spd_prime * (SpAtk_prime ^ SpDef_prime))) # Check if s is within the range [0, 9] for minimum size if 0 <= s <= 9: min_size_count += 1 # Check if s is within the range [65510, 65535] for maximum size if 65510 <= s <= 65535: max_size_count += 1 total_values_checked += 1 # Print progress update for every 1 billion values checked if total_values_checked % 1000000000 == 0: completion_percentage = (total_values_checked / (65536 * 16**6)) * 100 elapsed_time = time.time() - start_time print(f"Progress: Checked {total_values_checked} values. Completion: {completion_percentage:.2f}%. Elapsed Time: {elapsed_time:.2f} seconds. Maximum values found: {max_size_count}. Minimum values found: {min_size_count}") # End time end_time = time.time() # Calculate elapsed time in seconds elapsed_time = end_time - start_time print("Total personality values checked:", total_values_checked) print("Number of personality values with maximum size:", max_size_count) print("Number of personality values with minimum size:", min_size_count) print("Values processed per minute:", total_values_checked / (elapsed_time / 60)) return max_size_count, min_size_count, total_values_checked, elapsed_time # Call the function to calculate the count of maximum and minimum size personality values max_count, min_count, total_checked, elapsed_time = calculate_size() # Write output to file with open("output.txt", "w") as file: file.write(f"Total personality values checked: {total_checked}\n") file.write(f"Number of personality values with maximum size: {max_count}\n") file.write(f"Number of personality values with minimum size: {min_count}\n") file.write(f"Values processed per minute: {total_checked / (elapsed_time / 60)}\n") file.write(f"Total time elapsed: {elapsed_time} seconds\n") # Prompt to keep the window open input("Execution complete. Press Enter to exit.")