about summary refs log tree commit diff
path: root/THT/C/Q-2016/bai2.py
diff options
context:
space:
mode:
Diffstat (limited to 'THT/C/Q-2016/bai2.py')
-rwxr-xr-xTHT/C/Q-2016/bai2.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/THT/C/Q-2016/bai2.py b/THT/C/Q-2016/bai2.py
new file mode 100755
index 0000000..bb04c54
--- /dev/null
+++ b/THT/C/Q-2016/bai2.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python3
+d = {'+': '+', '-': '-', '.': '*', ':': '/', '^': '**'}
+
+def Steps(string):
+    val = int()
+    for char in string:
+        if char in '+-.:^':
+            val += 1
+    return val
+
+def Calc(string):
+    global d
+    for char in '+-.:^':
+        string = string.replace(char, ' {} '.format(char))
+    l = string.split()
+    for char in '^.:+-':
+        if char in l:
+            idx = l.index(char)
+            s = ' '.join(l[idx - 1:idx + 2])
+            return string.replace(s, str(eval(s.replace(char, d[char]))))
+
+def MetaCalc(string):
+    for idx0, char0 in enumerate(string):
+        if char0 == ')':
+            for idx1, char1 in enumerate(reversed(string)):
+                if char1 == '(':
+                    idx1 = len(string) - idx1 - 1
+                    s = '({})'.format(Calc(string[idx1 + 1:idx0]))
+                    if not(Steps(s)) or ((Steps(s) == 1) and (s[:2] == '(-')):
+                        s = s[1:-1]
+                    return string.replace(string[idx1:idx0 + 1], s)
+    return Calc(string)
+
+with open('bai2.inp') as f:
+    s = f.readline()
+lines = Steps(s)
+for i in d:
+    s = s.replace(i, ' ' + i + ' ')
+for i in d:
+    s = s.replace(i + ' - ', i + ' -')
+l = s.split()
+with open('bai2.out', 'w') as f:
+    f.write(''.join(l) + '\n')
+    for _ in range(lines):
+        s = MetaCalc(s).replace(' ', '')
+        f.write('=' + s)
+        print(s)