百科问答小站 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++工程中的目录有何意义? 
  jdk9为何要将String的底层实现由char[]改成了byte[]? 
  为什么有人在学习初段效率惊人,而在过了入门阶段之后兴趣与学习能力都迅速下降? 
  你是如何自学R语言的? 
  C 语言执行 a=a++; 后,a 的值应该加一还是不变? 
  创造编程语言应该学习什么语言?设计编程语言最好是用C/C++吗? 
  用惯了 C# 之后再也不想用别的语言了,正常吗? 
  如何想学点编译原理,又不想直接看龙虎之类的书籍,太多理论,干燥? 

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





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利