Novice

Novice is an esoteric programming language designed by Keymaker in 2007. It's a Turing-complete language based on string-rewriting and jumping to labels. For any string-rewriting to happen, there must exist a label that's identical to the part that rewrites something. There's an unbound memory string, and it, as every other line, must have at least one character. Replacing empty string with something or something with empty string isn't allowed. The memory string may not feature any '=' or '-' characters, and a line that's not label may feature only one, but not both. For example, the following e abc=e searches 'abc' from the memory string, if it's found and if there exists label 'e' (which does in this example), then 'abc' is replaced in memory string with 'e', and the line pointer jumps to label 'e'. Also, there may not exist two identical labels, but lines that aren't labels may be identical.

If a line isn't label, it has one '=' or '-'. They work as described above, and their only difference is that lines with '-' also print out the right part, in case a matching label is found. For example a-Hi!_* Hi!_* will print 'Hi!' with a new-line if label 'Hi!_*' is found in the program and 'a' in the memory string. 'a' in memory string will also be replaced with 'Hi!_*'. There are special characters to allow printing new-lines and '=' and '-' and '_', and they are (in same order) '_*', '_a', '_b', and '__'.

The very first line in the program is the initial state of memory, and it's not count as a program line, so the first line 'aa' wouldn't work as a label 'aa'.

One proof of its Turing-completeness is the following program, http://yiap.nfshost.com/esoteric/novice/bbf.nvc, which is a binary brainfuck interpreter, and thus shows through simulation that Novice is Turing-complete.

External resources

 * Novice page (specs, programs, and interpreter)