I found an interesting problem on https://www.codewars.com/kata/58855acc9e1de22dff0000ef:
# Task
Make a custom esolang interpreter for the language Stick. Stick is a simple, stack-based esoteric programming language with only 7 commands.
# Commands

* `^`: Pop the stack.

* `!`: Add new element to stack with the value of 0.

* `+`: Increment element. 255+1=0.

* `-`: Decrement element. 0-1=255.

* `*`: Add ascii value of **top** element to the output stream.

* `[`: Skip past **next** `]` if element value is 0.

* `]`: Jump back to the command after **previous** `[` if element value is nonzero.

# Syntax and other info

* You don't need to add support for nested brackets.
* Non-command characters should be ignored.
* Code will always have all brackets closed.
* Note the highlighted **next** and **previous** in the commands reference.
* Program begins with the top element having the value of 0 and being the only element in the stack.
* Program ends when command executor reaches the end.

# Examples

## Hello,...

I tried it in Python, but could not do it. Can you solve it?
def interpreter(tape):
    stack, output = [0], ''
    i, n = 0, len(tape)
    while i < n:
        cmd = tape[i]
        if cmd == '^':
            stack.pop()
        elif cmd == '!':
            stack.append(0)
        elif cmd == '+':
            stack[0] = 0 if stack[0] == 255 else stack[0] + 1
        elif cmd == '-':
            stack[0] = 255 if stack[0] == 0 else stack[0] - 1
        elif cmd == '*':
            output += chr(stack.pop(0))
        elif cmd == '[' and stack[0] == 0:
            while tape[i] != ']':
                i += 1
        elif cmd == ']' and stack[0] != 0:
            while tape[i] != '[':
                i -= 1
        i += 1
    return output.replace('\n', '\x02')