Questions tagged [brainfuck]

Brainfuck (bf) is an esoteric, Turing-complete programming language famous for its minimalistic, eight-character syntax.

Brainfuck is an esoteric and turing complete programming language famous for its minimalistic eight character syntax.

Brainfuck uses a simple machine model consisting of the program and instruction pointer, and an array of at least 30,000 byte cells initialized to zero. There is a movable data pointer (initialized to point to the leftmost byte of the array), and two streams of bytes for input and output (most often connected to a keyboard and a monitor respectively, and using the ASCII character encoding).

Language syntax

There are 8 language commands, each represented with a single character:

  • > - increment the data pointer (to point to the next cell to the right)
  • < - decrement the data pointer (to point to the next cell to the left)
  • + - increment (increase by one) the byte at the data pointer
  • - - decrement (decrease by one) the byte at the data pointer
  • . - output a character, the ASCII value of which being the byte at the data pointer
  • , - accept one byte of input, storing its value in the byte at the data pointer
  • [ - if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] command
  • ] - if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [ command.

All other characters in the source code are ignored, and there is therefore no special syntax for comments. Despite its minimalistic approach the language is Turing-complete, meaning that any algorithm can be implemented in Brainfuck.

Language semantics

Brainfuck language pseudocode

>   becomes     ++p;
<   becomes     --p;
+   becomes     ++*p;
-   becomes     --*p;
.   becomes     putchar(*p);
,   becomes     *p = getchar();
[   becomes     while (*p) {
]   becomes     }

Hello world Program

The following represents a program that outputs Hello, world! followed by newline \n:

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

The following represents same code with explanation of how it proceeds:

[ This program prints "Hello World!" and a newline to the screen, its
  length is 106 active command characters. [It is not the shortest.]

  This loop is a "comment loop", a simple way of adding a comment
  to a BF program such that you don't have to worry about any command
  characters. Any ".", ",", "+", "-", "<" and ">" characters are simply
  ignored, the "[" and "]" characters just have to be balanced. This
  loop and the commands it contains are ignored because the current cell
  defaults to a value of 0; the 0 value causes this loop to be skipped.
]
+++++ +++               Set Cell #0 to 8
[
    >++++               Add 4 to Cell #1; this will always set Cell #1 to 4
    [                   as the cell will be cleared by the loop
        >++             Add 2 to Cell #2
        >+++            Add 3 to Cell #3
        >+++            Add 3 to Cell #4
        >+              Add 1 to Cell #5
        <<<<-           Decrement the loop counter in Cell #1
    ]                   Loop till Cell #1 is zero; number of iterations is 4
    >+                  Add 1 to Cell #2
    >+                  Add 1 to Cell #3
    >-                  Subtract 1 from Cell #4
    >>+                 Add 1 to Cell #6
    [<]                 Move back to the first zero cell you find; this will
                        be Cell #1 which was cleared by the previous loop
    <-                  Decrement the loop Counter in Cell #0
]                       Loop till Cell #0 is zero; number of iterations is 8

The result of this is:
Cell No :   0   1   2   3   4   5   6
Contents:   0   0  72 104  88  32   8
Pointer :   ^

>>.                     Cell #2 has value 72 which is 'H'
>---.                   Subtract 3 from Cell #3 to get 101 which is 'e'
+++++++..+++.           Likewise for 'llo' from Cell #3
>>.                     Cell #5 is 32 for the space
<-.                     Subtract 1 from Cell #4 for 87 to give a 'W'
<.                      Cell #3 was set to 'o' from the end of 'Hello'
+++.------.--------.    Cell #3 for 'rl' and 'd'
>>+.                    Add 1 to Cell #5 gives us an exclamation point
>++.                    And finally a newline from Cell #6

This article is based on the one found in Wikipedia.

Read more

204 questions
2
votes
2 answers

Absolute of number in brainfuck

How would you go about getting the absolute of a number in brainfuck? I originally thought squaring the number ([->+>+<<]>>[-<<+>>]<<[>[->+>+<<]>>[-<<+>>]<<<-]) and square rooting it would work, but I can't think of a way to square root.
Demi
  • 23
  • 4
2
votes
1 answer

how to set an array with the size of n to a specific number in brainfuck

I want to set an array of n elements to a predefined value (which isn't copying from a cell but setting a value from the code itself). How could I do that? without changing other cells as I went through after?
silver takana
  • 138
  • 12
2
votes
1 answer

Brain**** implementation in C

I'm trying to run a hello world program with the brainfuck implementation that I made this week but I'm getting a strange output. This is the hello world file that I'm trying to…
AKRA
  • 300
  • 2
  • 12
2
votes
1 answer

How to make a fully functional brainf*ck interpreter?

I have tried to implement a BF interpreter in Javascript. It works for many programs like printing Hello world, looping, etc. Here is link to a sample interpreter that I use for comparing outputs:…
2
votes
1 answer

How can I print the ascii value of an input in Brainfuck?

What I want to do is for a Brainfuck code to print out the ascii value of the input. For example, typing in an input of "a" will give an output of 97. The python equivalent of this is print(ord(input())). What I'm thinking is that once I get the…
Aiden Chow
  • 391
  • 6
  • 17
2
votes
2 answers

Brainfuck try to - in a 0 cell

What happens in Brainfuck if I try to "-" in a cell that contains a 0? >- Also, what happens if I try to start a loop while pointing to a 0 cell? >[] Edit: I forgot to mention it, but I'm trying to make an interpreter. Here's a piece of code I was…
Rararat
  • 53
  • 6
2
votes
1 answer

Brainfuck interpreter not working on some codes, while every instruction is taken care off

I made a Brainfuck interpreter in assembly (AT&T syntax, GCC). It works on most stuff. All the desired actions work (+ - > <). I made sure to take care of nested loops as well (pushing the address on the stack and after exiting the loop popping it…
Silver
  • 31
  • 4
2
votes
1 answer

Brainfuck interpreter not running some codes

I'm kinda new to C programming and decided that making a brainfuck interpreter in C would be a good way to learn the language. I could write and tested with these bf codes: this should print a hello…
Henrique Sabino
  • 546
  • 3
  • 19
2
votes
1 answer

Why is Kotlin much faster than Java at interpreting Brainfuck?

In this Brainfuck v2.0 benchmark, the Java version seems to be equivalent to the Kotlin version, as far as I can tell. However, it runs twice slower and uses much more memory. Why is that? I would expect them to have very similar memory and speed…
MWB
  • 11,740
  • 6
  • 46
  • 91
2
votes
3 answers

Are there any full featured Brainfuck editors available?

Has anyone tried to implement the equivalent of a full featured editor for Brainfuck? What's the closest that is available?
blueberryfields
  • 45,910
  • 28
  • 89
  • 168
2
votes
1 answer

Brainfuck interpreter in C++ produces incorrect result

I'm writing a Brainfuck interpreter in C++ and I'm having trouble getting this to work correctly. I'm new to C++, but I know JavaScript, which is why I'm writing this interpreter using my JavaScript code (which works perfectly) for…
Eli Richardson
  • 934
  • 7
  • 25
2
votes
3 answers

C#: Brainfuck brackets finder

So yeah, I'm making Brainfuck interpreter but I also need to create AST from its code. Primitive operations (+ - . , > <) can be used in a node pretty easily. The loop operations, on the other hand, look quite complex. So, what I need is to make…
Mex
  • 41
  • 4
2
votes
1 answer

Brainfuck interpreter wrong behaviour

I have the following Brainfuck interpreter that is passing a minimal test suite. Except a sizeable problem like printing fibonacci sequence seems to fail (the last test in the suite). The brainfuck fibonacci code that my interpreted fails to execute…
Red Mercury
  • 3,971
  • 1
  • 26
  • 32
2
votes
2 answers

Brainf*ck Multiplication

I've just learned about the very basic syntax of Brainfuck and have been trying to quickly challenge myself by programming a "Hello World" script. At the moment, I've got just about every letter up until getting the "o" in hello. As I know, the…
dsillman2000
  • 976
  • 1
  • 8
  • 20
2
votes
1 answer

Better way to get multiples of a number into cells in brainfuck?

So I'm trying to get the cells to hold such that the first cell holds null (0), the second holds 9*4, the second, 9*10, the third 9*12, the 4th, 9*13, and so on until the last cell in use has 9*15. That is, the following code so far in…
flaw600
  • 161
  • 1
  • 2
  • 8