結果

問題 No.708 (+ー)の式
ユーザー Wataru Maeda
提出日時 2018-10-24 23:03:19
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 37 ms / 2,000 ms
コード長 5,706 bytes
コンパイル時間 244 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 11,136 KB
最終ジャッジ日時 2024-11-19 05:38:19
合計ジャッジ時間 1,468 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 12
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import sys
#
class Operator:
def __init__(self):
self.name = ''
def calc(self):
pass
def __str__(self):
return self.name
# +
class PlusOperator(Operator):
def __init__(self):
self.name = '+'
#
def calc(self, val1, val2):
return val1.calc_value() + val2.calc_value()
# -
class MinusOperator(Operator):
def __init__(self):
self.name = '-'
#
def calc(self, val1, val2):
return val1.calc_value() - val2.calc_value()
#
# calc_value() 使
class Value:
def __init__(self, v):
self.__val = v
def add_char(self, c):
self.__val = self.value() * 10 + int(c)
def value(self):
return self.__val
def calc_value(self):
v = self.value()
#sys.stderr.write("v={}\n".format(v))
while isinstance(v, Value):
if v is Value:
return v.__val
v = v.value()
return v
def make_exp(self, ope, v2):
return BinominalExpression(ope, self, v2)
def __str__(self):
return "{0}".format(self.__val)
#
class Expression(Value):
def __init__(self, ope):
self.operator = ope
# 1
def value(self):
raise 'Not implemented!'
#
#
class BinominalExpression(Expression):
def __init__(self, ope, v1, v2):
super().__init__(ope)
self.val1 = v1
self.val2 = v2
# 1
def value(self):
return self.operator.calc(self.val1, self.val2)
def __str__(self):
return "{0} {1} {2}".format(self.val1, self.operator, self.val2)
#
#
class Brackets(Value):
def __init__(self, v):
super().__init__(v)
def __str__(self):
return "({0})".format(super().__str__())
#
class Parser:
def __init__(self):
self.__v1 = Value(0) #
self.__v2 = Value(0) #
self.__operator = None #
#
def try_make_exp(self):
if self.__operator != None:
self.__v1 = self.__v1.make_exp(self.__operator, self.__v2)
self.__operator = None
self.__v2 = Value(0)
#
def parse(self, chars):
while len(chars) > 0:
c = chars.pop(0)
sys.stderr.write("c={0} # {1}\n".format(c, self))
if c == '(':
p = Parser()
sys.stderr.write("new parser = {0}\n".format(p))
b = Brackets(p.parse(chars)) #
if self.__operator == None:
self.__v1 = b
else:
self.__v2 = b
elif c == ')':
self.try_make_exp()
break #
elif c == '+':
self.try_make_exp()
self.__operator = PlusOperator()
elif c == '-':
self.try_make_exp()
self.__operator = MinusOperator()
else:
if self.__operator == None:
self.__v1.add_char(c)
else:
self.__v2.add_char(c)
self.try_make_exp()
return self.__v1
def __str__(self):
return "{3}: v1={0}, operator={1}, v2={2}".format(self.__v1, self.__operator, self.__v2, super().__str__())
chars = list(input())
p = Parser()
val = p.parse(chars)
print(val.calc_value())
#
#
#
# C# Expression
#
#
#
#
#
# calc()
#
#
#
# Python
# Python Python Python3
# self
# self. JavaScript
# Ruby
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0