!eval ```py
import random, itertools, timeit
def generate_unoptimised(num_x, num_y):
x_vals = random.sample(range(num_x), num_x)
y_vals = random.sample(range(num_y), num_y)
lines = []
for x, y in itertools.product(x_vals, y_vals):
lines.append(
f"if x == {x} and y == {y}:\n"
f" z = {random.randrange(100)}"
)
return '\n'.join(lines)
def generate_optimised(num_x, num_y):
x_vals = random.sample(range(num_x), num_x)
y_vals = random.sample(range(num_y), num_y)
blocks = []
for x in x_vals:
lines = [
f"if x == {x}:"
]
for y in y_vals:
lines.append(
f" if y == {y}:\n"
f" z = {random.randrange(100)}"
)
blocks.append('\n'.join(lines))
return '\n'.join(blocks)
num_runs = 100
num_variations = 200
variations = [
(random.randrange(5, 20), random.randrange(5, 20))
for _ in range(num_variations)
]
unoptimised_times = [
timeit.timeit(
stmt = generate_unoptimised(x, y),
setup = f"x, y = random.randrange({x}), random.randrange({y})",
number = num_runs,
globals = globals(),
)
for x, y in variations
]
optimised_times = [
timeit.timeit(
stmt = generate_optimised(x, y),
setup = f"x, y = random.randrange({x}), random.randrange({y})",
number = num_runs,
globals = globals(),
)
for x, y in variations
]
print(sum(unoptimised_times), sum(optimised_times))