几个月前,当我查看一位大学四年级学生的黑客开发者简介时,我发现他的语言活动中有一种语言包括 笨蛋 .这引起了我的兴趣,所以我在谷歌上搜索了一下,但令我惊讶的是,我没有找到一个链接指向brainfuck上一篇关于Geeksforgeks的文章。所以不管怎样,我在网上读到了一些关于它的信息 维基魔杖 & LearnXinYMinutes &在那之后,我在网上解决了我的第一个问题 斯波吉 这给了我0.6分,并提升了我的全球排名 44000 到 22296 .
从那时起,我就想在Geeksforgeks上写一篇关于brainfuck的文章,因为这是学生们查阅任何编程相关文章的第一个网站。
由于它是一种极简主义语言,用它编写代码可能相当长,您必须仔细地跟踪您键入的每个语句、操作和字符。它考验着你作为一名程序员的耐心,绝对令人沮丧(因此得名),但当你得到一个公认的记号时,这是程序员能体验到的最令人满意的感觉之一。
在开始实际代码之前,让我们先看看它的一些特性=>
- 它是一种深奥的编程语言( 埃索朗 )
- 它只包含下面列出的8个命令。
- > 增加数据指针(指向右边的下一个单元格)。
- < 减少数据指针(指向左边的下一个单元格)。
- + 增加(增加一个)数据指针处的字节。
- – 将数据指针处的字节减量(减少一个)。
- . 在数据指针处输出字节。
- , 接受一个字节的输入,将其值存储在数据指针的字节中。
- [ 如果数据指针处的字节为零,则不将指令指针向前移动到下一个命令,而是将其向前跳转到匹配的]命令之后的命令。
- ] 如果数据指针处的字节不为零,则不将指令指针向前移动到下一个命令,而是将其跳回匹配[command]后的命令。
- Brainfuck以8位大小的单元(单元是字节)的形式存储数据。
- 在经典分布中,单元格数组有30000个单元格,指针从最左边的单元格(单元格0)开始。
为了将我们新学到的brainfuck知识付诸实践,我们将编写一个简单的打印程序 极客换极客 .
方法很简单。首先,我们需要列出要打印的字符类型,并列出它们的ASCII码。然后我们需要将最接近ASCII码的值存储在所需数量的单元格中,这样我们就可以通过增加或减少这些单元格值来获得准确的ASCII码,并打印所需的字符。
在进一步向下滚动并查看代码之前,我强烈建议您尝试自己编写代码。你可以在上面测试你的代码 IDE–Le Brainfuck 专门用于编译BrainFuck代码。
// You need to use https://copy.sh/brainfuck/ to run // this code. /** Using different cells to store different numeric values * Cell 1 = 70; Cell 2 = 80; Cell 3 = 30 * These base values can then be incremented or decremented * to store ASCII values of the characters we need to print */ ++++++++++ //Cell 1 = 70(To run the loop 10 times) [ >+++++++ // Cell 1 = 7*10 >++++++++ // Cell 2 = 8*10 >+++ // Cell 3 = 3*10 <<<- // Setting the pointer back to cell 0 & decrement ] // end of loop /**Final numeric values in each cell *Cell 0 = 0; Cell 1 = 70; Cell 2 = 80; Cell 3 = 30*/ // Moving from Cell 0 to Cell 1 >+.--..++++++. // Printing "GEEK"(ASCII 71, 69, 69 75) // Moving from Cell 1 to Cell 2 >+++. // Printing "S"(ASCII 83) // Moving from Cell 2 to Cell 3 >++. // Printing " "(ASCII 32) // Moving the pointer back to Cell 1 <<-----. // Printing "F"(ASCII 70) //Moving from Cell 1 to Cell 2 >----.+++. // Printing "OR"(ASCII 79, 82) // Moving from Cell 2 to Cell 3 >. // Printing " "(ASCII 32) //Moving from Cell 3 to Cell 1 <<+.--..++++++. //Printing "GEEK"(ASCII 71, 69, 69 75) //Moving from Cell 1 to Cell 2 >+. //Printing "S"(ASCII 83) |
Output : GEEKS FOR GEEKS
brainfuck的应用: 1) Brainfuck没有很多实际用途。 2) 它的创建者Urban Müller设计了brainfuck,目的是用尽可能最小的编译器实现它。 3) 深奥的编程语言通常用于测试计算机编程语言设计的边界,如软件艺术或仅仅用于娱乐性编程。
如果你想看更多用brainfuck编写的程序,那就看这个吧 链接 .
资料来源: 该死的维基魔杖
本文由 帕拉什尼甘酒店 . 电子邮件ID: npalash25@gmail.com
如果您发现任何不正确的地方,或者您有上述代码的较短版本,或者您想分享有关上述主题的更多信息,请写评论。