読者です 読者をやめる 読者になる 読者になる

和歌山産pythonプログラマのブログ

和歌山出身プログラマmatsu7874が書いています。Python3と時々C++11を書きます。

Brainfuckの処理を書いてみた

Brainfuckとは

Brainfuck - Wikipedia

命令が8個(><+-.,[])しかないプログラミング言語

def brainfuck(s):
    a = [0] * 10
    ptr = 0
    i = 0
    l = len(s)
    while i < l:
        if s[i] == '>':
            ptr += 1
        elif s[i] == '<':
            ptr -= 1
        elif s[i] == '+':
            a[ptr] += 1
        elif s[i] == '-':
            a[ptr] -= 1
        elif s[i] == '.':
            print(chr(a[ptr]), end='')
        elif s[i] == ',':
            a[ptr] = ord(input()[0])
        elif s[i] == '[':
            if a[ptr] == 0:
                depth = 1
                i += 1
                while depth > 0:
                    if s[i] == '[':
                        depth += 1
                    elif s[i] == ']':
                        depth -= 1
                    i += 1
        elif s[i] == ']':
            if a[ptr] != 0:
                depth = 1
                i -= 1
                while depth > 0:
                    if s[i] == '[':
                        depth -= 1
                    elif s[i] == ']':
                        depth += 1
                    i -= 1
        i += 1

if __name__ == '__main__':
    S = '++++++++[>+++++++++<-]>.<+++++[>++++++<-]>-.<++[>+++<-]>+..+++.<++++++[>----<-]>.<++++++[>++++<-]>.+++.------.--------.'
    brainfuck(S)

実行するとハローワールドします。