diff options
Diffstat (limited to '2018/aoc2018-d07-2.py')
| -rwxr-xr-x | 2018/aoc2018-d07-2.py | 190 |
1 files changed, 0 insertions, 190 deletions
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
|
