百科问答小站 logo
百科问答小站 font logo



哪里有 brainfuck 编程语言的相关学习资料与下载? 第1页

  

user avatar   Metaphox 网友的相关建议: 
      

五分钟包您学会 brainfuck(健)脑操语言

(非句首请勿首字母大写 brainfuck 谢谢)

包学包会,学不会免费再学。

将八个操作符 < > + - [ ] . , 分别转写为:

  • > 右
  • < 左
  • + 上
  • - 下
  • [ 始
  • ] 终
  • . 写
  • , 读

然后找一张方格纸,对就是小学作文本那种,一支铅笔(不,钢笔不行,Lamy 的也不行),一块橡皮,一张从你的旧 C 语言书上撕下来的 ASCII 码表。

现在来看 +++[>+<-] 这行程序。按照我们的转写,它变成:上上上始右上左下终。

接下来在你的方格纸上的第一个格子里写下 0 。

[0]

很好。现在我们一边读转写好的程序,一边按照以下规则行事:

  • 遇到什么都没写的格子就当里面写了 0
  • 右:向右移动一个格子。嗯你盯着它看就行了,什么都不用做
  • 左:向左移动一个格子
  • 上:给格子里的数字加上 1,擦掉原来的数字再写回去。现在你知道为什么要用铅笔了吧,少年!
  • 下:给格子里的数字减去 1
  • 始:开始重复「始……终」之间的指令,直到你读到「始」之前盯着的那个格子里的数字变成 0 为止。(什么?那个格子里已经是负数了?……不要这么没有下限好不好)
  • 终:如果当前格子里的数字为 0,就跳过,否则回头到「始」那里
  • 写:查当前格子里的数字在 ASCII 表上对应的字母,把它写下来(不,别写在格子里,就写在你买来一直立志想用但是没有用的日记本上吧)
  • 读:随便想一个英文字母,查表找到它对应的数字,写到当前格子里

我们开始吧。方括号代表当前你盯着看的格子。首先是上,上,上:

[3]

接下来,始:

[3]

嗯,你要重复做它到「终」之间的事情。首先是「右」:

3[0]

上:

3[1]

左:

[3]1

下:

[2]1

终:

<del>大明湖畔</del>碰到「始」之前你盯着的那个格子,你还记得吗?碰巧就是当前这个。目前里面是 2 ,不是 0,所以我们回去「始」。

右:

2[1]

上:

2[2]

左:

[2]2

下:

[1]2

终:

回去「始」

右:

1[2]

上:

1[3]

左:

[1]3

下:

[0]3

终:

格子里是 0 了,你可以跳过「终」读下去了。 这段程序就此完结,但如果你读懂了这些,其实就已经看懂了我那个程序最开始的部分:

++++++++++[>+++>++++>+++++++>++++++++++>+++++++++++<<<<<-]

无非就是,先把最左边的格子加到 10,然后向右移动,移动到第二个格子里加 3,第三个加 4,第四个加 7,第五个加 10,第六个加 11,然后向左移动五次,回到第一格,减 1。如此重复十次之后,最左边的格子变成 0,循环终止,而我有了如下格子:

[0] 30 40 70 100 110

接下来的部分,就是挪到某个格子,加上或者减去若干次 1,直到获得想要字母的 ASCII 代码,然后用 . 把它打印出来。比如紧接着的 >>>++. 就是右移三次,到写了 70 的格子上,加两次 1,得到 ASCII 72 ,大写字母 H,再用 . 把它显示出来。

很简单吧?学会了?恭喜你……

It is practically impossible to teach functional programming to students that have had a prior exposure to brainfuck: as potential programmers they are mentally mutilated beyond hope of regeneration.
–– Edsger W. Dijkstra (paraphrased)

(开玩笑的。新年快乐,上上下下左右左右 BA start!)




  

相关话题

  如果要改进C语言,您最希望添加哪些语言特性,移除哪些语言特性? 
  Rust 语言现在什么情况,为什么知乎上不怎么讨论Rust语言了呢? 
  为什么没有人去花时间搞个程序,让程序写编程呢? 
  你是如何自学 Python 的? 
  为什么1KB等于1024B? 
  GitHub 上有些什么好玩的项目? 
  为什么国家定义程序员为新生代农民工,而不是高端或科技人才,这说明程序员门槛低吗? 
  DirectX是谁开发的?有什么过人之处? 
  函数式编程(Functional Programming)相比面向对象编程(Object-oriented Programming)有哪些优缺点? 
  编程应该纳入高考吗? 

前一个讨论
用汉语思维真的不如用英语思维逻辑清晰吗?
下一个讨论
欧洲的巫师为什么要骑扫帚?





© 2025-05-23 - tinynew.org. All Rights Reserved.
© 2025-05-23 - tinynew.org. 保留所有权利