From f6ff66ea2da1f30303f17a2dac341411fb325881 Mon Sep 17 00:00:00 2001 From: blenovo Date: Sat, 16 Aug 2025 00:38:26 +0200 Subject: final puzzle and little cleanup for 2018 --- 2018/aoc2018-d07-2.py | 190 -------------------------------------------------- 1 file changed, 190 deletions(-) delete mode 100755 2018/aoc2018-d07-2.py (limited to '2018/aoc2018-d07-2.py') diff --git a/2018/aoc2018-d07-2.py b/2018/aoc2018-d07-2.py deleted file mode 100755 index 2196e47..0000000 --- a/2018/aoc2018-d07-2.py +++ /dev/null @@ -1,190 +0,0 @@ -class elf: - #HasWork = False; - #WorkTime = 0; - #WorkStep = ''; - - def WorkAssign(self,s): - AocOffset = 60; #correct value - #AocOffset = 0; #example only - self.WorkStep = s; - self.WorkTime = ord(s) -64 + AocOffset; - self.HasWork = True; - - def WorkReset(self): - self.HasWork = False; - #self.WorkTime = 0; - self.WorkStep = ''; - def DoWork(self): - self.WorkTime += -1; - #if - # return - def __init__(self):#, name, unlocks): - self.HasWork = False; - self.WorkTime = 1; - self.WorkStep = ''; - - def __str__(self): - return f"{self.WorkStep}\t{self.WorkTime}\t{self.HasWork}"; - -def WorkInProgress(elflist): - w = False; - for e in elflist: - w += e.HasWork; - return w; - -def TransInstr (instruction): - return [instruction[5], instruction[36]]; - - -myinput = {}; - -currentfilename = "input.txt"; -numberofworkers = 5; -#currentfilename = "testinput.txt"; #example only -#numberofworkers = 2;#example only - -f = open(currentfilename, 'r'); - -#list1 = []; -#list2 = {}; -list2 = set(); - -for line in f: - nowinstr = TransInstr(line); - #myinput[nowinstr[1]].append(nowinstr[0]); - list2.add(nowinstr[0]); - -#''' - try: - myinput[nowinstr[1]].append(nowinstr[0]); - #myinput[nowinstr[1]] = nowinstr[0]; - except: - myinput[nowinstr[1]] = []; - myinput[nowinstr[1]].append(nowinstr[0]); -#''' - -print(myinput.keys()); -print("##############"); -print(list2); -print("##############"); - -pr1 = list(myinput.keys()); -pr1.sort(); -pr2 = list(list2); -pr2.sort(); -print(pr1); -print(pr2); -print("##############"); - -print("##############"); -print("finding the first step"); - -CurrentStep = ''; - -workers = []; - -for i in range(numberofworkers): - workers.append(elf()); - - -AvailableSteps = []; -#AvailableSteps.append(CurrentStep); - -for l in list2: - IsUnique = True; - for k in myinput.keys(): - #print("L ", l, "\tK ",k, "\t",l == k); - if (l == k): - IsUnique = False; - break; - if IsUnique: - #CurrentStep = l; - #break; - AvailableSteps.append(l); - -print("Unique values are ", AvailableSteps); - -print("##############"); -print(myinput); -print("##############"); -part1 = ""; #CurrentStep; - -#list1 = myinput.keys(); -#list1.append(CurrentStep); -#print(list1); -part2 = -1; -IsWork = False; -print("whileloop begins"); -while (len(AvailableSteps) != 0 or IsWork): - - part2 += 1;#input(); - #IsWork = False; - AvailableSteps.sort(); - #CurrentStep = AvailableSteps[0]; - print(part2, " - steps sorted:",AvailableSteps); - for worker in workers: - #print(worker); - #print(worker.WorkTime); - worker.DoWork(); - if (worker.WorkTime == 0): # and worker.WorkStep != ''): - part1 += worker.WorkStep; - #if (worker.WorkSte - if (worker.WorkStep != ''): - for step in myinput: - try: - myinput[step].pop(myinput[step].index(worker.WorkStep)); - except: - pass; - CurrentStepsCheck = "";# workers[0].WorkStep + workers[1].WorkStep + workers[2].WorkStep + workers[3].WorkStep; - for w in workers: - CurrentStepsCheck += w.WorkStep; - if (len(myinput[step]) == 0 and part1.find(step) == -1 and CurrentStepsCheck.find(step) == -1 ): #and AvailableSteps.find(step) == -1): - AvailableSteps.append(step); - worker.WorkReset(); - #worker.WorkStep() = ''; - #worker.HasWork() = False; - AvailableSteps = list(dict.fromkeys(AvailableSteps)); - - for worker in workers: - if not worker.HasWork: - if (len(AvailableSteps) > 0): - worker.WorkAssign(AvailableSteps[0]); - print("\tWorker begins step", AvailableSteps[0], "at second ", part2); - AvailableSteps.pop(0); - #else: - #worker.DoWork(); - #worker.WorkTime() += -1; - - #part1 += CurrentStep; - #print("now ", CurrentStep); - ''' - for step in myinput: - try: - myinput[step].pop(myinput[step].index(CurrentStep)); - except: - pass; - if (len(myinput[step]) == 0 and part1.find(step) == -1): #and AvailableSteps.find(step) == -1): - AvailableSteps.append(step); - ''' - - IsWork = WorkInProgress(workers); - #AvailableSteps.pop(0); - -print("whileloop finished"); -print("##################################"); - -def RemoveDupsOrder(TheString): - a = ""; - for letter in TheString: - if not (letter in a): - a += letter; - return a; - -print(part1); - -part1 = RemoveDupsOrder(part1); - -print(part1); -print("total time part2 = ", part2); -#207 too low (because I forgot to add 60secs per step, fixed now -#987 correct -- cgit v1.2.3