Files
AoC/2021/Day-08/day8-2.py

64 lines
2.7 KiB
Python

#!/usr/bin/python3
finalTotal = 0
# Function to find and return common chars in a string.
def findCommon(s1, s2):
common = ""
for i in s1:
if(i in s2):
common += i
return common
# Read in the input file. Put the signals and outputs in two
with open('/home/jake/Documents/AoC-2021/Day-8/input.txt') as inputFile:
for line in inputFile:
newNums = ['0','0','0','0','0','0','0','0','0','0']
out = ""
signals = line.strip('\n').split('|')[0].split()
output = line.strip('\n').split('|')[1].split()
for signal in signals:
if(len(signal) == 2):
newNums[1] = "".join(sorted(signal))
elif(len(signal) == 3):
newNums[7] = "".join(sorted(signal))
elif(len(signal) == 4):
newNums[4] = "".join(sorted(signal))
elif(len(signal) == 7):
newNums[8] = "".join(sorted(signal))
else:
continue
for signal in signals:
sortedSignal = "".join(sorted(signal))
if(sortedSignal in newNums):
continue
if(len(signal) == 5):
# Check for 2.
if(len(findCommon(signal, newNums[4])) == 2 and len(findCommon(signal, newNums[1])) == 1 and len(findCommon(signal, newNums[7])) == 2):
newNums[2] = "".join(sorted(signal))
# Check for 3.
elif(len(findCommon(signal, newNums[7])) == 3 and len(findCommon(signal, newNums[1])) == 2):
newNums[3] = "".join(sorted(signal))
# Check for 5.
elif(len(findCommon(signal, newNums[4])) == 3 and len(findCommon(signal, newNums[1])) == 1):
newNums[5] = "".join(sorted(signal))
elif(len(signal) == 6):
# Check for 6.
if(len(findCommon(signal, newNums[1])) == 1 and len(findCommon(signal, newNums[8])) == 6 and len(findCommon(signal, newNums[4])) == 3):
newNums[6] = "".join(sorted(signal))
# Check for 9.
elif(len(findCommon(signal, newNums[7])) == 3 and len(findCommon(signal, newNums[4])) == 4):
newNums[9] = "".join(sorted(signal))
# Check for 0.
elif(len(findCommon(signal, newNums[4])) == 3 and len(findCommon(signal, newNums[8])) == 6 and len(findCommon(signal, newNums[1])) == 2):
newNums[0] = "".join(sorted(signal))
for num in output:
sortedNum = "".join(sorted(num))
displayedNum = newNums.index(sortedNum)
out = str(out) + str(displayedNum)
finalTotal += int(out)
print(finalTotal)