The program structure is a 2-D box, the characters are spaces or non-space symbols. The program pointer is at the unique non-space symbol that is moving. When it moves outside the boundary (such that it can't possibly touch anything else) then the program terminates. The program starts by moving the $ (there can be only one in the program) toward the right.
- When a moving symbol bumps into a non-space with a different symbol, it stops, and the other symbol starts moving in the same direction.
- When a moving symbol hits a non-space that matches, it pushes the latter (and anything behind it if there are multiple non-spaces in a row) one space in the direction moved, then reverses its own direction.
- When there are non-matching non-spaces next to it like in Black Box, the moving symbol deflects, see below. (Matching symbols don't affect it)
* * .... ...... bounces off . * . deflects
- The symbols ^ _ < > are special symbols. If they move, they turn into the symbol corresponding to the direction they are moving in.
- The symbols = and | are pullers, = horizontally, and | vertically. (In any other respect they are just like other symbols.) A symbol moving away horizontally from an adjacent =, pulls with it the latter and all non-spaces connected to it. Similarly with |, except vertically. But , A puller of either way, when bumping into another puller (either kind), it immediately reverses and pulls it along with it.