From b210eb3d81b5806892685ceede3eea3d631f3ff7 Mon Sep 17 00:00:00 2001 From: Joshua Moerman Date: Fri, 21 Oct 2011 18:04:17 +0200 Subject: [PATCH] more readable code, better testcase --- brainfuck/brainfuck.hpp | 19 ++++++++++++------- brainfuck/main.cpp | 7 +++++-- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/brainfuck/brainfuck.hpp b/brainfuck/brainfuck.hpp index 187826d..1b12fae 100644 --- a/brainfuck/brainfuck.hpp +++ b/brainfuck/brainfuck.hpp @@ -12,13 +12,18 @@ namespace brainfuck_details { // recursive funtion (from http://www.xs4all.nl/~weegen/eelis/geordi/) but templated template void b(char * c, InputIterator& in, T * & p, OutputIterator out){ - for(; *c&&*c!=']'; ++c) { - (*((p+=*c=='>')-=*c=='<')+=*c=='+') -=*c=='-'; - if(*c=='.') *out++ = *p; - if(*c==',') *p = *in++; - if(*c=='[') { - for(++c; *p;)b(c,in,p,out); - for(int d=0; *c!=']'||d--; ++c)d+=*c=='['; + for(; *c && *c != ']'; ++c) { + switch(*c){ + case '>' : ++p; break; + case '<' : --p; break; + case '+' : ++*p; break; + case '-' : --*p; break; + case '.' : *out++ = *p; break; + case ',' : *p = *in++; break; + case '[' : + for(++c; *p;) b(c, in, p, out); + for(int d = 0; *c!=']' || d--; ++c) if(*c == '[') d++; + break; } } } diff --git a/brainfuck/main.cpp b/brainfuck/main.cpp index e1ba6e0..0f272b6 100644 --- a/brainfuck/main.cpp +++ b/brainfuck/main.cpp @@ -4,8 +4,11 @@ #include "brainfuck.hpp" int main() { - brainfuck("+[,.]", std::istream_iterator(std::cin)); - brainfuck(">++++++++++++++++++++++++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]"); + // will print "Hello World", or something like that. + brainfuck("++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."); + + // will print the fibonacci sequence + brainfuck(">++++++++++++++++++++++++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]"); return 0; }