# AOC Day Script Day XX # Date : 20XX.12.XX # Python Code # Developer : David Bandeira import sys,time from helpingFunctions import * setSampleMode(False) aocDay = identifyDay(sys.argv[0]) aocYear = identifyYear(sys.argv[0]) path = getPath2Data(aocDay,aocYear) filename = getFilename2Data(aocDay) def calculateWire(defWire,calculationSteps,valueWire): try: return int(defWire) except ValueError: pass if defWire not in valueWire: calculationStep = calculationSteps[defWire] if len(calculationStep) == 1: retVal = calculateWire(calculationStep[0],calculationSteps,valueWire) else: calc = calculationStep[-2] if calc == 'AND': retVal = calculateWire(calculationStep[0],calculationSteps,valueWire) & calculateWire(calculationStep[2],calculationSteps,valueWire) elif calc == 'OR': retVal = calculateWire(calculationStep[0],calculationSteps,valueWire) | calculateWire(calculationStep[2],calculationSteps,valueWire) elif calc == 'NOT': retVal = 0xffff - calculateWire(calculationStep[1],calculationSteps,valueWire) elif calc == 'RSHIFT': retVal = calculateWire(calculationStep[0],calculationSteps,valueWire) >> calculateWire(calculationStep[2],calculationSteps,valueWire) elif calc == 'LSHIFT': retVal = calculateWire(calculationStep[0],calculationSteps,valueWire) << calculateWire(calculationStep[2],calculationSteps,valueWire) valueWire[defWire] = retVal return valueWire[defWire] def createCalcSteps(data): calculationSteps={} for dataRow in data: (commandString, targetWire) = dataRow.split('->') calculationSteps[targetWire.strip()]= commandString.strip().split(' ') return calculationSteps def taskA (data) -> int: global calculationSteps gameScoreA = 0 calculationSteps=createCalcSteps(data) gameScoreA = calculateWire('a',calculationSteps,{}) return gameScoreA def taskB (data) -> int: gameScoreB = 0 gameScoreB = calculateWire('a',calculationSteps,{'b':score}) return gameScoreB def task(task: int,data) -> int: global score if task == 1: score = taskA(data) elif task == 2: score = taskB(data) return score def main(): showSampleMode() try: data = open(path+'/'+filename).read().strip().split('\n') except: print ('no inputfile found') print ('please check file %s on path %s' % (filename, path)) quit() st=time.time() print ('Day '+aocDay+': Tasks 1: '+ str(task(1,data))+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms') st=time.time() print ('Day '+aocDay+': Tasks 2: '+ str(task(2,data))+ ' executation time: ' + str(int((time.time()-st)*1000)) + 'ms') if __name__ == "__main__": main()