Skip to content

Commit 14f8d0a

Browse files
author
Chris Poch
committed
Day 19 trying RPN
1 parent 9305ab1 commit 14f8d0a

File tree

2 files changed

+562
-0
lines changed

2 files changed

+562
-0
lines changed

19.py

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import os
2+
import sys
3+
4+
debug = True
5+
6+
fileName = ""
7+
try:
8+
fileName = sys.argv[1]
9+
if len(fileName) < 1:
10+
fileName = "19.txt"
11+
except:
12+
fileName = "19.txt"
13+
if debug:
14+
print(fileName)
15+
16+
def rules(lines):
17+
rules = {}
18+
for line in lines:
19+
#convert to reverse polish notation
20+
vals = line[:-1].split(":")
21+
num = int(vals[0])
22+
terms = vals[1][1:].split(" ")
23+
for i in range(len(terms)):
24+
try:
25+
intVal = int(terms[i])
26+
terms[i] = intVal
27+
except:
28+
terms[i] = terms[i].replace('"','')
29+
30+
if len(terms) == 1:
31+
rules[num] = [terms[0]]
32+
else:
33+
if len(terms) == 2:
34+
rules[num] = [terms[0],terms[1],"&"]
35+
else:
36+
if len(terms) == 3:
37+
rules[num] = [terms[0],terms[2],"|"]
38+
else:
39+
if len(terms) == 5:
40+
rules[num] = [terms[0],terms[1],"&",terms[3],terms[4],"&","|"]
41+
else:
42+
print("Error len(terms)=",len(terms))
43+
return rules
44+
45+
def checkAllChars(list):
46+
allChars = True
47+
for item in list:
48+
if isinstance(item, int):
49+
allChars = False
50+
break
51+
return allChars
52+
53+
with open(fileName) as file:
54+
lines = file.readlines()
55+
ruleLines = []
56+
for line in lines:
57+
if len(line) > 1:
58+
ruleLines.append(line)
59+
else:
60+
break
61+
62+
rules = rules(ruleLines)
63+
64+
#solve for our rules
65+
rule0 = rules[0]
66+
allChars = False
67+
while not allChars:
68+
for i in range(len(rule0)):
69+
if isinstance(rule0[i], int):
70+
rule0 = rule0[0:i] + rules[rule0[i]] + rule0[i+1:]
71+
allChars = checkAllChars(rule0)
72+
73+
print(rule0)

0 commit comments

Comments
 (0)