Nevermore

From Esolang
Jump to navigation Jump to search

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