Keta/chainify.py

114 lines
2.9 KiB
Python
Raw Normal View History

2019-12-26 09:56:31 +00:00
dyads = "*+-/%@"
2019-12-26 09:23:20 +00:00
monads = list(map(chr, range(ord("A"), ord("Z") + 1)))
nilads = "1234567890"
2019-12-26 09:48:18 +00:00
source = input()[::-1]
2019-12-26 09:23:20 +00:00
arities = []
for char in source:
if char in dyads:
arities.append((2, char))
elif char in monads:
arities.append((1, char))
else:
arities.append((0, char))
exprs = []
2019-12-26 09:48:18 +00:00
expr = []
2019-12-26 09:56:31 +00:00
patterns = ["020", "021", "022", "02", "10", "11", "12", "20", "21", "22",
"102", "110", "111", "112", "120", "121", "122",
"202", "210", "211", "212", "220", "221", "222"]
2019-12-26 09:48:18 +00:00
pattern = ""
2019-12-26 09:23:20 +00:00
while len(arities):
2019-12-26 09:56:31 +00:00
if pattern in patterns and pattern + str(arities[-1][0]) not in patterns:
2019-12-26 10:00:09 +00:00
exprs.append([pattern, expr])
2019-12-26 09:48:18 +00:00
expr = []
pattern = ""
pattern += str(arities[-1][0])
expr.append(arities[-1][1])
arities.pop()
2019-12-26 09:23:20 +00:00
2019-12-26 09:56:31 +00:00
if expr and pattern in patterns:
2019-12-26 10:00:09 +00:00
exprs.append([pattern, expr])
2019-12-26 09:56:31 +00:00
expr = []
pattern = ""
2019-12-26 09:23:20 +00:00
print(exprs)
2019-12-26 10:00:09 +00:00
for exp in exprs:
pattern, fns = exp
if pattern == "020":
2019-12-26 10:03:59 +00:00
print(fns[1] + "(" + fns[0] + ", " + fns[2] + ")")
2019-12-26 10:21:55 +00:00
elif pattern == "021":
print(fns[1] + "(" + fns[0] + ", " + fns[2] + "(R))")
elif pattern == "022":
print(fns[1] + "(" + fns[0] + ", " + fns[2] + "(L, R))")
2019-12-26 10:03:59 +00:00
elif pattern == "02":
print(fns[1] + "(" + fns[0] + ", R)")
elif pattern == "10":
print(fns[0] + "(" + fns[1] + ")")
elif pattern == "11":
print(fns[0] + "(" + fns[1] + "(R))")
elif pattern == "12":
print(fns[1] + "(" + fns[0] + ", " + "R)")
elif pattern == "20":
2019-12-26 10:06:47 +00:00
print(fns[0] + "(L, " + fns[1] + ")")
elif pattern == "21":
print(fns[0] + "(L, " + fns[1] + ")")
elif pattern == "22":
print(fns[1] + "(" + fns[0] + "(L, R), R*)")
elif pattern == "102":
print(fns[2] + "(" + fns[0] + "(" + fns[1] + "), R)")
2019-12-26 10:12:11 +00:00
elif pattern == "110":
print(fns[0] + "(" + fns[1] + "(" + fns[2] + "))")
elif pattern == "111":
print(fns[0] + "(" + fns[1] + "(" + fns[2] + "(R)))")
elif pattern == "120":
print(fns[1] + "(" + fns[0] + "(R), " + fns[2] + ")")
elif pattern == "121":
print(fns[1] + "(" + fns[0] + "(R), " + fns[2] + "(R*))")
elif pattern == "122":
print(fns[1] + "(" + fns[0] + "(R), " + fns[2] + "(L*, R*))")
elif pattern == "202":
print(fns[2] + "(" + fns[0] + "(L, " + fns[1] + "), R*)")
2019-12-26 10:15:15 +00:00
elif pattern == "210":
print(fns[0] + "(L, " + fns[1] + "(" + fns[2] + "))")
elif pattern == "211":
print(fns[0] + "(L, " + fns[1] + "(" + fns[2] + "(R*)))")
elif pattern == "212":
print(fns[2] + "(" + fns[0] + "(L, " + fns[1] + "(R*)), R&)")
2019-12-26 10:20:25 +00:00
elif pattern == "220":
print(fns[1] + "(" + fns[0] + "(L, R), " + fns[2] + ")")
elif pattern == "221":
print(fns[1] + "(" + fns[0] + "(L, R), " + fns[2] + "(R*))")
elif pattern == "222":
print(fns[2] + "(" + fns[1] + "(" + fns[0] + "(L, R), R*), R&)")
2019-12-26 10:12:11 +00:00