p-nand-q presents a revolutionary technique in computer science: ENHADINUMS (TM) aka Enhanced Digital Numbers. They are used frequently throughout this website, to publicize my mathematical skills, increase the visibility of my genius and land me that multimillion dollar job that I need to get my first million.

## What are ENHADINUMS ?

To understand ENHADINUMS, you need to know first of all the digits:

|
One
+
Two
#
Four
.
Minus One
:
Minus Two

You can add digits by just writing them next to each other, so `##` is 8, and `||||||||` is 8, too. There are an infinite number of ways of representing the number 3 as a ENHADINUM, making ENHADINUMS very useful for people that like to spend some time writing the number 3 in infinite ways. Here are just some:

```#.
|||
+|
++.
+.#+
.......#.##.####.##.#.........................
```

You can use a 5-based placement system by prefixing the number with `'`. For example, `'##` is 24 (because 4*5+4). The whole syntax was inspired by babylonian clay even though I have no idea what that word means. You can even use negative digits in the placement system - something the babylonians never figured out - so for example, `'#`. is 19 (because 4*5-1).

You can escape from the placement system by writing a single comma, so `'#,'#,` is a very fine way of writing 8.

You can use shifted numbers by using the following syntax.

```SHIFT   = '(' NUMERIC '=' NUMERIC ')'.
```

For example, `(#=#)` is 64, and `(|=.)` is 0. Now you can write the number 20 like this:

```(+~:,|~:,~:,~|,~+,=#~#,.#~+,~#,~:,~:,~:,~+,~+,~.,|~+,~.,~#,+~.,+~+,
~:,~+,#.)~'+|,'+|,~'+,~'+(+|=|.),'|(+|=|.),~'++,|(+=.|)(+=|#..)~'(+
|=|.)(+|=|.),~'||(+|=|.),~.,'|||,(.~.,:#~.,~.,#+:~:,~.,~+,+|=|)~'|(
|=.)(|=.),'(+|=|.),(|:#=.|)~'|(|=.)#,'|(|=.)|,'++,~+,#~'+,~:,~'+(|=
.),(:+~:,+~:,~+,~:,~#,|+=.|)'|(|=.),~'|,
```

It gets better. You can redefine the identifiers on the fly using the following syntax:

```'\$' <index> <char>
```

where <index> is a zerobased hexadecimal index into this array:

```['|','+','#','.',':',',','(',')','~','=',"'"]
```

and <char> is a character you want to replace it with. This makes it possible to write 20 like this:

```(.\$9c+|+~.,+\$3a+#~a,\$4*~+,~*,~#,+#|\$6f*c*+\$5b|)+#\$2d~|b~'|+f+|c|a)b'f+
|c|a)+bfdd~db~abcd*~dba~*b\$6:~db~ab+\$2ee~*b~eb~ab)a~'eb~':+|c|a)|b:|~*
b~*bca|):e|~|b\$5[~|[ce~e[+\$1o|~e[|~o[|~a[\$2n~n[o|~n[\$ajo~a[\$9!~a[\$2.||
):o.|\$1da*!a|):\$9'.*~*[~d[~d[~*[~*[*a'a|)~+[~j|:|'a)d[~*[j|:|'a)|[~d[d
~j|:d|'|a)[~j|d:|'a)[jd:d|'|a)[+\$9o|j|dd[~j..[~jd:|oa)d[\$a/:a.\$7{~*[|d
..~a[|.~*[\$0f~a[d~a[d~a[\$2=~a[~a[~*[=f~*[a\$3;d~;[=dd\$9c~*[d\$2#~*[~;[~;
[f\$1o~#[#~;[c;f{:;;f~;[o#;c;f{~/o:fc;{[/f#[~/:ofcf;{f[./:ofcf;{#[~|[*~
|[~d[|
```

As an overview, this is the syntax implemented:

```NUMBER = NUMERIC { NUMERIC }.
NUMERIC = SHIFT | DIGIT | NUMPLC | NUMUNSD.
NUMPLC = "'" (DIGIT|SHIFT) {(DIGIT|SHIFT)} .
NUMUNSD = ','
SHIFT = '(' NUMERIC '=' NUMERIC ')'.
DIGIT = '|' | '+' | '#' | '.' | ':'.
```