Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- from random import randint
- file = sys.argv[1]
- code = open(file)
- program = code.read()
- print(str(program))
- #--------------#
- #Initialization#
- #--------------#
- stdin = sys.argv[2]
- prgmlist = program.splitlines()
- length = len(prgmlist)
- prgm = {}
- for x in range(0,length-1):
- prgm[x+1] = list(prgmlist[x])
- stacks, str1, str2, cmdx, cmdy, face, register, cmd = {"now":[]}, 0, 0, 0, 1, "E", 0, None
- strparse1, strparse2 = 0, 0
- #---------#
- #Functions#
- #---------#
- #Move pointer forward#
- def forward(facing):
- global cmdx
- global cmdy
- if facing == "N":
- cmdy += 1
- if facing == "E":
- cmdx += 1
- if facing == "S":
- cmdy -= 1
- if facing == "W":
- cmdx -= 1
- #Execute code under pointer#
- def evaluate(cmd):
- print(cmd)
- global face
- global strparse1
- global strparse2
- global str1
- global str2
- global cmdx
- global cmdy
- global register
- global stacks
- #String parsing#
- if cmd == '"':
- if strparse1 == 0:
- strparse1 = 1
- elif strparse1 == 1:
- strparse1 = 0
- elif strparse1 == 1 and not cmd == '"':
- stacks["now"].insert(0,cmd)
- elif cmd == "'":
- if strparse2 == 0:
- strparse2 = 1
- elif strparse2 == 1:
- strparse2 = 0
- elif strparse2 == 1 and not cmd == "'":
- stacks["now"].insert(0,cmd)
- #Flow#
- elif cmd == "^":
- face = "N"
- elif cmd == ">":
- face = "E"
- elif cmd == "v":
- face = "S"
- elif cmd == "<":
- face = "W"
- elif cmd == "|":
- if face == "E":
- face = "W"
- elif face == "W":
- face = "E"
- elif cmd == "_":
- if face == "N":
- face = "S"
- elif face == "S":
- face = "N"
- elif cmd == "/":
- if face == "N":
- face = "E"
- elif face == "E":
- face = "N"
- elif face == "S":
- face = "W"
- elif face == "W":
- face = "S"
- elif cmd == "\\":
- if face == "N":
- face = "W"
- elif face == "E":
- face = "S"
- elif face == "S":
- face = "E"
- elif face == "W":
- face = "N"
- elif cmd == "x":
- rand = randint(1,4)
- if rand == 1:
- face = "N"
- if rand == 2:
- face = "E"
- if rand == 3:
- face = "S"
- if rand == 4:
- face = "W"
- elif cmd == "!":
- forward(face)
- elif cmd == "?":
- if stack[0] == 0:
- forward()
- elif cmd == ".":
- cmdx = stacks["now"][0]
- cmdy = stacks["now"][1]
- stacks["now"].pop[0]
- stacks["now"].pop[0]
- #Ops#
- elif cmd == "+":
- stacks["now"].insert(0,stacks["now"][1] + stacks["now"][0])
- stacks["now"].pop[1]
- stacks["now"].pop[1]
- elif cmd == "-":
- stacks["now"].insert(0,stacks["now"][1] - stacks["now"][0])
- stacks["now"].pop[1]
- stacks["now"].pop[1]
- elif cmd == "*":
- stacks["now"].insert(0,stacks["now"][1] * stacks["now"][0])
- stacks["now"].pop[1]
- stacks["now"].pop[1]
- elif cmd == ",":
- stacks["now"].insert(0,stacks["now"][1] / stacks["now"][0])
- stacks["now"].pop[1]
- stacks["now"].pop[1]
- elif cmd == "%":
- stacks["now"].insert(0,stacks["now"][1] % stacks["now"][0])
- stacks["now"].pop[1]
- stacks["now"].pop[1]
- #Conditional mods#
- elif cmd == "=":
- if stacks["now"][0] == stacks["now"][1]:
- stacks["now"].pop[0]
- stacks["now"].pop[0]
- stacks["now"].insert(0,1)
- else:
- stacks["now"].pop[0]
- stacks["now"].pop[0]
- stacks["now"].insert(0,0)
- elif cmd == "(":
- if stacks["now"][1] < stacks["now"][0]:
- stacks["now"].pop[0]
- stacks["now"].pop[0]
- stacks["now"].insert(0,1)
- else:
- stacks["now"].pop[0]
- stacks["now"].pop[0]
- stacks["now"].insert(0,0)
- elif cmd == ")":
- if stacks["now"][1] > stacks["now"][0]:
- stacks["now"].pop[0]
- stacks["now"].pop[0]
- stacks["now"].insert(0,1)
- else:
- stacks["now"].pop[0]
- stacks["now"].pop[0]
- stacks["now"].insert(0,0)
- #String parsing#
- elif cmd == '"':
- if strparse1 == 0:
- strparse1 = 1
- elif strparse1 == 1:
- strparse1 = 0
- elif cmd == "'":
- if strparse2 == 0:
- strparse2 = 1
- elif strparse2 == 1:
- strparse2 = 0
- #Stack manipulation#
- elif cmd == ":":
- stacks["now"][0] + stacks["now"]
- elif cmd == "~":
- stacks["now"].pop[0]
- elif cmd == "$":
- stack0 = stacks["now"][1]
- stack1 = stacks["now"][0]
- stacks["now"][0] = stack0
- stacks["now"][1] = stack1
- elif cmd == "@":
- stack0 = stacks["now"][1]
- stack1 = stacks["now"][2]
- stack2 = stacks["now"][0]
- stacks["now"][0] = stack0
- stacks["now"][1] = stack1
- stacks["now"][2] = stack2
- elif cmd == "{":
- lowstack = len(stacks["now"]) - 1
- stacks["now"].append[stacks["now"][0]]
- stacks["now"].pop[0]
- elif cmd == "}":
- lowstack = len(stacks["now"]) - 1
- stacks["now"].insert(0,stacks["now"][lowstack])
- stacks["now"].pop[0](lowstack + 1)
- elif cmd == "r":
- stack = list(reversed(stacks["now"]))
- elif cmd == "l":
- stacks["now"].insert(0,len(stacks["now"]))
- elif cmd == "[":
- param = stacks["now"][0]
- stacks["now"].pop[0]
- for x in range(0,param):
- newstack = newstack.append[stacks["now"][0]]
- stacks["now"].pop[0]
- stacks[len(stacks)] = stacks["now"]
- newstack
- elif cmd == "]":
- stacks["now"].insert(0,stacks["now"][len(stacks)])
- "".join(stacks["now"])
- stacks.stacks["now"].pop[0](len(stacks), None)
- #Input and output#
- elif cmd == "o":
- sys.stdout.write(chr(stacks["now"][0]))
- elif cmd == "n":
- sys.stdout.write(int(stacks["now"][0]))
- elif cmd == "i":
- stacks["now"].insert(0,stdin.read())
- #Literals#
- elif cmd in range(0,9):
- stacks["now"].insert(0,int(cmd))
- elif cmd == "a":
- stacks["now"].insert(0,10)
- elif cmd == "b":
- stacks["now"].insert(0,11)
- elif cmd == "c":
- stacks["now"].insert(0,12)
- elif cmd == "d":
- stacks["now"].insert(0,13)
- elif cmd == "e":
- stacks["now"].insert(0,14)
- elif cmd == "f":
- stacks["now"].insert(0,15)
- #Other#
- elif cmd == " ":
- dummy = 1
- elif cmd == "&":
- register = stacks["now"][0]
- stacks["now"].pop[0]
- while cmd != ";":
- evaluate(cmd)
- forward(face)
- cmd = prgm[cmdy][cmdx]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement