👨‍🏫前言:什么是BrainFxxk?



👨‍🔬内容一:BrainFxxk的字符标识



👨‍⚖️内容二:经典案例——打印 Hello World!


1.  ++++++++++ ,将 *ptr0 置为 10,用作后面循环的条件。
2.  [>+++++++>++++++++++>+++>+<<<<-] ,循环 10 次,每次执行

*(ptr0 + 1) += 7
*(ptr0 + 2) += 10
*(ptr0 + 3) += 3
*(ptr0 + 4) += 1

当循环完后

*(ptr0 + 1) = 70
*(ptr0 + 2) = 100
*(ptr0 + 3) = 30
*(ptr0 + 4) = 10

3.  >++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. ,
这一串就是通过加减得到每个字母对应的 ascii 码,然后将其打印出来,大致过程如下

初始值:
*(ptr0 + 1) = 70
*(ptr0 + 2) = 100
*(ptr0 + 3) = 30
*(ptr0 + 4) = 10

代码计算过程:
*(ptr0 + 1) = 72 输出 'H'
*(ptr0 + 2) = 101 输出 'e'
*(ptr0 + 2) = 108 输出 'l'
*(ptr0 + 2) = 108 输出 'l'
*(ptr0 + 2)  = 111 输出 'o'
*(ptr0 + 3) = 32 输出 ' '
*(ptr0 + 1) = 87 输出 'W'
*(ptr0 + 2)  = 111 输出 'o'
*(ptr0 + 2)  = 114 输出 'r'
*(ptr0 + 2)  = 108 输出 'l'
*(ptr0 + 2)  = 100 输出 'd'
*(ptr0 + 3) = 33 输出 '!'
*(ptr0 + 4) = 10 输出 '\n'
import sys

def mtd(code):
    data = [0 for i in range(1000)]
    pc = 0
    ptr = 0
    skip_loop = False
    bracket_count = 0
    stack = []
    while pc < len(code):
        c = code[pc]
        if skip_loop :
            if c =='[':
                bracket_count+=1
            elif c==']':
                bracket_count -=1
                if bracket_count==0:
                    skip_loop =False
            pc+=1
            continue
        if c == '>':
            ptr +=1
            pc +=1
        elif c == '<':
            ptr -=1
            pc +=1
        elif c == '+':
            data[ptr] +=1
            pc +=1
        elif c == '-':
            data[ptr] -=1
            pc +=1
        elif c == '.':
            print(chr(data[ptr]),end="")
            pc +=1
        elif c == ',':
            pc +=1
        elif c == '[':
            if data[ptr] == 0:
                #nonlocal bracket_count,skip_loop
                bracket_count = 1
                skip_loop = True
                pc+=1
            else:
                pc+=1
                stack.append(pc)
        elif c == ']':
            if data[ptr] == 0:
                pc+=1
                stack.pop()
            else:
                pc = stack[len(stack)-1]

code = input("请输入一串代码:")
mtd(code)

👨‍💻内容三:BrainFxxk编程中的加减乘除


1. x=0
x[-]
我们只需要把变量循环减到0就好了

2. x=y
x[-]tmp[-]y[x+tmp+y-]tmp[y+tmp-]x
我们可以设置一个中间变量tmp,把y同时复制到x和tmp,再把tmp复制回y。

3. x+=y
tmp[-]y[x+tmp+y-]tmp[y+tmp-]x
只需要把x=y中的清空x变量删去即可。
那么x=y+z怎么办?我们可以分别运行x=y,x+=z。这样我们就获得了结果。

4. x-=y
tmp[-]y[x-tmp+y-]tmp[y+tmp-]x
类似x+=y不解释

5.x*=y
x*y可以写作y个x相加,我们可以使用上述for循环,即

for(tmp=x,x=0;tmp;--tmp){
    x+=y;
}

翻译一下即得

tmp0[-]tmp1[-]x[tmp1+x-]tmp1[y[tmp0+x+y-]tmp0[y+tmp0-]tmp1-]x

6. x/=y
tmp0=x,x=0;
tmp1=0;
while(tmp0){
    for(tmp1=y;tmp1;--tmp1){
        --tmp0;
        if(tmp0==0){
            --tmp1;
            if(tmp1){        //如果tmp0==0时tmp1!=0,说明没有整除,x要减掉一个后面多加的1
                --x;
                tmp1=0;
            }
            ++tmp1;
        }
    }
    ++x;
}

翻译后

tmp0[-]tmp1[-]tmp2[-]tmp3[-]x[tmp0+x-]tmp0[y[tmp1+tmp2+y-]tmp2[y+tmp2-]tmp1[tmp2+tmp0-[tmp2-tmp0[tmp3+tmp0-]]tmp3[tmp0+tmp3-]tmp2[tmp1-[x-tmp1[-]]+tmp2[-]]tmp1-]x+tmp0]x

import sys

def mtd(x,y,code):
    data = [0 for i in range(1000)]
    data[0] = int(x)
    data[1] = int(y)
    if(data[0]<data[1]):
        t = 0;
        t = data[0]
        data[0] = data[1]
        data[1] = t
    pc = 0
    ptr = 0
    skip_loop = False
    bracket_count = 0
    stack = []
    while pc < len(code):
        c = code[pc]
        if skip_loop :
            if c =='[':
                bracket_count+=1
            elif c==']':
                bracket_count -=1
                if bracket_count==0:
                    skip_loop =False
            pc+=1
            continue
        if c == '>':
            ptr +=1
            pc +=1
        elif c == '<':
            ptr -=1
            pc +=1
        elif c == '+':
            data[ptr] +=1
            pc +=1
        elif c == '-':
            data[ptr] -=1
            pc +=1
        elif c == '.':
            print(chr(data[ptr]),end="")
            pc +=1
        elif c == ',':
            pc +=1
        elif c == '[':
            if data[ptr] == 0:
                #nonlocal bracket_count,skip_loop
                bracket_count = 1
                skip_loop = True
                pc+=1
            else:
                pc+=1
                stack.append(pc)
        elif c == ']':
            if data[ptr] == 0:
                pc+=1
                stack.pop()
            else:
                pc = stack[len(stack)-1]
    print((data[0]), end="")
x = input("请输入数字一:")
y = input("请输入数字二:")
code = '>>[-]<[<->>+<-]>[<+>-]<<'   ## x=x-y
mtd(x,y,code)

🍉文末推荐【3D科研绘图 · 与学术图表绘制从入门到精通】


Python实现BrainFxxk虚拟机-LMLPHP

10-26 16:00