- 论坛徽章:
- 145
|
本帖最后由 jason680 于 2018-03-11 12:35 编辑
回复 6# cjaizss
$ echo '++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<++++[<+>-]>-]<<+.-------..' | perl -pe '{s/(([-+])\2+)/sprintf("%s%d",$2,length($1))/ge}'
+10[>+10[>+<-]<-]>>-.+7.-9.+8.>>+4[<+4[<+>-]>-]<<+.-7..
$ echo '++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<++++[<+>-]>-]<<+.-------..' | perl -pe '{s/(([-+])\2+)/sprintf("%s%d",$2,length($1))/ge}' | perl -pe '{s/([-+])(\d+)/$1 x $2/ge}'
++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<++++[<+>-]>-]<<+.-------..
$ echo '++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<++++[<+>-]>-]<<+.-------..' | awk -vDBG=0 -f bf.awk
cjaizss
$ echo '++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<++++[<+>-]>-]<<+.-------..' | awk -vDBG=0 -f bf.awk | awk 'BEGIN{FS="";for(n=1;n<=255;n+=1)chr[sprintf("%c",n)]=n}{for(n=1;n<=NF;n+=1)printf("%s(%d) ",$n,chr[$n])}'
c(99) j(106) a(97) i(105) z(122) s(115) s(115)
$ echo '++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<++++[<+>-]>-]<<+.-------..' | perl -pe '{s/(([-+])\2+)/sprintf("%s%d",$2,length($1))/ge}'
+10[>+10[>+<-]<-]>>-.+7.-9.+8.>>+4[<+4[<+>-]>-]<<+.-7..
10*10 -1 = 99
99 +7 = 106
106 - 9 = 97
97 + 8 = 105
105 + 4*4 +1 = 122
122 -7 = 115
$ echo "+11[>+9[>+<-]<-]>>.+7.-9.+8.+17.-7.." | perl -pe '{s/([-+])(\d+)/$1 x $2/ge}'
+++++++++++[>+++++++++[>+<-]<-]>>.+++++++.---------.++++++++.+++++++++++++++++.-------..
$ echo "+11[>+9[>+<-]<-]>>.+7.-9.+8.+17.-7.." | perl -pe '{s/([-+])(\d+)/$1 x $2/ge}' | awk -f bf.awk
cjaizss
$ cat bf.awk
BEGIN{
FS="";
p=0;
if(DBG){
for(n=1;n<=80;n+=1){
printf("%d",n%10);
}
print"";
}
}
func bf(){
if($n=="+"){
++a[p];
if(DBG&&$n!=$(n+1)){
printf "["p"]="a[p]", "
c="\n";
}
}
if($n=="-"){
--a[p];
if(DBG&&$n!=$(n+1)){
printf "["p"]="a[p]", "
c="\n";
}
}
if($n==">"){
++p;
}
if($n=="<"){
--p;
}
if($n=="."){
printf("%s%c",c,a[p]);
c="";
if(DBG)P=sprintf("%s%c",P,a[p])
}
if( $n == "[" ) { # while (*ptr)
++w;
as[w]=n;
if(DBG){
printf("w=%d(n=%d)*p=%d, ",w,n,a[p])
}
if(a[p]==0){
n=ae[w]
w--;
}
}
if($n == "]") { #
ae[w]=n;
n=as[w];
if(DBG){
printf("w=%d(e=%d)*p=%d, ",w,ae[w],a[p])
}
if(a[p]==0){
n=ae[w]
w--
}
}
if(++cnt>1000)exit;
}
{
if(DBG)print;
for(n=1;n<=NF;n+=1){
bf();
}
}
END{
if(DBG)printf "\n"P;
print""
}
|
|