30 lines
816 B
C
30 lines
816 B
C
#include<stdio.h>
|
|
int H[99999],*s,*c,d,t;
|
|
int main(int n,char*v[]){
|
|
for(s=c=H+39999;(*++s="CODE"[d++]););
|
|
for(;n>1&&(*++s=v[1][t++]););
|
|
/*for(;n=getchar(),n>0;)*++s=n;*/
|
|
for(s=H;d=*c++%93,d-9;){
|
|
int v=*s,g[]={n+v,v-n,n*v,v^n,n<v,n?v/n:0,n?v%n:0,v>>n,v==n};
|
|
for(t=0;d<4&&d>=2*!!n&&(c-=d/3*2,v=3+*c++,t||v!=98+d);)
|
|
t+=v++/6-16?0:v/2%3-1;
|
|
for(t=d-14;t>0&&d<34&&105<*c;)t=t*21+*c++-106;
|
|
n=
|
|
/*d==12?fprintf(stderr,"test:%d\n",n),*s--:*/
|
|
d>76?s--,g[d-77]: /* operation */
|
|
d>55?H[d-21]=n,*s--: /* reg write */
|
|
d>9?
|
|
*++s=n,
|
|
12>d?H[*c++]+=21-d*2: /* inc / dec */
|
|
d<34?t:H[d] /* imm push / reg read */
|
|
:
|
|
d>5?
|
|
s--,
|
|
7<d?putchar(n),v: /* out */
|
|
6<d?H[*g+99]=*s--: /* heap write */
|
|
H[*g+99]: /* heap read */
|
|
2>d?*s--:n; /* control */
|
|
}
|
|
return n;
|
|
}
|