brainfuck python脚本 && misc题目can_has_stdio?

Brainfuck

brainfuck python脚本 && misc题目can_has_stdio?_第1张图片

Brainfuck是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf**k,甚至被简称为BF。

这种语言,是一种按照“Turing complete(图灵完备)”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的操作都由这八种符号的组合来完成。

下面是这八种状态的描述,其中每个状态由一个字符标识:

字符 含义
> 指针加一
< 指针减一
+ 指针指向的字节的值加一
- 指针指向的字节的值减一
. 输出指针指向的单元内容(ASCII码)
, 输入内容到指针指向的单元(ASCII码)
[ 如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
] 如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

比如对于一串brainfuck语句,怎样翻译成能看懂的ASCII码

a = '++++++++++[>+++++++++>++++++++>+++++++<<<-]>>>++.---.<----..+++.'

代码

def brainfuck(a):
    li = [0]
    index = 0
    kuo = []
    output = []
    i = 0
    while i < len(a):
        if a[i] == '+' or a[i] == '-':
            li[index] = eval(str(li[index]) + a[i] + '1')
        elif a[i] == '>':
            index += 1
            if len(li) <= index:
                li.append(0)
        elif a[i] == '<':
            index -= 1
        elif a[i] == '.':
            print(li[index], end=' ')
            output.append(li[index])
        elif a[i] == ',':
            i += 1
            li[index] = ord(a[i])
        elif a[i] == '[':
            if li[index] == 0:
                while a[i] != ']':
                    i += 1
                i += 1
            else:
                kuo.append(i)
        elif a[i] == ']':
            if li[index] != 0:
                i = kuo.pop()-1
            else:
                temp = kuo.pop()
        i += 1
    return output

理解

li 模拟内存,最开始只有一个0值

index 表示指针

kuo 模拟一个栈,记录前中括号(循环)的下标

output 返回值,存放‘.’输出的内存值(ASCII码)

i 指输入值的索引

相当于 index 为内存 li 的指针,i 为函数输入的brainfuck语句指针

控制指针 i 依次读入字符,进行以下判断:

  1. 如果是加 + 减 - 号,则组成 ‘该符号 +/- 1’的表达式,并执行
  2. 如果是 > ,则 index 指针右移,若内存 li 不够长则添加一个0值
  3. 如果是 < , 则 index 指针左移
  4. 如果是 . , 则输出内存中指针指向的值(ASCII码),并存入output
  5. 如果是 , , 则 i 指针右移读取下一个输入字符,并将其ACSCII码存入内存li
  6. 如果是 [ , 则判断当前指针指向的内存 li 值是否为0,是则将指针 i 指向反括号之后,不是则将当前指针 i 存入栈kuo内
  7. 如果是 ] , 则再次判断当前指针指向的内存 li 值是否为0,不是则继续循环,将栈kuo内的栈顶元素赋值给指针 i,是则抛弃栈顶元素,继续遍历

输出测试

调用函数,并将返回值转为字符输出

output = brainfuck(a)
for i in output:
    print(chr(i), end='')
a = '++++++++++[>+++++++++>++++++++>+++++++<<<-]>>>++.---.<----..+++.'
>> 72 69 76 76 79 HELLO

攻防世界misc题目:can_has_stdio?

ctf = '''                                                                              
                                                                              
                                      +                                       
                                     ++                                       
                                     +++                                      
                                    ++[>                                      
                                    +>++>                                     
                                   +++>++                                     
                                   ++>++++                                    
                                  +>++++++                                    
                                  >+++++++>                                   
                                 ++++++++>+                                   
                                 ++++++++>++                                  
                                ++++++++>+++                                  
                                ++++++++>++++                                 
          ++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++            
            ++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>--.++<<              
              <<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<                
                >>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>-.+<                  
                  <<<<<<<<<<<<>>>>>>>>>>>>>>>+++.---<<<<<<                    
                    <<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<                      
                      <<<<<<>>>>>>>>>>>>>>+++.---<<<<<                        
                        <<<<<<<<<>>>>>>>>>>>>>>-.+<<                          
                          <<<<<<<<<<<<>>>>>>>>>>>>                            
                          >>----.++++<<<<<<<<<<<<<                            
                          <>>>>>>>>>>>>+.-<<<<<<<<                            
                         <<<<>>>>>>>>>>>>>>--.++<<<                           
                         <<<<<<<<<<<>>>>>>>>>>>>>-.                           
                        +<<<<<<<<<<<<<>>>>>>>>>>>>>>                          
                        +++.---<<<<<<   <<<<<<<<>>>>                          
                       >>>>>>>>-.+<       <<<<<<<<<<<                         
                       >>>>>>>>>>           >>>--.++<                         
                      <<<<<<<<<               <<<>>>>>                        
                      >>>>>>                    >>>-.+                        
                     <<<<<                        <<<<<                       
                     <<<                            <>>                       
                    >>                                >>                      
                                                                              
                                                                              
                                                                              
>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>-.+<<<<<<<<<<<<>>>>>>>>>>>>>--.++<<<<<<<<<<<<<>>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>--.++<<<<<<<<<<<<<<>>>>>>>>>>>>-.+<<<<<<<<<<<<>>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>>--.++<<<<<<<<<<<<<<>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<>>>>>>>>>>>>-.+<<<<<<<<<<<<>>>>>>>>>>>>>>.<<<<<<<<<<<<<<>>>>>>>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>--.++<<<<<<<<<<<<<>>>>>>>>>>>>>+.-<<<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<<<.
'''
>> 102 108 97 103 123 101 115 111 108 97 110 103 115 95 102 111 114 95 102 117 110 95 97 110 100 95 112 114 111 102 105 116 125 0 
flag{
     esolangs_for_fun_and_profit}

你可能感兴趣的:(CTF,python,栈,指针)