2849 brainf*ck
解法
定義にしたがって実装する。
メモリの値が0〜255なので、unsigned charを使えばいちいちmodを取る手間がないので良いかも。
ソースコード
const int M=32768; char in[200000],op[200000]; unsigned char m[M]; int p; int main() { int CS; scanf("%d ",&CS); rep(cs,CS){ op[0]=0; int d=0; while(gets(in),in[0]!='e'){ for(int i=0;in[i];i++){ if(in[i]=='[')d++; if(in[i]==']')d--; if(in[i]=='%'){ in[i]=0; break; } } strcat(op,in); } printf("PROGRAM #%d:\n",cs+1); if(d!=0){ puts("COMPILE ERROR"); continue; } p=0; rep(i,M)m[i]=0; for(int i=0;op[i];i++){ if(op[i]=='>')p=(p+1)%M; if(op[i]=='<')p=(p+M-1)%M; if(op[i]=='+')m[p]++; if(op[i]=='-')m[p]--; if(op[i]=='.')putchar(m[p]); if(op[i]=='['&&m[p]==0){ for(d=0;;i++){ if(op[i]=='[')d++; if(op[i]==']')d--; if(d==0)break; } continue; } if(op[i]==']'&&m[p]){ for(d=0;;i--){ if(op[i]=='[')d--; if(op[i]==']')d++; if(d==0)break; } continue; } } puts(""); } return 0; }