Program and execution
As the language is a simplification of Nopfunge it retains, on purpose, a significant amount of Nopfunge's charasteristics and functionality.
Executing one cycle of Nopfunge Solid consists of first altering (or not altering) the pointer's direction, based on whether the current cell is an arrow (
<>v^) or a space (
As in Nopfunge, the program is a two-dimensional playfield consisting of spaces and arrows. The reason Nopfunge Solid was made in the first place was this realization: There is no need to have a complex system (complex as in compared to this alternative) of four sections of the program, as it is in Nopfunge. It is possible to replace all the program sections with a small change in the behaviour of the instruction pointer when it reaches the topmost edge or the leftmost edge. In Nopfunge, moving up on the topmost row of the topmost copies, the pointer would enter the border section on the top. In Nopfunge Solid the pointer is set to 'right' and moves one step to right (as if bouncing off the solid edge into a different direction). Similarly for the leftmost row of the leftmost copies, in Nopfunge the pointer would enter the left border section, in Nopfunge Solid the pointer gets its direction set to 'down' and moves one step down. As in Nopfunge, the pointer can always move to right and down, there are infinite copies of the program in those directions.
The program never halts, but interpreters may use instruction extensions such as
. to halt.
Initially the pointer begins in 0,0 (the leftmost, topmost cell) of the 0,0-copy, and its direction is 'right'.
The language is Turing-complete, which is proven via Minsky Machine to Nopfunge Solid translation. (See link for translator in external resources.)
An example translation
This Minsky Machine program halts, with A=0 and B=3.
1 inc A 2 2 inc A 3 3 dec A 4 6 4 inc B 5 5 inc B 3 6 dec B 7 7 7 halt
It translates into this Nopfunge Solid program which halts (if instruction extension is used) in 0,3-copy of the program, meaning that the pointer is in copy that has location 0 on x-axis and location 3 on y-axis. (If the halting extension is not used, the program will remain in infinite loop which is easy to detect.)
v v > v < v < v < v < v < v < v < v> > ^ v> > ^ <v > ^ > ^ > ^ v< > ^ v< ^< > ^ > ^ v . ^
- Nopfunge Solid page (detailed explanations of the language, translator program, interpreter in Python)