brainfuck python脚本 && misc题目can_has_stdio?

Brainfuck

在这里插入图片描述

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}
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值