Talk:Size and weight variation: Difference between revisions
From Bulbapedia, the community-driven Pokémon encyclopedia.
Jump to navigationJump to search
Line 90: | Line 90: | ||
# Prompt to keep the window open | # Prompt to keep the window open | ||
input("Execution complete. Press Enter to exit.")</code> | input("Execution complete. Press Enter to exit.")</code> | ||
[[User:Joshiki|Joshiki]] ([[User talk:Joshiki|talk]]) 15:10, 19 July 2023 (UTC) |
Revision as of 15:10, 19 July 2023
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.")