论使用Brainf**k解决该题的可能性
2024-08-19 09:34:13
发布于:北京
0阅读
0回复
0点赞
背景
不想写了,自己查去。
话说有人试过bf吗
#include <bits/stdc++.h>
using namespace std;
string clear(string c){//bf只支持这些符号
string r;
for(int i=0;i<c.size();i++){
char ch=c[i];
if(ch=='+'||ch=='-'||ch=='<'||ch=='>'||
ch=='.'||ch==','||ch=='['||ch==']'){
r+=ch;
}
}
return r;
}
map<int,int> v;
void loops(string c){//匹配循环
stack<int> s;
for(int i=0;i<c.size();i++){
if(c[i]=='['){
s.push(i);
}
else if(c[i]==']'){
v[s.top()]=i;
v[i]=s.top();
s.pop();
}
}
if(!s.empty()) exit(1);
}
const int N=1e5+5;//内存大小
unsigned char mem[N];//内存
int ptr,mxp;//指针,mxp是debug用的
void runBF(string c,bool debug=false){//BF,启动
for(int i=0;i<c.size();i++){
switch(c[i]){
case '+':
mem[ptr]++;
break;
case '-':
mem[ptr]--;
break;
case '<':
ptr--;
if(ptr==-1) ptr=N-1;
break;
case '>':
ptr++;
ptr%=N;
mxp=max(ptr,mxp);
break;
case '.':
printf("%c",mem[ptr]);
break;
case ',':
scanf("%c",&mem[ptr]);
break;
case '[':
if(mem[ptr]==0) i=v[i];
break;
case ']':
if(mem[ptr]) i=v[i];
break;
}
if(debug){//输出内存的debug
printf("\n===========================\n");
printf("cur: %d,char: %c\n",i,c[i]);
for(int j=0;j<=mxp;j++){
if(j==ptr) printf("C%-4d",j);
else printf("%-5d",j);
}
printf("\n");
for(int j=0;j<=mxp;j++){
if(j==ptr) printf(" %-4d",mem[j]);
else printf("%-5d",mem[j]);
}
printf("\n===========================\n");
}
}
}
int main(int argc,char *argv[]){
string a=",>,,------------------------------------------------[<+>-]<.";//源码
loops(a);
runBF(a);
return 0;
}
这里空空如也
有帮助,赞一个