mirror of
https://github.com/iritmaximus/aoc.git
synced 2026-10-12 19:13:38 +03:00
trying my hands at multiprocessing, fails miserably because global variables...
This commit is contained in:
@@ -1,19 +1,66 @@
|
|||||||
|
from multiprocessing import Pool, cpu_count
|
||||||
|
|
||||||
|
LOWEST = float("inf")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
lines = read_input()
|
lines = read_input()
|
||||||
|
|
||||||
seeds = lines[0].split(" ")
|
seeds = lines[0].split(" ")
|
||||||
seeds = [int(seed) for seed in seeds[1:]]
|
seeds = [int(seed) for seed in seeds[1:]]
|
||||||
|
|
||||||
# hups muisti loppuu :D
|
|
||||||
seeds_2 = []
|
|
||||||
for i in range(0, len(seeds), 2):
|
|
||||||
seeds_2 += all_in_range(seeds[i], seeds[i+1])
|
|
||||||
|
|
||||||
res_1 = solve(lines, seeds)
|
res_1 = solve(lines, seeds)
|
||||||
res_2 = solve(lines, seeds_2)
|
print(res_1)
|
||||||
|
|
||||||
|
# hups muisti loppuu :D
|
||||||
|
pool = Pool(processes=(cpu_count() - 1))
|
||||||
|
|
||||||
|
for i in range(0, len(seeds), 2):
|
||||||
|
for x in range(seeds[i+1]):
|
||||||
|
pool.map(solve_2, [(lines, seeds[i] + x)])
|
||||||
|
print(f"{i}/{len(seeds)} - {x/seeds[i+1]:.2f}%: {x} --- {LOWEST}")
|
||||||
|
|
||||||
|
pool.close()
|
||||||
|
pool.join()
|
||||||
|
|
||||||
|
res_2 = LOWEST
|
||||||
|
print(res_2)
|
||||||
|
|
||||||
return res_1, res_2
|
return res_1, res_2
|
||||||
|
|
||||||
|
def solve_2(data):
|
||||||
|
lines = data[:-1]
|
||||||
|
seed = data[-1]
|
||||||
|
|
||||||
|
global LOWEST
|
||||||
|
transformed_seed = float("inf")
|
||||||
|
for line in lines[1:]:
|
||||||
|
if not line.strip() or line[-1] == ":":
|
||||||
|
if transformed_seed == float("inf"):
|
||||||
|
transformed_seed = seed
|
||||||
|
|
||||||
|
seed = transformed_seed
|
||||||
|
transformed_seed = float("inf")
|
||||||
|
continue
|
||||||
|
|
||||||
|
if transformed_seed != float("inf"):
|
||||||
|
continue
|
||||||
|
|
||||||
|
values = line.split(" ")
|
||||||
|
destination_start_range = int(values[0])
|
||||||
|
source_start_range = int(values[1])
|
||||||
|
count = int(values[2])
|
||||||
|
|
||||||
|
if in_range(seed, source_start_range, count):
|
||||||
|
if transformed_seed == float("inf"):
|
||||||
|
transformed_num = transform_seed_to_dest(seed, source_start_range, destination_start_range)
|
||||||
|
transformed_seed = transformed_num
|
||||||
|
|
||||||
|
if transformed_seed == float("inf"):
|
||||||
|
transformed_seed = seed
|
||||||
|
|
||||||
|
seed = transformed_seed
|
||||||
|
LOWEST = seed if seed < LOWEST else LOWEST
|
||||||
|
#print(LOWEST)
|
||||||
|
|
||||||
def solve(lines, seeds):
|
def solve(lines, seeds):
|
||||||
transformed_seeds = [0] * len(seeds)
|
transformed_seeds = [0] * len(seeds)
|
||||||
|
|||||||
Reference in New Issue
Block a user