ALDS1_3_A: Stack
appendとpopでやるのは反則としておこう
どこまでならゆるされるだろうか、と考えて配列とスタックポインタで書いてみた
Pythonで「配列」って言うのは変かな
でも気持ちは配列
#! /usr/local/bin/python3
# coding: utf-8
sp = 0
stack = [0] * 100
def stack_push(v):
global sp, stack
stack[sp] = v
sp += 1
def stack_pop():
global sp, stack
sp -= 1
return stack[sp]
def stack_op2(op):
v2 = stack_pop()
v1 = stack_pop()
stack_push(op(v1, v2))
def calc(terms):
for t in terms:
if t == "+":
stack_op2(lambda v1, v2: v1 + v2)
elif t == "-":
stack_op2(lambda v1, v2: v1 - v2)
elif t == "*":
stack_op2(lambda v1, v2: v1 * v2)
else:
stack_push(int(t))
return(stack_pop())
print(calc(input().split()))
動いたけど、解説と見比べてみたらsp
が普通と1ずれてるな
普通は指してるところが最新の値か 言われてみるとそうだな
そのかわり0番目は空けておくのか なるほど
def stack_push(v):
global sp, stack
sp += 1
stack[sp] = v
def stack_pop():
global sp, stack
sp -= 1
return stack[sp + 1]
お、しかもエラーチェックやってるな
と思ったら擬似コードのほうだけか
ところで+
とか-
を関数として使うにはどうしたらいいのかな
lambda
で書いたけど