-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpotw_obsolete_programming.py
51 lines (49 loc) · 1.82 KB
/
potw_obsolete_programming.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
out = []
code = "stack = []\n"
instruction = " ".join(input() for _ in range(int(input()))).split()
t = 0
for idx, i in enumerate(instruction):
if (i.startswith("-") and i[1:].isdigit()) or i.isdigit():
code += " " * t + f"stack += [{i}]\n"
elif i == "ADD":
code += " " * t + "stack = stack[:-2] + [stack[-2] + stack[-1]]\n"
elif i == "SUB":
code += " " * t + "stack = stack[:-2] + [stack[-2] - stack[-1]]\n"
elif i == "MUL":
code += " " * t + "stack = stack[:-2] + [stack[-2] * stack[-1]]\n"
elif i == "DIV":
code += " " * t + "stack = stack[:-2] + [stack[-2] // stack[-1]]\n"
elif i == "MOD":
code += " " * t + "stack = stack[:-2] + [stack[-2] % stack[-1]]\n"
elif i == "POP":
code += " " * t + "stack.pop()\n"
elif i == "DUP":
code += " " * t + "stack += [stack[-1]]\n"
elif i == "SWP":
code += " " * t + "stack = stack[:-2] + [stack[-1]] + [stack[-2]]\n"
elif i == "ROT":
code += " " * t + "stack = stack[:-3] + stack[-2:] + [stack[-3]]\n"
elif i == "OVR":
code += " " * t + "stack += [stack[-2]]\n"
elif i == "POS":
code += " " * t + "stack += [int(stack.pop() >= 0)]\n"
elif i == "NOT":
code += " " * t + "stack += [int(stack.pop() == 0)]\n"
elif i == "OUT":
code += " " * t + "out.append(stack[-1])\n" + " " * t + "stack = stack[:-1]\n"
elif i == "DEF":
code += f"def {instruction[idx+1]}():\n" + " " * t + " global stack\n"
t += 1
elif i == "END":
t -= 1
elif i == "IF":
code += " " * t + "if stack.pop() != 0:\n"
t += 1
elif i == "ELS":
code += " " * (t - 1) + "else:\n"
elif i == "FI":
t -= 1
elif instruction[idx - 1] != "DEF":
code += " " * t + f"{i}()\n"
exec(code)
print(*out, sep="\n")