Brincando com Brainfuck

Publicado em

Brainfuck por Wikipédia:

Brainfuck (também conhecido como brainf*ck, ou BF) é uma linguagem de programação esotérica notada pelo seu extremo minimalismo, criada por Urban Müller, em 1993. Ela é uma linguagem Turing completa, desenhada para desafiar e confundir os programadores, e não é útil para uso prático. Pela sua simplicidade, o desenvolvimento de compiladores e interpretadores para essa linguagem é muito mais fácil do que para outras linguagens.

Vamos brincar um pouco!

Para isso vamos utilizar esse interprete em C:


#include <stdio.h>
#include <windows.h>

int  p, r, q;
char a[5000], f[5000], b, o, *s=f;

void interpret(char *c)
{
char *d;

r++;
while( *c ) {
//if(strchr("<>+-,.[]\n",*c))printf("%c",*c);
switch(o=1,*c++) {
case '<': p--;        break;
case '>': p++;        break;
case '+': a[p]++;     break;
case '-': a[p]--;     break;
case '.': putchar(a[p]); fflush(stdout); break;
case ',': a[p]=getchar();fflush(stdout); break;
case '[':
for( b=1,d=c; b && *c; c++ )
b+=*c=='[', b-=*c==']';
if(!b) {
c[-1]=0;
while( a[p] )
interpret(d);
c[-1]=']';
break;
}
case ']':
puts("UNBALANCED BRACKETS"), exit(0);
case '#':
if(q>2)
printf("%2d %2d %2d %2d %2d %2d %2d %2d %2d %2d\n%*s\n",
*a,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],3*p+2,"^");
break;
default: o=0;
}
if( p<0 || p>100)
puts("RANGE ERROR"), exit(0);
}
r--;
//    chkabort();
}

main(int argc,char *argv[])
{
FILE *z;

q=argc;

if(z=fopen(argv[1],"r")) {
while( (b=getc(z))>0 )
*s++=b;
*s=0;
interpret(f);
}
}

O Brainkfuck possui apenas 8 comandos de operação, outros diferentes dos demais são considerados comentarios

Um exemplo de um algoritmo(?) em Brainfuck:

hello.b

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

Ela imprime no console um simples “Hello World!”

Interessante, não?! =)

Referências:

http://pt.wikipedia.org/wiki/Brainfuck

brainfuck (também conhecido como brainf*ck, ou BF) é uma linguagem de programação esotérica notada pelo seu extremo minimalismo, criada por Urban Müller, em 1993. Ela é uma linguagem Turing completa, desenhada para desafiar e confundir os programadores, e não é útil para uso prático. Pela sua simplicidade, o desenvolvimento de compiladores e interpretadores para essa linguagem é muito mais fácil do que para outras linguagens.

Uma resposta »

  1. Ja havia lido sobre ela no wikipedia, mas nem dei muita bola. De fato essa linguagem não funciona para pessoas normais, é pior que assembly, e se o cara é fera em programar isso ai, deve já estar internado em algum hospício.
    Mas sera que da pra fazer de tudo nela?

    Ei, já que você gosta de desafios, podia falar sobre Hash birthday attack e outros collision attacks. Mais infos http://www.mscs.dal.ca/~selinger/md5collision/ e http://code.google.com/p/hashclash/ .. Isso ai é outra brainfuck da vida. a teoria é facil, mas aplicar isso em hash, o loko.. usar os hashclash é facil, agora o cara q fez isso…

    Responder
  2. 1 mes sem update

    Responder
  3. Essa linguagem é D+. Eu fiz um interpretador dela e agora eu estou codificando nessa linguagem. mt legal =)

    Responder

Deixar mensagem para 2nitme Cancelar resposta