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
6
votes
9 answers

Code for multiplying two one digit numbers in Brainfuck

Can someone please post a code piece for multiplying two one-digit numbers in the programming language brainf*ck?
UgaBuga
  • 85
  • 1
  • 2
6
votes
2 answers

Can you create a programming language with just one symbol?

Can you create a programming language with just one symbol like brainfuck.
6
votes
2 answers

Hello, World! in Brainfuck

The following code snippet is from Wikipedia, and is the preamble to what seems to be the standard Hello World! program in Brainfuck... 1. +++++ +++++ initialize counter (cell #0) to 10 2. [ use loop to set the next…
Dan Forbes
  • 2,734
  • 3
  • 30
  • 60
5
votes
5 answers

How to print numbers from 1 to 10 using a loop in Brainfuck? Is it even possible?

How to print numbers from 1 to 10 using a loop in Brainfuck? Is it even possible? I am looking for a solution to this issue.
schrift94
  • 81
  • 4
5
votes
1 answer

Python Brainf*** – Bugs on while loops

I am a relative beginner to python, and in order to strengthen my skills, I am (attempting) to write a compiler for the Brainfu** language. All is good, except for the bracket [] loops. The program I am using to test my code is >++[>++<-]>+, which…
Olly Britton
  • 115
  • 7
5
votes
3 answers

How can I check if two cells are equal in brainf*ck?

How can I check if the value in cell #0 is equal to the value in cell #1? I am trying to write code equivalent to: if(a == b) { //do stuff } else { //do something else } I have read Brainfuck compare 2 numbers as greater than or less than,…
Evorlor
  • 7,263
  • 17
  • 70
  • 141
5
votes
2 answers

Print characters in brainfuck

I am new to this language and i am building brainfuck interpreter in scala i am facing one problem what should i print if the value at memory index is greater than 127 ? what a real brainfuck interpreter print if value is greater than 127? for…
user2124441
  • 125
  • 3
  • 10
5
votes
1 answer

Brainfuck interpreter misbehaving

I am writing an interpreter for the language Brainfuck I used the command line java bfinterpreter/BFInterpreter >output.bin the bf program is supposed to put out 00 to FF in hex, but it puts out 00 01 02 03 04 05 06 ... 7f 3f 3f 3f 3f 3f ... a0 a1…
nimsson
  • 930
  • 1
  • 14
  • 27
4
votes
1 answer

How do I print “What happened on the 4th of June 1989?” in BrainFuck?

I need to learn how to display this text in BrainFuck among other programming languages, BrainFuck included.
Marcox
  • 102
  • 10
4
votes
1 answer

How can I duplicate a cell value to another cell in Brainfuck?

What I want to do is to first ask for an input for the value of cell 0(the first cell), then duplicate that input into the next cell(cell 1) while retaining the input value on cell 0. For example, if I typed in an input of 1, I would expect both…
Aiden Chow
  • 391
  • 6
  • 17
4
votes
2 answers

Calculating average of 2 digits

How to calculate average of 2 digits with brainfuck ? I mean i have two digits for example 2 3 and its average is 2.5 for 2 8 we have 5.0 How can this be done?
Krzysztof Lewko
  • 982
  • 7
  • 24
4
votes
1 answer

How to build a Brainfuck Interpreter in Python?

I have been working on a BF interpreter, trying to ensure it uses no external libraries, and works in a single function. The issue I am running into is that some programs work perfectly well, and others don't. This is making it hard to debug and…
Freddie R
  • 377
  • 5
  • 15
4
votes
1 answer

Brainfuck with 1bit memory cells?

Would an implementation of the programming language Brainfuck, still be turing complete if its memory cells were 1bit in capacity, instead of the usual 8bit? The + and - instructions become identical, however this need not be a problem. I see no…
alan2here
  • 3,223
  • 6
  • 37
  • 62
4
votes
1 answer

How to 'sleep' a Brainf_ck program?

Is it actually possible to make a Brainfuck code/program to 'sleep' for, say, x seconds or similar? Surely looping over a big number until it goes down to 0 can't be it now, is it? It would probably not be really reliable or consistent.
jeromej
  • 10,508
  • 2
  • 43
  • 62
4
votes
1 answer

Can someone explain brainfuck?

I am trying to write a brainfuck interpreter but I am missing some context or something. The function that is supposed to be called to handle the conversion of "+><>" etc is supposed to be: std::vector Interpreter::interpret(const std::string…
user3577756
  • 643
  • 1
  • 9
  • 13
1 2
3
13 14