Nevermore
Nevermore is an esoteric programming language created by User:ajzaff. The language and syntax rules are designed to be overly obscure, and therefore, make it difficult to program.
Language overview
Like Brainfuck, the language operates on an array of memory cells, also referred to as the tape. Each cell is initially set to zero. There is a pointer, initially pointing to the first memory cell.
The language integrates an elementary cellular automation which it basically uses to make programming more difficult and give the code an obfuscated appearance.
The automation evolves in a data structure known as the Nevermore, hence, the language's name. The structure is a bit array of length 8. The Nevermore structure takes an initial value (state) of 0, [0 0 0 0 0 0 0 0]
. The state evolves every time a command is called.
A change in state causes the command set of the language to change. The evolution of the command set exhibits chaotic behavior and is hard, or impossible, to determine without knowledge of a past state.
The left-to-right binary readout of the bits in the Nevermore's state is called the Nevermore Number. This number mod 95
is the rotation factor applied to the initial command index (See below).
Commands
Possible commands in Nevermore and their values relative to the Nevermore Number:
Command Index | Brainfuck Equivalent | Description | Change to Nevermore |
---|---|---|---|
N mod 95
|
>
|
Move the pointer to the right | Performs a right shift (>>) on the rule, evolves the Nevermore state |
(N + 1) mod 95
|
<
|
Move the pointer to the left | Performs a left shift (<<) on the rule, evolves the Nevermore state |
(N + 2) mod 95
|
+
|
Increment the memory cell under the pointer | Negates the 20 in the rule, evolves the Nevermore state |
(N + 3) mod 95
|
-
|
Decrement the memory cell under the pointer | Negates the 21 in the rule, evolves the Nevermore state |
(N + 4) mod 95
|
.
|
Output the character signified by the cell at the pointer | Negates the 22 in the rule, evolves the Nevermore state |
(N + 5) mod 95
|
,
|
Input a character and store it in the cell at the pointer | Negates the 23 in the rule, evolves the Nevermore state |
(N + 6) mod 95
|
[
|
Jump past the matching ] if the cell under the pointer is 0
|
Negates the 26 in the rule, evolves the Nevermore state |
(N + 7) mod 95
|
]
|
Jump back to the matching [ if the cell under the pointer is nonzero
|
Negates the 27 bit in the rule, evolves the Nevermore state |
(N + 8) mod 95
|
No operation, NOP | Evolves the Nevermore state |
The Nevermore's evolution rule is initialized as follows:
1,1,1
|
1,1,0
|
1,0,1
|
1,0,0
|
0,1,1
|
0,1,0
|
0,0,1
|
0,0,0
|
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
The upper numbers represent adjacent elements (Indexes i-1, i, and i+1) in the bit set and the bottom number represents the resulting bit (i). Bits -1 and 8 are by default 1.
The nomenclature for naming rules is the binary left-to-right readout of the result bits. The above case is Rule-0.
Evolution Example
Here is an example of a simple evolution of Rule 18:
1,1,1
|
1,1,0
|
1,0,1
|
1,0,0
|
0,1,1
|
0,1,0
|
0,0,1
|
0,0,0
|
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
[7]
|
[6]
|
[5]
|
[4]
|
[3]
|
[2]
|
[1]
|
[0]
|
Nevermore Number, N
|
N mod 95
|
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | -
|
-
|
1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 149 | 54 |
0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 96 | 1 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 17 | 17 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 170 | 75 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
The code consists of four consecutive NOPs since the rule does not change at each evolution. The commands are appropriately rotated for each Nevermore Number:
^)9s
However, since the above program consists of all NOPs, it does not really do anything.
Command Index Reference
An index of all possible command codes:
Command Index, N mod 95
|
ASCII Equivalent |
---|---|
0 | <SPACE>
|
1 | !
|
2 | "
|
3 | #
|
4 | $
|
5 | %
|
6 | &
|
7 | '
|
8 | (
|
9 | )
|
10 | *
|
11 | +
|
12 | ,
|
13 | -
|
14 | .
|
15 | /
|
16 | 0
|
17 | 1
|
18 | 2
|
19 | 3
|
20 | 4
|
21 | 5
|
22 | 6
|
23 | 7
|
24 | 8
|
25 | 9
|
26 | :
|
27 | ;
|
28 | <
|
29 | =
|
30 | >
|
31 | ?
|
32 | @
|
33 | A
|
34 | B
|
35 | C
|
36 | D
|
37 | E
|
38 | F
|
39 | G
|
40 | H
|
41 | I
|
42 | J
|
43 | K
|
44 | L
|
45 | M
|
46 | N
|
47 | O
|
48 | P
|
49 | Q
|
50 | R
|
51 | S
|
52 | T
|
53 | U
|
54 | V
|
55 | W
|
56 | X
|
57 | Y
|
58 | Z
|
59 | [
|
60 | \
|
61 | ]
|
62 | ^
|
63 | _
|
64 | `
|
65 | a
|
66 | b
|
67 | c
|
68 | d
|
69 | e
|
70 | f
|
71 | g
|
72 | h
|
73 | i
|
74 | j
|
75 | k
|
76 | l
|
77 | m
|
78 | n
|
79 | o
|
90 | p
|
81 | q
|
82 | r
|
83 | s
|
84 | t
|
85 | u
|
86 | v
|
87 | w
|
88 | x
|
89 | y
|
90 | z
|
91 | {
|
92 | |
|
93 | }
|
94 | ~
|
Examples
Hello World
Example of a Hello World program:
A"A"A"A"A"& AD^"AD^[bBanDSpFUj Ad: Ac((+)938C5I1Vjisotlvd%`$](L62sKV_0_0_0_0_0_0_0_2_a[SC%Cdddddedddddddde D):y
Cat Program
Example of a cat program:
%&$%'
ROT-13 Example
#F$I7OA """"'``%a"c"c""%GAb"4@-CQRQdga a'B)(5#CAY<b!n}u$FF%dEdU]"dF)D@##'&(Bc '&FiCmOoDu,Ml-,Ml-,'3jpn1zH`gag"E@d=B,Dc ?f&LqQ)Va|dg!#`$J=h[W+_Y$%8xx $@)$EE$YqHPK6Z?>bb"A#Fg'BgHebegdh!d%Bh
99 Bottles of Beer
$AbBSjFUj """"""""""'Bb#2[f)6.1-#22+&j\^1*cRU3v`e`'@g w`dh"#$)*;LBCD`c"c"c"c"caa"C$DR{Pbgb"b%_adha"c"c"c"c"c"c"cgb"c"c"c"`cg$'1:S&+.;U*0\70QOPQQOPQQO[bfBPY:pZ_.Z\a(N@SR=1z<QXbaSCCCCC"C' F6%Jn]F8%Jn]F8%Jn]F8%Ibcrkvmw!Ef]('))&&&&&&&&3PQOpppppppadh"a"c"c"c"c"cg!B$bR*0\U*0c~b.5Mxp}z/=U*0\U*0\U*0\7/JT[2JTA$E 'ER[0JU\Vb"A'?O7(b_DC2S*[&_$`%b&Mwmwmwmwmw!b,D%!##########)D&%5|||||||Y?=o4q4q4q4q<>c"B$ DXXa)R<a)R<a)R<a)K%$s<PX^0JY4KY>a7_0R,P`#gb"b%_0SZ"G_adh"a"c"c"c"c"cg!c"c"c"c"c"`cg#).?YB$%e+nA:c"#%).?EBr0ND`"adha"D&J\>l=`VM9nK.faE$+5Hn;U)n;U)jCSjFUjFUjFU #F~d'"""""""""'"##########"*@xjzjzjzjzqVl6ILV/NT\?c"C$DR{Pb%F&ES|Qc"C)_(W:2&|adh"c"ca"b$^,NLmmmqA$##CRS:[._]XX*<6h~syvwwww{"FhN/vP0]W0).2`Q3d%J*;DI#"""" #F#$btptptptptptptp3DB"""""""Ac' =X%$4{?X%$4{?%{K7ZY{H8=AcG@b!tttttttttt|uyyvyvyvyvux|`c"BC#$C#rT[:p1Ce(0<Z,&)B!-K9L9L9q8NWK*[;0P]#DT:_:SZ J[>a7OX#DWZ0JU\0J_EFca"b$^,NLmmmmmqA$##CRS:[YLH2|I-k}uxvwwwwwwww{"c"c"c"c"?BFd)N>K=zj=D*K.!"""""""""" #F~dh|h|h|hxc0fSIadG&5LXmjvmwnxp}}>QX^0JU\0JUP^W?UnAa%_(Y1S:_=#DU=#DU=#D?U@#Bc"c"c"c"c"fb"D'K^c"D'KTrAg2j@c&xvyzlwnyoJnr@$D%).;U*0\70QOPQQOPQQO[bfBS,b#T=zja$JjT]^F""""""""A%F#$burzx.;N?XQ=z/B/y?QX^0JU\?VrJmLmLmLmLmLmP"B$c3L>]yc"B(F_%B$bR*0\7RSJ+?Z_h"BdK?Fc"DdK:hAHCDDDDDDDD`Ee_%Jn~)AUS:x.>-x>QX^0JU\0JY4p;X0PmS:W!ac/SZ"G_0SZ"G9dha"c"c"c"cgb"c"cadh"C#GXZ8yyyyyyy}/?z/>Wnxp}zxJ F.k}txvwwwwwww{"a#a#a#a#!$Eg03Ti/>K=zj=D*K;D*K;DI#"""""" #F#A#t>QX?/z<QX?/z<QX?/}>/w<LR2IgzHGdBSjFUj[P(Y{H=@D|Y.+>z/<TELaBP[*89xxxxxxx_*3?Y*#bc"c"c"c"c"c"c"c"cg!B$C3[>,T`<#DU=#DU=e2#s<P^e%~|mmmmmmmmmmmmqA$"$AUnAa_^`Y68wwwwwwwwwwwwwwwww{"FiN/TPLKOJ*L-L-L-L-L-LP!A?b@r(7#p.$'<Qt&+4Fk4Fk4Fk4&!""""""""" #F~dD"""""""""'!""""""""""!%E{gukgtlvmwm{ac"BC#$C#rTQ\d.SZ"G_gb"cadh"Dej~~)AUS:x.>-|++A f"')Z+!B&%W!F^E1#_$:gyFS`-S=XuCBBY6[59q-.:K:4Ad`dBU(p`D0]<<~]jE@E`CP--4:6VmVA3wCOJBF@3-Q-tic#d^_`eaeaeae D!C/+A& $ $BfXPqg0 B>:*6@c@e E!'=F?#~eae %?$@%`5QUXL:&=F= yb&K-=#T8pDaae %?$@%`5QUXL:&=F= ybgbh `&I5hnA`_@,(L6F($(L:JE $B(]G/P;T[PAdp]8UAdPL*:-&"'E1FY4@h^'bZX`egbh B>h-8wwwwwwwwwmxp}z/>Wnxp9L>Ei{(c%EX=)]a a$@eaeaeaeae D!C/+A& $ $BfXkTske eaeaeaeaeae D!C/+A& $ $'"E{IBs-S,6Nyt"`(#"u]U5{^XI$LF($(L:JE $B(]G/P;T[PAdp]8UAdPL*:-&"'E1FY4@h^'bZX`e eaeae e&"F^_c B>)d8~Y.^UM]caeaeae D!C/+A& $ $BfXPqg0 B>:*6@c@e E!'=F?#~eae %?$@%`5QUXL:&=F= yb&K-=#T8pDaae %?$@%`5QUXL:&=F= ybgbh `&`Y0(sg9OJ@2%()6+H $A&A92w}P@E!c@e eaeaeae C~<Ivj( $A&A92w}PG29XG%9|w{`*$'-Z`<E@:Xy.&D $ $Ad $AdAM_3 i=!c@e eaeaeae C~<Ivj( $A&A92w}P@E!cCRR egahbbeegbh Ad`#^'~@<e F_%/<SCaae %?$@%`5QUXL:&=F= yb&K-=#T8pDaae %?$@%`5_^f&WGCB?$?c^d#KUI-VPWlle F_%/<SCaeae %?\\$L#bfZd Bf8vzM\M4<Ua&Daeaeae D!CO{iK%% $Bf8vzM\M4<Ua&Daeaeae D!CO{iK%% $Bf8vlTNV3rxebbe!C"%)DB36*D $ $!&9G`eQ.LoJD eaeaeae D!C0|=/#'`dB&9G`eQ.LoJD eaeaeae D