PNID
Paradigm(s) | imperative |
---|---|
Designed by | Lealcy Tardelli Belegante |
Appeared in | 2017 |
Memory system | tape-based |
Dimensions | one-dimensional |
Computational class | Turing complete |
Major implementations | C# Interpreter |
Influenced by | Brainfuck |
File extension(s) | {{{files}}} |
PNID means "Previous, Next, Increment, Decrement" and is a superset of Brainfuck.
Language overview
As Brainfuck, PNID operates on an array of memory cells, also referred to as the tape, each initially set to zero. There is a pointer, initially pointing to the first memory cell. The commands are:
Command | Description |
---|---|
p
|
Move the pointer one cell to the left. if the pointer gets below zero, then it cycles to the last position of the memory |
n
|
Move the pointer one cell to the right. if the pointer gets above the available memory, then it becomes zero |
i
|
Increment the memory cell under the pointer |
d
|
Decrement the memory cell under the pointer |
w
|
Output the character signified by the cell at the pointer |
r
|
Input a character and store it in the cell at the pointer |
()
|
Repeat the code inside the parenthesis until the appointed value becomes zero |
$
|
Read everything from the default input to the memory until it find a new line |
'c
|
Write the character c to the appointed cell
|
""
|
Write everything between the double quotes to the memory |
;
|
Write the numeric value of the appointed cell to the default output |
^
|
Jump the pointer back to the first cell |
j
|
Jump the code to the position contained in the current cell |
c
|
Clear all the memory |
%
|
If the current cell has a value greater than zero, generates a random number between zero and that value, otherwise generates a number between zero and INT_MAX |
\n
|
Write the number n to the current cell
|
For compatibility with brainfuck, the commands <>+-[]
are also accepted instead of pnid()
.
Interpreter
The Interpreter accept the following commands:
Command | Description |
---|---|
h
|
Show an informative help. |
q
|
Exit the interpreter |
If the execution enters a loop or a deadlock, you can break out of it by pressing ESC
.
Examples
Hello, World!
This program prints out the words Hello, World!:
"Hello, World!"^(.n)
Hello, name!
This program asks for your name, then greats you:
"What's your name? "^(wn)c^$n"Hello, "p(p)n(wn)^(wn)'!w
Coin toss
Every time you executes this program, it will give heads or tails:
i%^(n"heads"ppppp(wn))^d(c^"tails"^(wn))
Memory and wrapping
In the current implementation of the C# interpreter, the memory has UINT16_MAX
cells, each of has (sizeof)int
size.
Related languages
- Brainfuck.
- pbrain is a brainfuck extension that supports procedures.
- cbrain is a derivative of pbrain as implemented in pbrain.c, adding integers and operators.
- RUM stands for "bRainfUck iMproved." and adds procedures, strings and repetition.
- Toadskin is a brainfuck variant that supports procedures, but uses a stack instead of a tape.
- Brainfork adds a Y command to fork the current thread.
- Fm edits a string on alphabet {0,1,...,m-1} (m >= 2).
- FRAK assemble instructions to brainfuck code.
- FukYorBrane and BF Joust pit two Brainfuck-like programs against each other, as in Core War (see Redcode).
- Smallfuck operates only on bits and has no input- or output-commands.
- Spoon uses a Huffman coded set of instructions corresponding to Brainfuck's commands.
- BrainDuino BF port on Arduino HW platform (based on Atmel's ATMega). Extended by two special I/O operations and special overflow protection.
- Puzzlang turns every program into an exercise in patience and logic puzzle skills. The lone X operator becomes any of brainfuck's instructions, depending on the surrounding characters.
- Alarm Clock Radio throws away the instructions to decrement the memory pointer or memory value.
- Portal and Portal 2 allows code-level pointer manipulation and theoretically implements the Wang-B Machine.
- tbf is a language that can be compiled to Brainfuck. It includes variables, strings, macros and improved loops.
- Grin adds more efficient arithmetic functions to Brainfuck.
- tinyBF and its variant RISBF are brainfuck equivalents with only 4 opcodes.
Some other funny variants:
- Ook! works exactly like brainfuck, except the syntax is in Orangutan.
- Blub is the same for fish.
- Matisse uses colors to merge brainfuck codes and program comments.
- Brainloller has the same commands as brainfuck, except they're read from a png image.
- COW is like Ook!, except with a bovine syntax.
- Pi obfuscates Brainfuck instructions in random errors in pi digits.
Some languages inspired by brainfuck, but with more major differences:
- Aura requires data to be stored in the code space.
- PATH and SNUSP attempt to combine brainfuck with Befunge.
- Wierd arose out of an earlier attempt to combine brainfuck with Befunge.