From 9a8224b7196a565f7e511c0ea8350742bf2e262e Mon Sep 17 00:00:00 2001 From: Lauri Jesmin Date: Wed, 6 Dec 2023 11:33:24 +0200 Subject: [PATCH] kka pahasti --- 5/advent_2.py | 135 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 98 insertions(+), 37 deletions(-) diff --git a/5/advent_2.py b/5/advent_2.py index 7a40422..0726b24 100755 --- a/5/advent_2.py +++ b/5/advent_2.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 -from dataclasses import dataclass +from dataclasses import dataclass, field import re -import sys @dataclass @@ -10,25 +9,96 @@ class Range: target: int source: int length: int + endpoint: int = field(init=False) + change: int = field(init=False) + + def __post_init__(self): + self.endpoint = self.source + self.length + self.change = self.target - self.source @dataclass class SR: - source: int + startpoint: int length: int + endpoint: int = field(init=False) + + def __post_init__(self): + self.endpoint = self.startpoint + self.length -def findmapping(sr,tables): +def getrangesource(range): + return range.source + + +def findmapping(sr, tables, prefix): + print(f"{prefix}Rekursiooni järel {len(tables)}") + print(f"{prefix}{sr}") + allresults = [] if len(tables) == 0: - return + print(f"{prefix}Tagasi, {sr.startpoint}") + return sr.startpoint table = tables.pop(0) + table.sort(key=getrangesource) + print(f"{prefix}{table}") + otsas = False for row in table: - if sr.source >= row.source: + if sr.endpoint < row.source: + # Väiksem kui käesolev mapping + print(f"{prefix}P1") + allresults.append(findmapping(sr, tables, prefix + "#")) + otsas = True + break + if sr.startpoint < row.source: + print(f"{prefix}P2") + # vahemik algus on enne käesoleva mappingu algust, lõpp kuskil hiljem + # kasutame ära vahemiku enne rea.source algust + allresults.append( + findmapping( + SR(sr.startpoint, row.source - sr.startpoint), tables, prefix + "#" + ) + ) + if sr.endpoint > row.source: + print(f"{prefix}P2 Vana {sr}") + sr = SR(row.source, sr.endpoint - row.source) + print(f"{prefix}P2 Uus {sr}") - print(sr) + if sr.startpoint >= row.source: + if sr.endpoint < row.endpoint: + print(f"{prefix}P31") + print(f"{prefix}Mapping {row} {sr} {len(tables)}") + allresults.append( + findmapping( + SR(row.target + (sr.startpoint - row.source), sr.length), + tables, + prefix + "#", + ) + ) + otsas = True + break + if sr.endpoint >= row.endpoint and sr.startpoint < row.endpoint: + print(f"{prefix}P32") + print(f"{prefix}Mapping {row} {sr} {len(tables)}") + allresults.append( + findmapping( + SR(row.target + (sr.startpoint - row.source), sr.length), + tables, + prefix + "#", + ) + ) + if (sr.endpoint > row.endpoint): + print(f"{prefix}P32 Vana {sr}") + sr = SR(row.endpoint, sr.endpoint - row.endpoint) + print(f"{prefix}P32 Uus {sr}") + if not otsas: + allresults.append(findmapping(sr, tables, prefix + "#")) + + print(f"{prefix}Vastused") + print(f"{prefix}{allresults}") + return min(allresults) -with open("data.txt") as file: +with open("data2.txt") as file: lines = [line.rstrip() for line in file] tables = [] @@ -36,16 +106,16 @@ table = [] seeds = [] seedranges = [] for line in lines: - if line == '': - print('Tühi rida') + if line == "": + # print("Tühi rida") continue if line.startswith("seeds: "): - temp = re.findall(r'\d+', line) + temp = re.findall(r"\d+", line) seeds = list(map(int, temp)) - print(len(seeds)) - for i in range(0, int(len(seeds)/2)): - seedranges.append(SR(seeds[i*2], seeds[i*2+1])) - print(seedranges) + # print(len(seeds)) + for i in range(0, int(len(seeds) / 2)): + seedranges.append(SR(seeds[i * 2], seeds[i * 2 + 1])) + # print(seedranges) continue if line[0].isalpha(): @@ -54,35 +124,26 @@ for line in lines: table = [] continue - temp = re.findall(r'\d+', line) + temp = re.findall(r"\d+", line) tableitems = list(map(int, temp)) table.append(Range(*tableitems)) tables.append(table) -for table in tables: - print("tabel") - for rida in table: - print(rida) +# for table in tables: +# #print("tabel") +# for rida in table: +# print(rida) pisim = 0 + + +print("########################") +print("####") +print(seedranges) +pisim = [] for sr in seedranges: - findmapping(sr,tables) - - for table in tables: - muudetud = False - print("tabel") - for mapping in table: - if arv >= mapping.source and arv < (mapping.source + mapping.length): - print(mapping) - arv = mapping.target + (arv - mapping.source) - print(f"Uus arv: {arv}") - break + pisim.append(findmapping(sr, tables, "")) - print(f"Vastus: {arv}") - if pisim == 0: - pisim = arv - if pisim > arv: - pisim = arv -print(pisim) +print(min(pisim))