BF语言
* * * *
拉格朗日计划
* * * *
BF语言

BF(Brainfuck)语言是由Urban Müller在1993年创造的一种完备、极简但又十分难懂的程序语言。

设有一个长度无限的数组array和一个指向数组中下标的变量ptr, BF(Brainfuck)语言的命令及其对应的操作如下:

>: ptr的值加1
<: ptr的值减1
+: array[ptr]的值加1
-: array[ptr]的值加1
.: 打印ASCII码为array[ptr]的字符
[: 循环块开始标志,只要array[ptr]不为0就循环执行块内代码,相当于while(array[ptr]){
]: 循环块结束标志,相当于}


写一个能读入BF语言源代码,并能解释执行后输出正确结果的程序。

本题难度:



解答

用一个字典记录BF符号和Python代码的对应关系,用变量k记录当前的缩进数。

逐字符读入BF源码,将其转译为Python源码并更新k的值,最后用exec执行Python源码。

最终代码有六行。

代码长度:212字节 vs. 全站第一:167字节。

from sys import*
c=dict(zip("><+-.[]","i+=1,i-=1,a[i]+=1,a[i]-=1,stdout.write(chr(a[i])),while a[i]:,".split(",")))
for x in argv:
  s,a="",[0]*99;i=k=0
  for y in x:s+=" "*k+c[y]+"\n";k+=(y=="[")-(y=="]")
  exec(s)