From 71a6e456b59171a681bccff7eeba9db7367bca37 Mon Sep 17 00:00:00 2001 From: Raphael McSinyx Date: Mon, 31 Oct 2016 22:21:50 +0700 Subject: Thêm đề Tin học trẻ Quốc gia 2016 Bảng B MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- THT/C/Q-2016/bai2.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 THT/C/Q-2016/bai2.py (limited to 'THT/C/Q-2016/bai2.py') 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) -- cgit 1.4.1