function brainfuck(code)
    stack = zeros(100, 1);
    stack_ptr = 0;
    tape_length = 30000;
    tape = zeros(tape_length, 1);
    pointer = 1;
    i = 1;
    while i <= length(code)
        switch code(i)
            case '>'
                pointer = pointer + 1;
                if pointer > tape_length
                    pointer = 1;
                end
            case '<'
                pointer = pointer - 1;
                if pointer == 0
                    pointer = tape_length;
                end
            case '+'
                tape(pointer) = tape(pointer) + 1;
            case '-'
                tape(pointer) = tape(pointer) - 1;
            case '.'
                fprintf(char(tape(pointer)));
            case ','
            	
            case '['
                if tape(pointer) == 0
                    i = closing(i, code);
                else
                    stack_ptr = stack_ptr + 1;
                    stack(stack_ptr) = i;
                end
            case ']'
                i = stack(stack_ptr) - 1;
                stack_ptr = stack_ptr - 1;
        end
        i = i + 1;
    end
end

function i = closing(j, code)
    diff = 0;
    for i = j:length(code)
        if code(i) == '['
            diff = diff + 1;
        elseif code(i) == ']'
            diff = diff - 1;
        end
        if diff == 0
            break;
        end
    end
end

helloworld = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.";

sierpinski = ">++++[<++++++++>-]>++++++++[>++++<-]>>++>>>+>>>+<<<<<<<<<<[-[->+<]>[-<+>>>.<<]>>>[[->++++++++[>++++<-]>.<<[->+<]+>[->++++++++++<<+>]>.[-]>]]+<<<[-[->+<]+>[-<+>>>-[->+<]++>[-<->]<<<]<<<<]++++++++++.+++.[-]<]+++++";

fibonacci = "+++++++++++>+>>>>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[-<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<<-]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<+>>[-]]<<<<<<<]>>>>>[++++++++++++++++++++++++++++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++++++++++++++++++++++++++++++++++++++++++++++.[-]<<<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<<[-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-]";

brainfuck(helloworld);
fprintf "\n";
brainfuck(fibonacci);
fprintf "\n";
brainfuck(sierpinski);
