diff --git a/03/03-1.py b/03/03-1.py index b72b4bc..9f20c92 100644 --- a/03/03-1.py +++ b/03/03-1.py @@ -4,7 +4,7 @@ part_sum = 0 matrix = [] -input_file = open("input.txt", "r") +input_file = open("input-ex.txt", "r") for line in input_file: matrix.append(line.strip()) input_file.close() diff --git a/03/03-2.py b/03/03-2.py index f93fddb..ba13b7d 100644 --- a/03/03-2.py +++ b/03/03-2.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- matrix = [] -input_file = open("input.txt", "r") +input_file = open("input-ex.txt", "r") for line in input_file: matrix.append(line.strip()) input_file.close() diff --git a/05/05-2-multiprocessig-pool.py b/05/05-2-multiprocessig-pool.py new file mode 100644 index 0000000..deb4c8c --- /dev/null +++ b/05/05-2-multiprocessig-pool.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from multiprocessing import Process +from time import time + +start = time() + +seeds = [] # 0 +seed_to_soil = [] # 1 +soil_to_fertilizer = [] # 2 +fertilizer_to_water = [] # 3 +water_to_light = [] # 4 +light_to_temperature = [] # 5 +temperature_to_humidity = [] # 6 +humidity_to_location = [] # 7 + +list_number = 0 + + +def find_dest(num, map_list): + for m in map_list: + if m[1] <= num < m[1] + m[2]: + return num - m[1] + m[0] + return num + + +# parse input +input_file = open("input", "r") +for line in input_file: + line = line.strip() + if line == "": + continue + if line.startswith('seeds: '): + seeds = [int(x) for x in line.replace('seeds: ', '').split()] + if line == "seed-to-soil map:": + list_number = 1 + continue + if line == "soil-to-fertilizer map:": + list_number = 2 + continue + if line == "fertilizer-to-water map:": + list_number = 3 + continue + if line == "water-to-light map:": + list_number = 4 + continue + if line == "light-to-temperature map:": + list_number = 5 + continue + if line == "temperature-to-humidity map:": + list_number = 6 + continue + if line == "humidity-to-location map:": + list_number = 7 + continue + if list_number == 1: + seed_to_soil.append([int(x) for x in line.split()]) + elif list_number == 2: + soil_to_fertilizer.append([int(x) for x in line.split()]) + elif list_number == 3: + fertilizer_to_water.append([int(x) for x in line.split()]) + elif list_number == 4: + water_to_light.append([int(x) for x in line.split()]) + elif list_number == 5: + light_to_temperature.append([int(x) for x in line.split()]) + elif list_number == 6: + temperature_to_humidity.append([int(x) for x in line.split()]) + elif list_number == 7: + humidity_to_location.append([int(x) for x in line.split()]) +input_file.close() + + +def find_min(seed, ra): + min_location = - 1 + print(f"gestartet.. Seed: {seed} Range: {ra}") + for s in range(seed, seed+ra): + soil = find_dest(s, seed_to_soil) + fertilizer = find_dest(soil, soil_to_fertilizer) + water = find_dest(fertilizer, fertilizer_to_water) + light = find_dest(water, water_to_light) + temperature = find_dest(light, light_to_temperature) + humidity = find_dest(temperature, temperature_to_humidity) + location = find_dest(humidity, humidity_to_location) + if min_location == -1: + min_location = location + elif location < min_location: + min_location = location + print(f"beendet.. Seed: {seed} Range: {ra} MinLocation: {min_location}") + + +if __name__ == '__main__': + p1 = Process(target=find_min, args=(seeds[0], seeds[1])) + p2 = Process(target=find_min, args=(seeds[2], seeds[3])) + p3 = Process(target=find_min, args=(seeds[4], seeds[5])) + p4 = Process(target=find_min, args=(seeds[6], seeds[7])) + p5 = Process(target=find_min, args=(seeds[8], seeds[9])) + p6 = Process(target=find_min, args=(seeds[10], seeds[11])) + p7 = Process(target=find_min, args=(seeds[12], seeds[13])) + p8 = Process(target=find_min, args=(seeds[14], seeds[15])) + p9 = Process(target=find_min, args=(seeds[16], seeds[17])) + p10 = Process(target=find_min, args=(seeds[18], seeds[19])) + + p1.start() + p2.start() + p3.start() + p4.start() + p5.start() + p6.start() + p7.start() + p8.start() + p9.start() + p10.start() + + p1.join() + p2.join() + p3.join() + p4.join() + p5.join() + p6.join() + p7.join() + p8.join() + p9.join() + p10.join() diff --git a/05/05-2-multiprocessig.py b/05/05-2-multiprocessig.py index e257b2f..27cf39f 100644 --- a/05/05-2-multiprocessig.py +++ b/05/05-2-multiprocessig.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from multiprocessing import Process +from multiprocessing import Pool from time import time start = time() @@ -72,8 +72,8 @@ input_file.close() def find_min(seed, ra): min_location = - 1 - print(f"gestartet.. Seed: {seed} Range: {ra}") - for s in range(seed, ra): + print(f"gestartet: Seed: {seed} Range: {ra}") + for s in range(seed, seed + ra): soil = find_dest(s, seed_to_soil) fertilizer = find_dest(soil, soil_to_fertilizer) water = find_dest(fertilizer, fertilizer_to_water) @@ -86,38 +86,23 @@ def find_min(seed, ra): elif location < min_location: min_location = location print(f"beendet.. Seed: {seed} Range: {ra} MinLocation: {min_location}") + return min_location if __name__ == '__main__': - p1 = Process(target=find_min, args=(seeds[0], seeds[1])) - p2 = Process(target=find_min, args=(seeds[2], seeds[3])) - p3 = Process(target=find_min, args=(seeds[4], seeds[5])) - p4 = Process(target=find_min, args=(seeds[6], seeds[7])) - p5 = Process(target=find_min, args=(seeds[8], seeds[9])) - p6 = Process(target=find_min, args=(seeds[10], seeds[11])) - p7 = Process(target=find_min, args=(seeds[12], seeds[13])) - p8 = Process(target=find_min, args=(seeds[14], seeds[15])) - p9 = Process(target=find_min, args=(seeds[16], seeds[17])) - p10 = Process(target=find_min, args=(seeds[18], seeds[19])) + num_processes = 10 - p1.start() - p2.start() - p3.start() - p4.start() - p5.start() - p6.start() - p7.start() - p8.start() - p9.start() - p10.start() + input_data = [] + for i in range(0, len(seeds), 2): + input_data.append((seeds[i], seeds[i+1])) - p1.join() - p2.join() - p3.join() - p4.join() - p5.join() - p6.join() - p7.join() - p8.join() - p9.join() - p10.join() +# input_data manuell erstellt: +# input_data = [(seeds[0], seeds[1]), (seeds[2], seeds[3]), (seeds[4], seeds[5]), (seeds[6], seeds[7]), +# (seeds[8], seeds[9]), (seeds[10], seeds[11]), (seeds[12], seeds[13]), (seeds[14], seeds[15]), +# (seeds[16], seeds[17]), (seeds[18], seeds[19])] + + with Pool(processes=num_processes) as pool: + results = pool.starmap(find_min, input_data) + print(results) + print(f"kleinste Location: {min(results)}") + print(f"Script beendet! Benötigte Zeit in Sekunden: {int(time()-start)}") diff --git a/05/Solution.PNG b/05/Solution.PNG new file mode 100644 index 0000000..bf25c61 Binary files /dev/null and b/05/Solution.PNG differ diff --git a/AdventOfCode2023.iml b/AdventOfCode2023.iml index 1e2ad41..b82982d 100644 --- a/AdventOfCode2023.iml +++ b/AdventOfCode2023.iml @@ -5,7 +5,7 @@ - + \ No newline at end of file