xx
                xxxx     xx    xxxx    xxxxx            xxxx
               xx  xx          xx xx   xx  xx          xx  xx
        xxxx   xx  xx  xxxx    xx  xx  xx  xx   xxxx   xx       xxxx
           xx  xx        xx    xx  xx  xx  xx      xx   xx     xx  xx
           xx  xx        xx    xx  xx  xxxxx       xx    xx    xx  xx
        xxxxx  xx        xx    xx  xx  xx  xx   xxxxx     xx   xxxxxx
       xx  xx  xx  xx    xx    xx  xx  xx  xx  xx  xx      xx  xx
       xx  xx  xx  xx    xx    xx xx   xx  xx  xx  xx  xx  xx  xx
        xxxxx   xxxx   xxxxxx  xxxx    xxxxx    xxxxx   xxxx    xxxx
        H      o      M      e                P      a      G      e


Brainf*ck
-------------------------+
                         |
-------------------------+--------------------------------------------------

O que é?

Brainf*ck é uma linguagem de programação baseada na linguagem de
programação das máquinas de Post e Turing.  uma linguagem extremamente pequena
(8 comandos sem parâmetros), e não é indicada para uso prático. Ou seja, você
não criará nenhum programa de controle para vídeo locadoras com ela.

O aspecto mais importante da linguagem Brainf*ck é o fato dela despertar o
interesse das pessoas para as máquinas algorítmicas propostas por Turing e
Post. Também pode ser vista como uma linguagem de programação curiosa. Ou até
mesmo para você dizer pros seus amigos que você programa em Brainf*ck e eles
não.

Um breve tutorial

O funcionamento da linguagem Brainf*ck é simples e eu tentarei explicar de
forma resumida. Recomendo que você faça o download dos fontes do interpretador
e dos exemplos.

Brainf*ck utiliza o conceito de células de memória e ponteiro de memória para
funcionar. Inicialmente a memória da 'máquina Brainf*ck' é a seguinte:

Posição: 0     1     2     3     4     5     6     7     8
- - - +-----+-----+-----+-----+-----+-----+-----+-----+-----+ - - -
      |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |
- - - +-----+-----+-----+-----+-----+-----+-----+-----+-----+ - - -
         ^

O símbolo '^' indica a o ponteiro de memória e mostra a sua posição inicial
(0). A partir daí, Brainf*ck disponibiliza os 8 comandos para que você possa
programar:

+---------+------------------------------------------------------------------+
| Comando | Função                                                           |
+---------+------------------------------------------------------------------+
|    +    | Incrementa em 1 o valor da célula apontada pelo ponteiro.        |
|    -    | Decrementa em 1 o valor da célula apontada pelo ponteiro.        |
|    >    | Movimenta o ponteiro 1 posição para a direita.                   |
|    <    | Movimenta o ponteiro 1 posição de para a esquerda.               |
|    ,    | Recebe 1 caracter pela entrada padrão e (teclado) e joga         |
|         | o seu código ASCII na posição de memória apontada pelo ponteiro. |
|    .    | Imprime o caracter com o código ASCII da posição de memória      |
|         | apontada pelo ponteiro.                                          |
|    [    | Inicia o loop.                                                   |
|    ]    | Se a posição de memória apontada pelo ponteiro contiver o valor  |
|         | 0 continua a execução, senão, volta para o '[' mais próximo.     |
+---------+------------------------------------------------------------------+

Tendo isso em vista, vamos fazer um pequeno programa que imprime o caracter 'A'
na tela. O caracter 'A' possui ASCII code 65. Uma forma de fazer isso seria:

++++++ ...por 65 vezes e . para imprimir

Convenhamos, isso é muito trabalhoso, logo, podemos fazer 8*8+1=65 para
abreviar nosso trabalho. Isso ficaria assim:

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

Calma, eu explico. :) Vamos seguir isso passo a passo:

-----------
00 00 00 00    Início
-----------
 ^

-----------
00 00 00 00    >
-----------
    ^ 

-----------
00 08 00 00    ++++++++
-----------
    ^

-----------
00 08 00 00    [   LOOP
-----------
    ^

-----------
00 08 00 00    <
-----------
 ^

-----------
08 08 00 00    ++++++++
-----------
 ^

-----------
08 08 00 00    >
-----------
    ^

-----------
08 07 00 00    -
-----------
    ^

-----------
08 07 00 00    ] é zero? não? volte pra LOOP. é zero? siga em frente
-----------
    ^

-----------
64 00 00 00    <
-----------
 ^

-----------
65 00 00 00    +
-----------
 ^

-----------
65 00 00 00    . Imprime a letra 'A'
-----------
 ^

Fim. Ufa! :)

Vocês devem estar pensando: 'Nossa! isso é muito difícil!' ou 'Nossa! isso não
serve de nada!'.  mais ou menos por aí :) Esse tipo de linguagem só serve para
provar alguns conceitos e não possuem finalidade prática.

Bom, espero que vocês tenham entendido o básico. Se precisarem de maiores
informações eu recomendo uma visitinha em:

- Cat's Eye
- Brainf*ck Hello World

E fazer o download do arquivo com o interpretador e alguns exemplos.