Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from itertools import permutations
- from copy import deepcopy
- permlist = list(permutations([5, 6, 7, 8, 9]))
- maximum = 0
- class Amp:
- def __init__(self, phase, inputlist):
- self.i = 0
- self.phase = phase
- self.inputlist = deepcopy(inputlist)
- self.inputlist[inputlist[1]] = phase
- self.i += 2
- def amp(self, ampinput):
- while self.i < len(inputlist):
- paramlist = [0] * 5
- n = inputlist[self.i]
- for x in range(4, -1, -1):
- paramlist[abs(x - 4)] = n // (10 ** x) % 10
- DE = str(paramlist[3]) + str(paramlist[4])
- C = paramlist[2]
- B = paramlist[1]
- A = paramlist[0]
- if DE == '99':
- return None
- first = inputlist[self.i + 1] if C == 1 else inputlist[inputlist[self.i + 1]]
- if DE == '03':
- inputlist[inputlist[self.i + 1]] = ampinput
- self.i += 2
- continue
- elif DE == '04':
- self.i += 2
- return first
- second = inputlist[self.i + 2] if B == 1 else inputlist[inputlist[self.i + 2]]
- if DE == '01':
- inputlist[inputlist[self.i + 3]] = first + second
- self.i += 4
- continue
- elif DE == '02':
- inputlist[inputlist[self.i + 3]] = first * second
- self.i += 4
- continue
- elif DE == '05':
- if first != 0:
- self.i = second
- else:
- self.i += 3
- continue
- elif DE == '06':
- if first == 0:
- self.i = second
- else:
- self.i += 3
- continue
- elif DE == '07':
- if first < second:
- inputlist[inputlist[self.i + 3]] = 1
- else:
- inputlist[inputlist[self.i + 3]] = 0
- self.i += 4
- continue
- elif DE == '08':
- if first == second:
- inputlist[inputlist[self.i + 3]] = 1
- else:
- inputlist[inputlist[self.i + 3]] = 0
- self.i += 4
- continue
- for permutation in permlist:
- inputlist = [int(el) for el in open("input7.txt", "r").readline().split(',')]
- a = Amp(permutation[0], inputlist)
- b = Amp(permutation[1], inputlist)
- c = Amp(permutation[2], inputlist)
- d = Amp(permutation[3], inputlist)
- e = Amp(permutation[4], inputlist)
- curr = e.amp(d.amp(c.amp(b.amp(a.amp(0)))))
- while curr != None:
- curr = e.amp(d.amp(c.amp(b.amp(a.amp(curr)))))
- if curr > maximum:
- maximum = curr
- else:
- break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement