Varnand/Python Implementation
Jump to navigation
Jump to search
An implementation of Varnand written in Python 3.
import sys code="""code goes here""" vardict=dict(zip("abcdefghijklmnopqrstuvwxyz",[0]*26)) pnt=-1 def vareval(n): #evals int, hex string digit, var if isinstance(n,int): return n if n in "0123456789ABCDEF": return int(n,16) if n in vardict: return vardict[n] def nand(x,y): #! x=vareval(x) y=vareval(y) return 255-(x&y) def redefine(strvar,newnum): #= assert strvar in "abcdefghijklmnopqrstuvwxyz","Attempted to redefine non-variable" newnum=vareval(newnum) vardict[strvar]=newnum return newnum def rotate(num,rot): #% num=vareval(num) t=2**(8-rot%8) return (num%t)*int(256/t)+num//t def oprint(num): #O num=vareval(num) print(num,end="") return num def pprint(num): #P num=vareval(num) print(chr(num),end="") return num def func(): global pnt pnt+=1 if code[pnt]=="!": return nand(func(),func()) elif code[pnt]=="=": return redefine(func(),func()) elif code[pnt]=="%": return rotate(func(),func()) elif code[pnt]=="O": return oprint(func()) elif code[pnt]=="P": return pprint(func()) elif code[pnt]=="I": return ord(sys.stdin.read(1)) #I elif code[pnt] in "0123456789ABCDEF": return int(code[pnt],16) elif code[pnt] in "abcdefghijklmnopqrstuvwxyz": return code[pnt] else: if pnt<len(code)-1: return func() #comments while pnt<len(code)-1: func()