Oof!

The esoteric programming language Oof! was invented by User:Zzo38 in May 2006. It is a bit similar to Black, and to the game Black Box.

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.

Rules:
 * 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)

Deflection: *   * ....      ...... bounces off .    *    . deflects

Special symbols:
 * 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.