#!/usr/bin/python3 seeds = [] maps = [] from os import getenv file = open("/root/dl/input5") if getenv("IN") != None: file = open("in.txt") seeds.extend([x for x in map(int, file.readline().strip().split(": ")[1].split(" "))]) file.readline().strip() def read_map(): l = file.readline() # s = l.split("-")[0] # ne rabimo # d = l.split("-")[2].split(" ")[0] # ne rabimo l = file.readline() v = [] while l != "\n" and l != "": v.append((int(l.strip().split(" ")[0]), int(l.strip().split(" ")[1]), int(l.strip().split(" ")[2]))) l = file.readline() maps.append(sorted(v, key=lambda x: x[1])) if l == "": return False return True while read_map(): pass def get_next_step(target, steps): # možnost izboljšave z bisekcijo def helper(): for index in range(len(steps)): if index+1 == len(steps): return steps[index] if steps[index+1][1] > target: return steps[index] r = helper() # print("r", r) if r[1] > target: return target if r[1] + r[2] - 1 < target: return target return r[0]+target-r[1] locations = {} for s in seeds: l = get_next_step(s, maps[0]) # print("l", l) for m in maps[1:]: l = get_next_step(l, m) # print("l", l) locations[s] = l print(min(locations.items(), key=lambda x: x[1])) from interval import interval, inf semena = interval() for i in range(len(seeds)//2): semena |= interval([seeds[2*i], seeds[2*i]+seeds[2*i+1]]) print(semena) def celoštevilski_komplement(intervala): r = interval() for i in range(len(intervala)): if i == 0: if intervala[i][0] == -inf: continue r |= interval([-inf, intervala[i][0]-1]) if i+1 == len(intervala): if intervala[i][1] == inf: continue r |= interval([intervala[i][1]+1, inf]) if i != 0: r |= interval([intervala[i-1][1]+1, intervala[i][0]-1]) return r def go_deeper(m, vhod): r = interval() porabljeni_sources = interval() for m in m: source = interval([m[1], m[1]+m[2]]) # print("source", source, "!source", celoštevilski_komplement(source)) # print("m", m, "source", source, "source^C", celoštevilski_komplement(source)) r |= (source & vhod) + m[0] - m[1] porabljeni_sources |= source vhod &= celoštevilski_komplement(porabljeni_sources) r |= vhod # print("go_deeper r", r) return r for i in range(len(maps)): semena = go_deeper(maps[i], semena) print(semena)