Skip to content

Instantly share code, notes, and snippets.

@supposedly supposedly/bf.rule

Last active Jan 2, 2019
Embed
What would you like to do?
Brainfuck as a Golly ruletable (transpiled from Nutshell, https://github.com/supposedly/nutshell). Paste the "bf.rule" file into Golly (https://golly.sourceforge.net), then use the "bf_to_rle.py" script and paste its output into Golly (& hit Enter) to execute your bf program. Also, turn on Golly's icons so the cells display as actual symbols!
@RULE bf
********************************
**** COMPILED FROM NUTSHELL ****
**** v0.6.0a ****
********************************
Brainfuck.
1: +
2: -
3: ]
4: [
5: <
6: >
7: .
8: ,
9: Plain pointer
10: Pointer +
11: Pointer -
12: Pointer [
13: Pointer <
14: Pointer >
15: Pointer .
16: Pointer ,
17: Westbound backtracking pointer
18: Northbound no-op
19: Northbound +
20: Northbound -
21: Northbound ]
22: Northbound <
23: Northbound >
24: Northbound .
25: Northbound ,
26: Westbound +
27: Westbound -
28: Westbound ]
29: Westbound <
30: Westbound >
31: Westbound .
32: Westbound ,
33: Eastbound +
34: Eastbound -
35: Eastbound ]
36: Eastbound <
37: Eastbound >
38: Eastbound .
39: Eastbound ,
40: Southbound ,
41: Eastward-pointing shadow cell
42: Westward-pointing shadow cell
43: Westbound shadow +
44: Westbound shadow -
45: Westbound shadow ]
46: Westbound shadow <
47: Westbound shadow >
48: Westbound shadow .
49: Westbound shadow ,
50: Eastbound shadow +
51: Eastbound shadow -
52: Eastbound shadow ]
53: Eastbound shadow <
54: Eastbound shadow >
55: Eastbound shadow .
56: Eastbound shadow ,
57: Pointer delay state
58: Data pointer
59: Data-pointer + == "data-output prompter"
60: Data-pointer -
61: Data-pointer ]
62: Data-pointer <
63: Data-pointer >
64: Data-pointer .
65: Data-pointer ,
66: Data
67: Data turned output signal; reverts to data on next generation
68: Data-born output signal that will not extend westward anymore
69: Vacuum turned output signal; reverts to vacuum on next
70: Vacuum-born output signal that will not extend westward anymore
71: Plus sign (incrementor) moving through data
72: Minus sign (decrementor) moving through data
73: Second pointer delay state (down here b/c poor planning lol)
74: eastbound YES signal (not 0, keep looping) from data pointer after testing for r-bracket
75: westbound YES signal
76: southbound YES signal
77: eastbound NO signal (is 0, continue)
78: westbound NO signal
79: southbound NO signal
80: west shadow holding southbound NO
81: west shadow holding southbound YES
82: east shadow holding southound NO
83: east shadow holding southbound YES
84: Input
85: Input head, which covers the input tape & directs input toward the data pointer
86: Input traveling east
87: misc state
88: misc state
89: eastbound misc state
90: blank input
91: "Uninitialized" input data; this is only here for ease of storage in RLE format,
because otherwise the vertical input tape is very unfriendly to Golly. It moves diagonally to
the southeast until there’s something above it
92: Uninitialized \x00 input, same as above
93: Uninitialized input head, same as above
94: Yet another pointer delay state just to absolutely be sure of no timing conflicts
95: Loop-skipping pointer (opposite of WestPointer)
+ To use:
Start with this template.
x = 5, y = 4, rule = bf
2.qJ$4.pR$rM$4.I!
- Enter a BF program from left to right, using cellstates 1-8, starting in the dead cell immediately southeast of
the bottommost live one.
- Initialize data as diagonal, northwest-leaning unary stacks of state-66 cells, starting each stack in the row
immediately above the topmost live cell.
- Initialize input as vertically-stacked vertical stacks of state-84 cells, starting in and going south from the
cell immediately below the westmost live one and with individual inputs delimited by state-85 cells.
An input of \x00 can be represented using a single state-90 cell in lieu of the state-84 ones.
- (Alternatively, should you wish to make your program friendlier to RLE encoding, you may initialize input as
horizontal (west-pointing) stacks of state-91 cells, delimited by state-93 cells and using state 92 for \x00;
the input tape will right itself automatically once the simulation starts.)
+ An example:
x = 19, y = 5, rule = bf
4.qJ$6.pR$2rSrM$6.I$7.H2DF2AEBCFGC!
@TABLE
neighborhood: Moore
symmetries: none
n_states: 96
var any.0 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95}
var any.1 = any.0
var any.2 = any.0
var any.3 = any.0
var any.4 = any.0
var any.5 = any.0
var any.6 = any.0
var any.7 = any.0
var live.0 = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95}
var anyPrgm.0 = {1,2,3,4,5,6,7,8}
var prgm.0 = {1,2,5,6,7,8}
var prgm.1 = prgm.0
var vac.0 = {0,1,2,3,4,5,6,7,8}
var vac.1 = vac.0
var vac.2 = vac.0
var vac.3 = vac.0
var vac.4 = vac.0
var vac.5 = vac.0
var vac.6 = vac.0
var northbound.0 = {19,20,21,22,23,24,25}
var northboundNOP.0 = {18,19,20,21,22,23,24,25}
var pointerOps.0 = {10,11,13,14,15,16}
var westshadows.0 = {42,43,44,45,46,47,48,49}
var eastshadows.0 = {41,50,51,52,53,54,55,56}
var data.0 = {66,67,68,69,70,71,72}
var _a0.0 = {91,92,93}
var _b0.0 = {1,2,3,5,6,7,8}
var _c0.0 = {1,2,4,5,6,7,8}
var _d0.0 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95}
var _d0.1 = _d0.0
var _d0.2 = _d0.0
var _d0.3 = _d0.0
var _d0.4 = _d0.0
var _d0.5 = _d0.0
var _d0.6 = _d0.0
var _d0.7 = _d0.0
var _e0.0 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95}
var _f0.0 = {62,63}
var _g0.0 = {0,41,42}
var _h0.0 = {41,42}
var _i0.0 = {80,81,82,83}
var _j0.0 = {74,75,77,78}
var _k0.0 = {81,83}
var _l0.0 = {76,79}
var _m0.0 = {1,2,4,5,6,7,8}
var _n0.0 = {75,78}
var _o0.0 = {74,77}
var _p0.0 = {88,87}
var _q0.0 = {41,42}
var _r0.0 = {90,84}
var _s0.0 = {32,84}
var _t0.0 = {0,1,2,3,5,6,7,8}
var _u0.0 = {67,69}
var _v0.0 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95}
var _v0.1 = _v0.0
var _v0.2 = _v0.0
var _v0.3 = _v0.0
var _v0.4 = _v0.0
var _v0.5 = _v0.0
var _v0.6 = _v0.0
var _v0.7 = _v0.0
var _w0.0 = {68,70}
var _x0.0 = {72,71}
var _y0.0 = {0,1,2,3,4,5,6,7,8}
var _z0.0 = {9,10,11,13,14,15,16}
var _a1.0 = {1,2,3,4,5,6,7}
var _b1.0 = {76,79}
var _c1.0 = {0,3}
var _d1.0 = {0}
var _e1.0 = {0,1,2,3,4,5,6,7,8}
var _f1.0 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95}
var _g1.0 = {18,19,20,21,22,23,24,25}
var _h1.0 = {32,26,27,28,29,30,31}
var _i1.0 = {33,34,35,36,37,38,39}
var _j1.0 = {40,76,79}
var _k1.0 = {9,10,11,12,13,14,15,16}
var _l1.0 = {1,2,3,5,6,7,8}
# Move uninitialized input data into proper position
#### line 164: (91, 92, 93), E live, SE..NE any; 0 ####
_a0.0, any.0, any.1, live.0, any.2, any.3, any.4, any.5, any.6, 0
#### line 164: SE[0] ####
any.0, live.0, any.1, any.2, any.3, any.4, any.5, any.6, _a0.0, _a0.0
#### line 165: (91, 92, 93), N live, NE..NW any; [0: (84, 90, 85)] ####
91, live.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 84
92, live.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 90
93, live.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 85
#########################################################
##### INITIAL TELESCOPING OF BRACKET-ENCLOSED STUFF #####
#########################################################
# move program cell down if it has a closing bracket to its east
#### line 172: (prgm, 3), E 3, SE..NW vac, N..NE 0; 0 ####
_b0.0, 0, 0, 3, vac.0, vac.1, vac.2, vac.3, vac.4, 0
#### line 172: S[0] ####
vac.0, _b0.0, 3, vac.1, any.0, any.1, any.2, vac.2, vac.3, _b0.0
# move program cell down if the cell to its east is below it
#### line 175: (prgm, 3), SE anyPrgm, S..E vac; 0 ####
_b0.0, vac.0, vac.1, vac.2, anyPrgm.0, vac.3, vac.4, vac.5, vac.6, 0
#### line 175: S[0] ####
vac.0, _b0.0, vac.1, anyPrgm.0, any.0, any.1, any.2, vac.2, vac.3, _b0.0
## (NOTE: The above two groups aren't even necessary but symmetry finishes sooner) ##
# move program cell down if it has an opening bracket to its west
#### line 180: (prgm, 4), W 4, any, 0, NE..SW vac; 0 ####
_c0.0, 0, vac.0, vac.1, vac.2, vac.3, vac.4, 4, any.0, 0
#### line 180: S[0] ####
vac.0, _c0.0, vac.1, vac.2, any.0, any.1, any.2, vac.3, 4, _c0.0
# move program cell down if the cell to its west is below it
#### line 183: (prgm, 4), SW anyPrgm, W..S vac; 0 ####
_c0.0, vac.0, vac.1, vac.2, vac.3, vac.4, anyPrgm.0, vac.5, vac.6, 0
#### line 183: S[0] ####
vac.0, _c0.0, vac.1, vac.2, any.0, any.1, any.2, anyPrgm.0, vac.3, _c0.0
# special-casing for ][, but could probably be handled above
#### line 186: 4, E..SE vac, S 0, SW 3, W..NE 0; 0 ####
4, 0, 0, vac.0, vac.1, 0, 3, 0, 0, 0
#### line 186: S:4 ####
0, 4, vac.0, vac.1, any.0, any.1, any.2, 3, 0, 4
#### line 187: 3, SE 4, 0, vac, vac, NW..E 0; 0 ####
3, 0, 0, 0, 4, 0, vac.0, vac.1, 0, 0
#### line 187: S:3 ####
0, 3, 0, 4, any.0, any.1, any.2, vac.0, vac.1, 3
# if a bracket has nothing in its mouth, assume it needs to travel south
# to catch up to a different level
# In the same vein, spawn a bracket if there's an empty cell between a bracket (N) and
# a prgm tape bit (SW/SE)
#### line 193: 4, N..SW 0, W vac, NW vac; 0 ####
4, 0, 0, 0, 0, 0, 0, vac.0, vac.1, 0
#### line 193: S:4 ####
0, 4, 0, 0, any.0, any.1, any.2, 0, vac.0, 4
#### line 194: 3, NE..E vac, SE..N 0; 0 ####
3, 0, vac.0, vac.1, 0, 0, 0, 0, 0, 0
#### line 194: S:3 ####
0, 3, vac.0, 0, any.0, any.1, any.2, 0, 0, 3
# if the above happens, move the now-hanging-one-lvl-too-high prgm-tape data south
#### line 197: prgm, E prgm, 0, 0, SW 3, 0, NW..NE 0; 0 ####
prgm.0, 0, 0, prgm.1, 0, 0, 3, 0, 0, 0 # ]x
#### line 197: S[0] ####
0, prgm.0, prgm.1, 0, any.0, any.1, any.2, 3, 0, prgm.0 # ]x
#### line 198: prgm, SE 4, 0, 0, W prgm, NW..E 0; 0 ####
prgm.0, 0, 0, 0, 4, 0, 0, prgm.1, 0, 0 # x[
#### line 198: S[0] ####
0, prgm.0, 0, 4, any.0, any.1, any.2, 0, prgm.1, prgm.0 # x[
################
##### 66 #####
################
### 66-pointer transformations ###
#### line 206: 58, W eastbound, NW..SW any; [W: datapointers] ####
58, any.0, any.1, any.2, any.3, any.4, any.5, 33, any.6, 59
58, any.0, any.1, any.2, any.3, any.4, any.5, 34, any.6, 60
58, any.0, any.1, any.2, any.3, any.4, any.5, 35, any.6, 61
58, any.0, any.1, any.2, any.3, any.4, any.5, 36, any.6, 62
58, any.0, any.1, any.2, any.3, any.4, any.5, 37, any.6, 63
58, any.0, any.1, any.2, any.3, any.4, any.5, 38, any.6, 64
58, any.0, any.1, any.2, any.3, any.4, any.5, 39, any.6, 65
#### line 207: 58, E westbound, SE..NE any; [E: datapointers] ####
58, any.0, any.1, 26, any.2, any.3, any.4, any.5, any.6, 59
58, any.0, any.1, 27, any.2, any.3, any.4, any.5, any.6, 60
58, any.0, any.1, 28, any.2, any.3, any.4, any.5, any.6, 61
58, any.0, any.1, 29, any.2, any.3, any.4, any.5, any.6, 62
58, any.0, any.1, 30, any.2, any.3, any.4, any.5, any.6, 63
58, any.0, any.1, 31, any.2, any.3, any.4, any.5, any.6, 64
58, any.0, any.1, 32, any.2, any.3, any.4, any.5, any.6, 65
# If a loaded shadow is directly below data pointer, pretend it's the same as a signal
#### line 209: 58, S (westshadows-42, eastshadows-41), SW..SE any; [S: datapointers*2] ####
58, any.0, any.1, any.2, any.3, 43, any.4, any.5, any.6, 59
58, any.0, any.1, any.2, any.3, 44, any.4, any.5, any.6, 60
58, any.0, any.1, any.2, any.3, 45, any.4, any.5, any.6, 61
58, any.0, any.1, any.2, any.3, 46, any.4, any.5, any.6, 62
58, any.0, any.1, any.2, any.3, 47, any.4, any.5, any.6, 63
58, any.0, any.1, any.2, any.3, 48, any.4, any.5, any.6, 64
58, any.0, any.1, any.2, any.3, 49, any.4, any.5, any.6, 65
58, any.0, any.1, any.2, any.3, 50, any.4, any.5, any.6, 59
58, any.0, any.1, any.2, any.3, 51, any.4, any.5, any.6, 60
58, any.0, any.1, any.2, any.3, 52, any.4, any.5, any.6, 61
58, any.0, any.1, any.2, any.3, 53, any.4, any.5, any.6, 62
58, any.0, any.1, any.2, any.3, 54, any.4, any.5, any.6, 63
58, any.0, any.1, any.2, any.3, 55, any.4, any.5, any.6, 64
58, any.0, any.1, any.2, any.3, 56, any.4, any.5, any.6, 65
#### line 211: 60, N..NW any; 58 ####
60, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 58
#### line 211: N:72 ####
any.0, any.1, any.2, any.3, any.4, 60, any.5, any.6, any.7, 72
#### line 212: 59, N..NW (66, any-66); 58 ####
59, _d0.0, _d0.1, _d0.2, _d0.3, _d0.4, _d0.5, _d0.6, _d0.7, 58
#### line 212: N[(71, 66, ...)] ####
66, any.0, any.1, _d0.0, _d0.1, 59, _d0.2, _d0.3, any.2, 71
_e0.0, any.0, any.1, _d0.0, _d0.1, 59, _d0.2, _d0.3, any.2, 66
#### line 213: (63, 62), N..NW any; 0 ####
_f0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 213: E[0: (58, _)] ####
any.0, any.1, any.2, any.3, any.4, any.5, any.6, 63, any.7, 58
#### line 213: W[0: (_, 58)] ####
any.0, any.1, any.2, 62, any.3, any.4, any.5, any.6, any.7, 58
# Test to see whether there is data above the data pointer -- if yes, send back a LOOP signal ('keep looping'), and if no, send a BREAK ('stop looping')
#### line 216: 61, N 0, NE..SE any, S (0, 42, 41), SW..NW any; 58 ####
61, 0, any.0, any.1, any.2, _g0.0, any.3, any.4, any.5, 58
#### line 216: W[S: (_, 80, 82)] ####
any.0, any.1, 0, 61, 42, any.2, any.3, any.4, any.5, 80
any.0, any.1, 0, 61, 41, any.2, any.3, any.4, any.5, 82
#### line 217: 61, N live, NE..SE any, S (0, 42, 41), SW..NW any; 58 ####
61, live.0, any.0, any.1, any.2, _g0.0, any.3, any.4, any.5, 58
#### line 217: W[S: (_, 81, 83)] ####
any.0, any.1, live.0, 61, 42, any.2, any.3, any.4, any.5, 81
any.0, any.1, live.0, 61, 41, any.2, any.3, any.4, any.5, 83
# we can't send a signal from north to south directly (would exceed lightspeed) so we put it to the west first as a two-step sort of thing; this does delay things by one gen however
#### line 219: (42, 41), NW (80, 82, 81, 83), N 58, NE..W any; [NW] ####
_h0.0, 58, any.0, any.1, any.2, any.3, any.4, any.5, _i0.0, _i0.0
#### line 219: NW:0 ####
_i0.0, any.0, any.1, 58, _h0.0, any.2, any.3, any.4, any.5, 0
#### line 219: W:0 ####
any.0, _i0.0, 58, _h0.0, any.1, any.2, any.3, any.4, any.5, 0
# continue on
#### line 221: 28, W 58, NW (0, data), N..SW any; [NW: (77, 74, ...)] ####
28, any.0, any.1, any.2, any.3, any.4, any.5, 58, 0, 77
28, any.0, any.1, any.2, any.3, any.4, any.5, 58, data.0, 74
#### line 222: 35, NE (0, data), E 58, SE..N any; [NE: (78, 75, ...)] ####
35, any.0, 0, 58, any.1, any.2, any.3, any.4, any.5, 78
35, any.0, data.0, 58, any.1, any.2, any.3, any.4, any.5, 75
# Reroute west-/eastbound yes/no signals to the south because we need to get them to the program-tape pointer
# ((not relevant at all but i am so proud of how nutshell just takes this and spits out a working translation with no issue))
#### line 226: (42, 41), N (78, 77, 75, 74), NE..NW any; [N: (80, 82, 81, 83)] ####
_h0.0, 78, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 80
_h0.0, 77, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 82
_h0.0, 75, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 81
_h0.0, 74, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 83
#### line 226: N:0 ####
_j0.0, any.0, any.1, any.2, any.3, _h0.0, any.4, any.5, any.6, 0
#### line 226: NW[N: (0, _, 0, _)] ####
any.0, any.1, any.2, 78, _h0.0, any.3, any.4, any.5, any.6, 0
any.0, any.1, any.2, 75, _h0.0, any.3, any.4, any.5, any.6, 0
#### line 226: NE[N: (_, 0, _, 0)] ####
any.0, any.1, any.2, any.3, any.4, any.5, _h0.0, 77, any.6, 0
any.0, any.1, any.2, any.3, any.4, any.5, _h0.0, 74, any.6, 0
#### line 227: (80, 82, 81, 83), N..NW any; [0: (41, 42, 41, 42)] ####
80, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 41
82, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 42
81, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 41
83, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 42
#### line 227: S[0: (79, 79, 76, ...)] ####
any.0, 80, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 79
any.0, 82, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 79
any.0, _k0.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 76
# Finally, the r-brack receives the southbound yes/no signal from above
# If it's BREAK ('yes'), delete the waiting pointer and move it up to where it can continue traveling
# if it's LOOP ('no'), turn the waiting pointer into a westbound one to send it back to the appropriate l-brack
#### line 232: 3, N (79, 76), NE..NW any; [0] ####
3, _l0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 3
#### line 232: N[(12, 0)] ####
79, any.0, any.1, any.2, any.3, 3, any.4, any.5, any.6, 12
76, any.0, any.1, any.2, any.3, 3, any.4, any.5, any.6, 0
#### line 232: W[N: (0, 17)] ####
any.0, any.1, 79, 3, any.2, any.3, any.4, any.5, any.6, 0
any.0, any.1, 76, 3, any.2, any.3, any.4, any.5, any.6, 17
#### line 234: any, SW 4, W 87, NW..S any; 21 ####
any.0, any.1, any.2, any.3, any.4, any.5, 4, 87, any.6, 21
#### line 234: W:88 ####
87, any.0, any.1, any.2, any.3, 4, any.4, any.5, any.6, 88
#### line 235: 17, W 4, NW..SE any, S (4, prgm), SW any; [S: (87, pointerOps)] ####
17, any.0, any.1, any.2, any.3, 4, any.4, 4, any.5, 87
17, any.0, any.1, any.2, any.3, 1, any.4, 4, any.5, 10
17, any.0, any.1, any.2, any.3, 2, any.4, 4, any.5, 11
17, any.0, any.1, any.2, any.3, 5, any.4, 4, any.5, 13
17, any.0, any.1, any.2, any.3, 6, any.4, 4, any.5, 14
17, any.0, any.1, any.2, any.3, 7, any.4, 4, any.5, 15
17, any.0, any.1, any.2, any.3, 8, any.4, 4, any.5, 16
#### line 235: W:4 ####
4, any.0, any.1, 17, _m0.0, any.2, any.3, any.4, any.5, 4
#### line 236: 17, N..NW any; 0 ####
17, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 236: W:17 ####
any.0, any.1, any.2, 17, any.3, any.4, any.5, any.6, any.7, 17
#### line 236: N:18 ####
any.0, any.1, any.2, any.3, any.4, 17, any.5, any.6, any.7, 18
#### line 238: (78, 75), N..NW any; 0 ####
_n0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 238: W[0] ####
any.0, any.1, any.2, _n0.0, any.3, any.4, any.5, any.6, any.7, _n0.0
#### line 239: (77, 74), N..NW any; 0 ####
_o0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 239: E[0] ####
any.0, any.1, any.2, any.3, any.4, any.5, any.6, _o0.0, any.7, _o0.0
# Input
# make the comma signal stay put so the data pointer knows where to send the go-poll-for-input request (to have it reach the shadow cell)
#### line 243: 32, E 0, SE..SW any, W 58, NW..NE any; 87 ####
32, any.0, any.1, 0, any.2, any.3, any.4, 58, any.5, 87 # just need a random nonmoving state
#### line 244: 39, E 58, SE..SW any, W 0, NW..NE any; 88 ####
39, any.0, any.1, 58, any.2, any.3, any.4, 0, any.5, 88 # just need a random nonmoving state
# when input is requested, get the data pointer to zero the current cell,
#### line 246: 65, N 66, NE..NW any; [0] ####
65, 66, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 65
#### line 246: N:72 ####
66, any.0, any.1, any.2, any.3, 65, any.4, any.5, any.6, 72
#### line 247: 65, N 0, NE..NW any; 58 ####
65, 0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 58 # blank cell's cue
# then once done tell the shadow cell to go poll for input
## if nothing to south, send it in appropriate direction
#### line 250: 87, W 58, NW 0, N..S any, SW 0; 0 ####
87, any.0, any.1, any.2, any.3, any.4, 0, 58, 0, 0
#### line 250: S:39 ####
any.0, 87, any.1, any.2, any.3, any.4, any.5, 0, 58, 39
#### line 251: 88, NE 0, E 58, SE 0, S..N any; 0 ####
88, any.0, 0, 58, 0, any.1, any.2, any.3, any.4, 0
#### line 251: S:32 ####
any.0, 88, 58, 0, any.1, any.2, any.3, any.4, any.5, 32
## elif shadow cell to south, stay put and do something stupid to give it the signal regardless
#### (this could be merged into the above transition but I'm lazy)
#### line 254: 65, N 0, NE..SE any, S (42, 41), SW..NW any; 58 ####
65, 0, any.0, any.1, any.2, _h0.0, any.3, any.4, any.5, 58
#### line 254: SW:39 ####
any.0, any.1, 65, _h0.0, any.2, any.3, any.4, any.5, any.6, 39
# Also have these misc cells not destroy the shadow if it's to their south
#### line 256: (87, 88), S 42, SW..SE any; 0 ####
_p0.0, any.0, any.1, any.2, any.3, 42, any.4, any.5, any.6, 0
#### line 256: S:42 ####
42, _p0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 42
#### line 256: SW:39 ####
any.0, any.1, _p0.0, 42, any.2, any.3, any.4, any.5, any.6, 39
#### line 257: (87, 88), S 41, SW..SE any; 0 ####
_p0.0, any.0, any.1, any.2, any.3, 41, any.4, any.5, any.6, 0
#### line 257: S:41 ####
41, _p0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 41
#### line 257: SW:39 ####
any.0, any.1, _p0.0, 41, any.2, any.3, any.4, any.5, any.6, 39
## shadow cell receiving go-poll-for-input signal: (none of those commas would ever appear above it otherwise so we can always assume this'll be the cause)
## on receiving the signal it stays put and sends a comma to the west to ask the input-tape head for its stuff
#### line 260: (41, 42), N..NE any, E 32, SE..SW any, W 0, any; [0] ####
_q0.0, any.0, any.1, 32, any.2, any.3, any.4, 0, any.5, _q0.0
#### line 260: S:32 ####
any.0, _q0.0, 32, any.1, any.2, any.3, any.4, any.5, 0, 32
#### line 261: (41, 42), N..NE any, E 0, SE..SW any, W 39, any; [0] ####
_q0.0, any.0, any.1, 0, any.2, any.3, any.4, 39, any.5, _q0.0
#### line 261: S:32 ####
any.0, _q0.0, 0, any.1, any.2, any.3, any.4, any.5, 39, 32
# Input head doubles as data delimiter so have it move east appropriately to move data with
#### line 263: 85, N 0, NE 84, E..NW any; 0 ####
85, 0, 84, any.0, any.1, any.2, any.3, any.4, any.5, 0 # if it's the next up
#### line 263: N:85 ####
0, any.0, any.1, 84, any.2, 85, any.3, any.4, any.5, 85 # if it's the next up
#### line 264: 0, (84, 90), NE..SE any, 85, SW..NW any; 85 ####
0, _r0.0, any.0, any.1, any.2, 85, any.3, any.4, any.5, 85 # if it's farther down
#### line 265: 85, N 85, NE..NW any; 0 ####
85, 85, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 0
# Input head is otherwise invincible
#### line 267: 85, N..NW any; [0] ####
85, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 85
# When the west comma finds the input head,
# move the comma down one to let the input (if any) know it's there
#### line 270: 85, NE 32, E..N any; [0] ####
85, any.0, 32, any.1, any.2, any.3, any.4, any.5, any.6, 85
#### line 270: N:0 ####
any.0, any.1, any.2, 32, any.3, 85, any.4, any.5, any.6, 0
#### line 270: E:32 ####
any.0, 32, any.1, any.2, any.3, any.4, any.5, 85, any.6, 32
#### line 271: 90, NE 32, E..N any; 85 ####
90, any.0, 32, any.1, any.2, any.3, any.4, any.5, any.6, 85
# Move input up and then send it back to the shadow cell
#### line 273: 84, NE (32, 84), E..SE any, S..N any; 0 ####
84, any.0, _s0.0, any.1, any.2, any.3, any.4, any.5, any.6, 0
#### line 273: E:84 ####
any.0, _s0.0, any.1, any.2, any.3, any.4, any.5, 84, any.6, 84
#### line 274: 84, W 85, NW..SW any; 0 ####
84, any.0, any.1, any.2, any.3, any.4, any.5, 85, any.6, 0
#### line 274: N:86 ####
any.0, any.1, any.2, any.3, any.4, 84, 85, any.5, any.6, 86
#### line 275: (84, 90), N..SE 0, S any, SW..NW any; 0 ####
_r0.0, 0, 0, 0, 0, any.0, any.1, any.2, any.3, 0
#### line 275: N[0] ####
0, any.0, any.1, 0, 0, _r0.0, any.2, any.3, any.4, _r0.0
# When shadow cell receives eastbound input, relay it as an "inc" signal
#### line 277: 58, S (42, 41), SW 86, W..SE any; 59 ####
58, any.0, any.1, any.2, any.3, _h0.0, 86, any.4, any.5, 59
#### line 278: (41, 42), W 86, NW..SW any; [0] ####
_q0.0, any.0, any.1, any.2, any.3, any.4, any.5, 86, any.6, _q0.0
#### line 278: N[0: (33, 26)] ####
any.0, any.1, any.2, any.3, any.4, 41, 86, any.5, any.6, 33
any.0, any.1, any.2, any.3, any.4, 42, 86, any.5, any.6, 26
# When it receives the "we're done" signal, restore the program-tape pointer & send it on its way
#### line 280: (41, 42), W 89, NW..SW any; [0] ####
_q0.0, any.0, any.1, any.2, any.3, any.4, any.5, 89, any.6, _q0.0
#### line 280: S:40 ####
any.0, _q0.0, any.1, any.2, any.3, any.4, any.5, any.6, 89, 40
#### line 281: 0, W 87, NW 40, N..SE any, S 4, SW 8; 88 ####
0, any.0, any.1, any.2, any.3, 4, 8, 87, 40, 88 # emulate l-brack test from below
#### line 281: W:21 ####
87, 40, any.0, 0, 4, 8, any.1, any.2, any.3, 21 # emulate l-brack test from below
#### line 282: 87, N 40, NE any, E (3, prgm, 0), SE..NW vac; 9 ####
87, 40, any.0, _t0.0, vac.0, vac.1, vac.2, vac.3, vac.4, 9
#### line 282: NE[E: (21, _, ...)] ####
any.0, any.1, any.2, any.3, any.4, 3, 87, 40, any.5, 21
# Also move eastbound input eastward
#### line 284: 86, N..NW any; 0 ####
86, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 284: E:86 ####
any.0, any.1, any.2, any.3, any.4, any.5, any.6, 86, any.7, 86
# Send a "we're done" signal when there's no data or none left
#### line 286: 85, E (32, 84), SE..NE any; [0] ####
85, any.0, any.1, _s0.0, any.2, any.3, any.4, any.5, any.6, 85
#### line 286: SE:87 ####
any.0, _s0.0, any.1, any.2, any.3, any.4, any.5, any.6, 85, 87
# Move "we're done" signal
#### line 288: 87, W 0, NW 85, N..SW any; 0 ####
87, any.0, any.1, any.2, any.3, any.4, any.5, 0, 85, 0
#### line 288: N:87 ####
any.0, any.1, any.2, any.3, any.4, 87, 0, 85, any.5, 87
#### line 289: 87, W 85, NW 0, N..SW any; 0 ####
87, any.0, any.1, any.2, any.3, any.4, any.5, 85, 0, 0
#### line 289: N:89 ####
any.0, any.1, any.2, any.3, any.4, 87, 85, 0, any.5, 89
#### line 290: 89, N..NW any; 0 ####
89, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 290: E:89 ####
any.0, any.1, any.2, any.3, any.4, any.5, any.6, 89, any.7, 89
### Actual handling of data ###
#### line 293: 64, N..NW any; 58 ####
64, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 58 # don't output if there's nothing to output
#### line 293: N[(0, _, ...)] ####
0, any.0, any.1, any.2, any.3, 64, any.4, any.5, any.6, 0 # don't output if there's nothing to output
# Output
#### line 295: 66, S 64, SW..SE any; 67 ####
66, any.0, any.1, any.2, any.3, 64, any.4, any.5, any.6, 67
#### line 296: vacdata, E 0, SE any, S (69, 67), SW..NE any; [0: (70, 68)] ####
0, any.0, any.1, 0, any.2, _u0.0, any.3, any.4, any.5, 70
66, any.0, any.1, 0, any.2, _u0.0, any.3, any.4, any.5, 68
#### line 297: (70, 68), N..NW (vacdata, any-vacdata); [0: vacdata] ####
70, _v0.0, _v0.1, _v0.2, _v0.3, _v0.4, _v0.5, _v0.6, _v0.7, 0
68, _v0.0, _v0.1, _v0.2, _v0.3, _v0.4, _v0.5, _v0.6, _v0.7, 66
#### line 297: N[(70, 68, _, ...)] ####
0, any.0, any.1, _v0.0, _v0.1, _w0.0, _v0.2, _v0.3, any.2, 70
66, any.0, any.1, _v0.0, _v0.1, _w0.0, _v0.2, _v0.3, any.2, 68
#### line 299: 67, N..NW (vacdata, any-vacdata); 66 ####
67, _v0.0, _v0.1, _v0.2, _v0.3, _v0.4, _v0.5, _v0.6, _v0.7, 66
#### line 299: N[(69, 67, _, ...)] ####
0, any.0, any.1, _v0.0, _v0.1, 67, _v0.2, _v0.3, any.2, 69
66, any.0, any.1, _v0.0, _v0.1, 67, _v0.2, _v0.3, any.2, 67
#### line 300: (69, 67), N..NW (vacdata, any-vacdata); [0: vacdata] ####
69, _v0.0, _v0.1, _v0.2, _v0.3, _v0.4, _v0.5, _v0.6, _v0.7, 0
67, _v0.0, _v0.1, _v0.2, _v0.3, _v0.4, _v0.5, _v0.6, _v0.7, 66
#### line 300: N[(69, 67, _, ...)] ####
0, any.0, any.1, _v0.0, _v0.1, _u0.0, _v0.2, _v0.3, any.2, 69
66, any.0, any.1, _v0.0, _v0.1, _u0.0, _v0.2, _v0.3, any.2, 67
#### line 300: NE[(_, 67, _, ...)] ####
66, any.0, any.1, any.2, any.3, _v0.0, _u0.0, _v0.1, any.4, 67
# inc/dec instructions
#### line 303: 66, SW 72, W..S any; [NE: (0, 72, ...)] ####
66, any.0, 0, any.1, any.2, any.3, 72, any.4, any.5, 0
66, any.0, live.0, any.1, any.2, any.3, 72, any.4, any.5, 72
#### line 304: vacdata, SW 71, W..S any; [0: (66, 71)] ####
0, any.0, any.1, any.2, any.3, any.4, 71, any.5, any.6, 66
66, any.0, any.1, any.2, any.3, any.4, 71, any.5, any.6, 71
#### line 305: 0, SW 71, W..S any; [NE: (66, 71, ...)] ####
0, any.0, 0, any.1, any.2, any.3, 71, any.4, any.5, 66
0, any.0, live.0, any.1, any.2, any.3, 71, any.4, any.5, 71
#### line 307: 72, SW 0, W..S any; [NE: (0, 66, ...)] ####
72, any.0, 0, any.1, any.2, any.3, 0, any.4, any.5, 0
72, any.0, live.0, any.1, any.2, any.3, 0, any.4, any.5, 66
#### line 308: 72, NE 0, E..N any; 0 ####
72, any.0, 0, any.1, any.2, any.3, any.4, any.5, any.6, 0
#### line 309: (71, 72), N..NW any; 66 ####
_x0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 66
#######################
##### SHADOW CELL #####
#######################
# If shadow is touching data pointer, flip direction before moving to it
#### line 317: 41, NW 58, N..W any; 42 ####
41, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 58, 42
#### line 318: 42, NE 58, E..N any; 41 ####
42, any.0, 58, any.1, any.2, any.3, any.4, any.5, any.6, 41
#### line 319: eastshadows, SE northboundNOP, S..NW any, N 58, NE..E any; 0 ####
eastshadows.0, 58, any.0, any.1, northboundNOP.0, any.2, any.3, any.4, any.5, 0
#### line 319: E[SE: westshadows] ####
any.0, any.1, any.2, any.3, any.4, 19, any.5, eastshadows.0, 58, 43
any.0, any.1, any.2, any.3, any.4, 20, any.5, eastshadows.0, 58, 44
any.0, any.1, any.2, any.3, any.4, 21, any.5, eastshadows.0, 58, 45
any.0, any.1, any.2, any.3, any.4, 22, any.5, eastshadows.0, 58, 46
any.0, any.1, any.2, any.3, any.4, 23, any.5, eastshadows.0, 58, 47
any.0, any.1, any.2, any.3, any.4, 24, any.5, eastshadows.0, 58, 48
any.0, any.1, any.2, any.3, any.4, 25, any.5, eastshadows.0, 58, 49
any.0, any.1, any.2, any.3, any.4, 18, any.5, eastshadows.0, 58, 42
#### line 320: westshadows, SW northboundNOP, W..NW any, N 58, NE..S any; 0 ####
westshadows.0, 58, any.0, any.1, any.2, any.3, northboundNOP.0, any.4, any.5, 0
#### line 320: W[SW: eastshadows] ####
any.0, any.1, 58, westshadows.0, any.2, 19, any.3, any.4, any.5, 50
any.0, any.1, 58, westshadows.0, any.2, 20, any.3, any.4, any.5, 51
any.0, any.1, 58, westshadows.0, any.2, 21, any.3, any.4, any.5, 52
any.0, any.1, 58, westshadows.0, any.2, 22, any.3, any.4, any.5, 53
any.0, any.1, 58, westshadows.0, any.2, 23, any.3, any.4, any.5, 54
any.0, any.1, 58, westshadows.0, any.2, 24, any.3, any.4, any.5, 55
any.0, any.1, 58, westshadows.0, any.2, 25, any.3, any.4, any.5, 56
any.0, any.1, 58, westshadows.0, any.2, 18, any.3, any.4, any.5, 41
# If a northbound cell is coming at shadow from a corner, move toward it & load self with it
#### line 323: eastshadows, SW northboundNOP, W..S any; 0 ####
eastshadows.0, any.0, any.1, any.2, any.3, any.4, northboundNOP.0, any.5, any.6, 0
#### line 323: W[SW: eastshadows] ####
any.0, any.1, any.2, eastshadows.0, any.3, 19, any.4, any.5, any.6, 50
any.0, any.1, any.2, eastshadows.0, any.3, 20, any.4, any.5, any.6, 51
any.0, any.1, any.2, eastshadows.0, any.3, 21, any.4, any.5, any.6, 52
any.0, any.1, any.2, eastshadows.0, any.3, 22, any.4, any.5, any.6, 53
any.0, any.1, any.2, eastshadows.0, any.3, 23, any.4, any.5, any.6, 54
any.0, any.1, any.2, eastshadows.0, any.3, 24, any.4, any.5, any.6, 55
any.0, any.1, any.2, eastshadows.0, any.3, 25, any.4, any.5, any.6, 56
any.0, any.1, any.2, eastshadows.0, any.3, 18, any.4, any.5, any.6, 41
#### line 324: westshadows, SW northboundNOP, W..S any; 0 ####
westshadows.0, any.0, any.1, any.2, any.3, any.4, northboundNOP.0, any.5, any.6, 0
#### line 324: W[SW: westshadows] ####
any.0, any.1, any.2, westshadows.0, any.3, 19, any.4, any.5, any.6, 43
any.0, any.1, any.2, westshadows.0, any.3, 20, any.4, any.5, any.6, 44
any.0, any.1, any.2, westshadows.0, any.3, 21, any.4, any.5, any.6, 45
any.0, any.1, any.2, westshadows.0, any.3, 22, any.4, any.5, any.6, 46
any.0, any.1, any.2, westshadows.0, any.3, 23, any.4, any.5, any.6, 47
any.0, any.1, any.2, westshadows.0, any.3, 24, any.4, any.5, any.6, 48
any.0, any.1, any.2, westshadows.0, any.3, 25, any.4, any.5, any.6, 49
any.0, any.1, any.2, westshadows.0, any.3, 18, any.4, any.5, any.6, 42
#### line 326: eastshadows, SE northboundNOP, S..E any; 0 ####
eastshadows.0, any.0, any.1, any.2, northboundNOP.0, any.3, any.4, any.5, any.6, 0
#### line 326: E[SE: eastshadows] ####
any.0, any.1, any.2, any.3, any.4, 19, any.5, eastshadows.0, any.6, 50
any.0, any.1, any.2, any.3, any.4, 20, any.5, eastshadows.0, any.6, 51
any.0, any.1, any.2, any.3, any.4, 21, any.5, eastshadows.0, any.6, 52
any.0, any.1, any.2, any.3, any.4, 22, any.5, eastshadows.0, any.6, 53
any.0, any.1, any.2, any.3, any.4, 23, any.5, eastshadows.0, any.6, 54
any.0, any.1, any.2, any.3, any.4, 24, any.5, eastshadows.0, any.6, 55
any.0, any.1, any.2, any.3, any.4, 25, any.5, eastshadows.0, any.6, 56
any.0, any.1, any.2, any.3, any.4, 18, any.5, eastshadows.0, any.6, 41
#### line 327: westshadows, SE northboundNOP, S..E any; 0 ####
westshadows.0, any.0, any.1, any.2, northboundNOP.0, any.3, any.4, any.5, any.6, 0
#### line 327: E[SE: westshadows] ####
any.0, any.1, any.2, any.3, any.4, 19, any.5, westshadows.0, any.6, 43
any.0, any.1, any.2, any.3, any.4, 20, any.5, westshadows.0, any.6, 44
any.0, any.1, any.2, any.3, any.4, 21, any.5, westshadows.0, any.6, 45
any.0, any.1, any.2, any.3, any.4, 22, any.5, westshadows.0, any.6, 46
any.0, any.1, any.2, any.3, any.4, 23, any.5, westshadows.0, any.6, 47
any.0, any.1, any.2, any.3, any.4, 24, any.5, westshadows.0, any.6, 48
any.0, any.1, any.2, any.3, any.4, 25, any.5, westshadows.0, any.6, 49
any.0, any.1, any.2, any.3, any.4, 18, any.5, westshadows.0, any.6, 42
# If it's coming from right below, just load without moving
#### line 330: eastshadows, S northboundNOP, SW..SE any; [S: eastshadows] ####
eastshadows.0, any.0, any.1, any.2, any.3, 19, any.4, any.5, any.6, 50
eastshadows.0, any.0, any.1, any.2, any.3, 20, any.4, any.5, any.6, 51
eastshadows.0, any.0, any.1, any.2, any.3, 21, any.4, any.5, any.6, 52
eastshadows.0, any.0, any.1, any.2, any.3, 22, any.4, any.5, any.6, 53
eastshadows.0, any.0, any.1, any.2, any.3, 23, any.4, any.5, any.6, 54
eastshadows.0, any.0, any.1, any.2, any.3, 24, any.4, any.5, any.6, 55
eastshadows.0, any.0, any.1, any.2, any.3, 25, any.4, any.5, any.6, 56
eastshadows.0, any.0, any.1, any.2, any.3, 18, any.4, any.5, any.6, 41
#### line 331: westshadows, S northboundNOP, SW..SE any; [S: westshadows] ####
westshadows.0, any.0, any.1, any.2, any.3, 19, any.4, any.5, any.6, 43
westshadows.0, any.0, any.1, any.2, any.3, 20, any.4, any.5, any.6, 44
westshadows.0, any.0, any.1, any.2, any.3, 21, any.4, any.5, any.6, 45
westshadows.0, any.0, any.1, any.2, any.3, 22, any.4, any.5, any.6, 46
westshadows.0, any.0, any.1, any.2, any.3, 23, any.4, any.5, any.6, 47
westshadows.0, any.0, any.1, any.2, any.3, 24, any.4, any.5, any.6, 48
westshadows.0, any.0, any.1, any.2, any.3, 25, any.4, any.5, any.6, 49
westshadows.0, any.0, any.1, any.2, any.3, 18, any.4, any.5, any.6, 42
# A "loaded" shadow cell turns into a normal one and releases its signal
#### line 334: eastshadows, N..NW any; 41 ####
eastshadows.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 41
#### line 334: N[0: (eastbound, _)] ####
any.0, any.1, any.2, any.3, any.4, 50, any.5, any.6, any.7, 33
any.0, any.1, any.2, any.3, any.4, 51, any.5, any.6, any.7, 34
any.0, any.1, any.2, any.3, any.4, 52, any.5, any.6, any.7, 35
any.0, any.1, any.2, any.3, any.4, 53, any.5, any.6, any.7, 36
any.0, any.1, any.2, any.3, any.4, 54, any.5, any.6, any.7, 37
any.0, any.1, any.2, any.3, any.4, 55, any.5, any.6, any.7, 38
any.0, any.1, any.2, any.3, any.4, 56, any.5, any.6, any.7, 39
#### line 335: westshadows, N..NW any; 42 ####
westshadows.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 42
#### line 335: N[0: (westbound, _)] ####
any.0, any.1, any.2, any.3, any.4, 43, any.5, any.6, any.7, 26
any.0, any.1, any.2, any.3, any.4, 44, any.5, any.6, any.7, 27
any.0, any.1, any.2, any.3, any.4, 45, any.5, any.6, any.7, 28
any.0, any.1, any.2, any.3, any.4, 46, any.5, any.6, any.7, 29
any.0, any.1, any.2, any.3, any.4, 47, any.5, any.6, any.7, 30
any.0, any.1, any.2, any.3, any.4, 48, any.5, any.6, any.7, 31
any.0, any.1, any.2, any.3, any.4, 49, any.5, any.6, any.7, 32
# override northbound-signal transitions from ptr-movement section
#### line 338: (41, 42), N..NW any; [0] ####
_q0.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, _q0.0
############################
##### 9 MOVEMENT #####
############################
# Stop moving after reaching a comma or l-brack
#### line 346: 16, E (3, vac), SE..NE any; 87 ####
16, any.0, any.1, _y0.0, any.2, any.3, any.4, any.5, any.6, 87 # just needs a random non-moving state, so blank_1 works
#### line 346: NE:0 ####
any.0, any.1, any.2, any.3, any.4, _y0.0, 16, any.5, any.6, 0 # just needs a random non-moving state, so blank_1 works
## l-brack test stuff
#### line 348: (9, pointerOps), SE 4, S anyPrgm-8, SW..E any; 21 ####
_z0.0, any.0, any.1, any.2, 4, _a1.0, any.3, any.4, any.5, 21 # send out a test signal
#### line 348: E:88 ####
any.0, any.1, any.2, any.3, any.4, 4, _a1.0, _z0.0, any.5, 88 # send out a test signal
#### line 349: 21, N northbound, NE..NW any; 87 ####
21, northbound.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, 87
#### line 349: N:0 ####
northbound.0, any.0, any.1, any.2, any.3, 21, any.4, any.5, any.6, 0
#### line 350: (87, 88), E 88, SE..NE any; [0: (88, 21)] ####
87, any.0, any.1, 88, any.2, any.3, any.4, any.5, any.6, 88
88, any.0, any.1, 88, any.2, any.3, any.4, any.5, any.6, 21
### for most cases:
#### line 352: 88, NW (76, 79), N..SE any, S 4, SW..W any; [NW: (9, 95)] ####
88, any.0, any.1, any.2, any.3, 4, any.4, any.5, 76, 9
88, any.0, any.1, any.2, any.3, 4, any.4, any.5, 79, 95
#### line 352: W:0 ####
any.0, _b1.0, any.1, 88, 4, any.2, any.3, any.4, any.5, 0
#### line 352: N:18 ####
any.0, any.1, any.2, any.3, any.4, 88, any.5, _b1.0, any.6, 18
### and for when it's on an l-brack that's right after a first l-brack:
#### line 354: 88, N (76, 79), NE..SE any, S 4, SW..NW any; [N: (9, 95)] ####
88, 76, any.0, any.1, any.2, 4, any.3, any.4, any.5, 9
88, 79, any.0, any.1, any.2, 4, any.3, any.4, any.5, 95
### and one more edge case:
#### line 356: 88, NE (76, 79), E..SE any, S 4, SW..N any; [NE: (9, 95)] ####
88, any.0, 76, any.1, any.2, 4, any.3, any.4, any.5, 9
88, any.0, 79, any.1, any.2, 4, any.3, any.4, any.5, 95
#### line 356: E:0 ####
any.0, _b1.0, any.1, any.2, any.3, any.4, 4, 88, any.5, 0
## keep moving eastward till pointer_skip finds an r-brack
#### line 358: 95, SE (3, 0), S..E any; 0 ####
95, any.0, any.1, any.2, _c1.0, any.3, any.4, any.5, any.6, 0
#### line 358: E[SE: (9, 95, ...)] ####
any.0, any.1, any.2, any.3, any.4, 3, any.5, 95, any.6, 9
any.0, any.1, any.2, any.3, any.4, _d1.0, any.5, 95, any.6, 95
#### line 358: NE:18 ####
any.0, any.1, any.2, any.3, any.4, any.5, 95, any.6, any.7, 18
# Also don't put out north-bound signals after hitting r-brack
#### line 360: pointerOps, N..NE any, E 3, SE..NW any; 9 ####
pointerOps.0, any.0, any.1, 3, any.2, any.3, any.4, any.5, any.6, 9
#### line 360: NE:21 ####
any.0, any.1, any.2, any.3, any.4, 3, pointerOps.0, any.5, any.6, 21
# But elsewhere do so as normal
#### line 362: (9, pointerOps), any, 0, vac, SE (4, prgm), S..SW vac, (4, vac), any; 57 ####
_z0.0, any.0, 0, vac.0, _m0.0, vac.1, vac.2, _e1.0, any.1, 57
#### line 362: N[0: (_, northboundOps)] ####
any.0, any.1, any.2, 0, vac.0, 10, _e1.0, any.3, any.4, 19
any.0, any.1, any.2, 0, vac.0, 11, _e1.0, any.3, any.4, 20
any.0, any.1, any.2, 0, vac.0, 13, _e1.0, any.3, any.4, 22
any.0, any.1, any.2, 0, vac.0, 14, _e1.0, any.3, any.4, 23
any.0, any.1, any.2, 0, vac.0, 15, _e1.0, any.3, any.4, 24
any.0, any.1, any.2, 0, vac.0, 16, _e1.0, any.3, any.4, 25
#### line 363: 57, N..NW any; 73 ####
57, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 73
#### line 364: 73, N..NW any; 94 ####
73, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 94 # need 3 delay states to give data pointer breathing room from both sides
#### line 365: 94, any, 0, vac, SE (4, prgm), S..SW vac, (4, vac), any; 0 ####
94, any.0, 0, vac.0, _m0.0, vac.1, vac.2, _e1.0, any.1, 0
#### line 365: E[SE: (9, pointerOps)] ####
vac.0, 0, any.0, any.1, any.2, 4, vac.1, 94, any.3, 9
vac.0, 0, any.0, any.1, any.2, 1, vac.1, 94, any.3, 10
vac.0, 0, any.0, any.1, any.2, 2, vac.1, 94, any.3, 11
vac.0, 0, any.0, any.1, any.2, 5, vac.1, 94, any.3, 13
vac.0, 0, any.0, any.1, any.2, 6, vac.1, 94, any.3, 14
vac.0, 0, any.0, any.1, any.2, 7, vac.1, 94, any.3, 15
vac.0, 0, any.0, any.1, any.2, 8, vac.1, 94, any.3, 16
#### line 366: 4, N 9, NE..E 0, SE (4, prgm), S..NW any; 4 ####
4, 9, 0, 0, _m0.0, any.0, any.1, any.2, any.3, 4
#### line 366: N:18 ####
9, any.0, any.1, 0, 0, 4, any.2, any.3, any.4, 18
#### line 366: E[SE: (88, pointerOps)] ####
0, 0, any.0, any.1, any.2, 4, any.3, 4, 9, 88
0, 0, any.0, any.1, any.2, 1, any.3, 4, 9, 10
0, 0, any.0, any.1, any.2, 2, any.3, 4, 9, 11
0, 0, any.0, any.1, any.2, 5, any.3, 4, 9, 13
0, 0, any.0, any.1, any.2, 6, any.3, 4, 9, 14
0, 0, any.0, any.1, any.2, 7, any.3, 4, 9, 15
0, 0, any.0, any.1, any.2, 8, any.3, 4, 9, 16
#### line 367: 0, S 88, SW 4, W 18, NW..SE 0; 21 ####
0, 0, 0, 0, 0, 88, 4, 18, 0, 21
#### line 368: 0, S 21, SW 0, W 18, NW..SE any; 21 ####
0, any.0, any.1, any.2, any.3, 21, 0, 18, any.4, 21
#### line 368: S:0 ####
21, 0, any.0, any.1, any.2, any.3, any.4, 0, 18, 0
# Replicate the above NE-output behavior if a bare pointer is on top of an 3 with another to its east
# (this needs a special case; nothing happens otherwise)
#### line 371: 12, E (3, any), SE..NE any; 9 ####
12, any.0, any.1, _f1.0, any.2, any.3, any.4, any.5, any.6, 9
#### line 371: NE[E: (21, _, ...)] ####
any.0, any.1, any.2, any.3, any.4, 3, 12, any.5, any.6, 21
# Make north_r_brack wait 4 generations before going up to absolutely make sure it won't collide badly with the data pointer
#### line 374: 21, W northbound, NW..SW any; [0] ####
21, any.0, any.1, any.2, any.3, any.4, any.5, northbound.0, any.6, 21
#### line 374: N:0 ####
any.0, any.1, any.2, any.3, any.4, 21, northbound.0, any.5, any.6, 0
#### line 375: 21, NW northbound, N..W any; 87 ####
21, any.0, any.1, any.2, any.3, any.4, any.5, any.6, northbound.0, 87 # random non-interfering state (any would do)
#### line 375: N:0 ####
any.0, any.1, any.2, any.3, any.4, 21, any.5, northbound.0, any.6, 0 # random non-interfering state (any would do)
#### line 376: 87, S 3, SW..SE any; 3 ####
87, any.0, any.1, any.2, any.3, 3, any.4, any.5, any.6, 3
#### line 377: 3, S 3, SW..SE any; 21 ####
3, any.0, any.1, any.2, any.3, 3, any.4, any.5, any.6, 21
# Move signals
#### line 379: N[0] ####
any.0, any.1, any.2, any.3, any.4, _g1.0, any.5, any.6, any.7, _g1.0
#### line 379: (21, northboundNOP), N..NW any; 0 ####
_g1.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 380: W[0] ####
any.0, any.1, any.2, _h1.0, any.3, any.4, any.5, any.6, any.7, _h1.0
#### line 380: (28, westbound), N..NW any; 0 ####
_h1.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 381: E[0] ####
any.0, any.1, any.2, any.3, any.4, any.5, any.6, _i1.0, any.7, _i1.0
#### line 381: (35, eastbound), N..NW any; 0 ####
_i1.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 382: (40, 79, 76), N..NW any; 0 ####
_j1.0, any.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, 0
#### line 382: S[0] ####
any.0, _j1.0, any.1, any.2, any.3, any.4, any.5, any.6, any.7, _j1.0
# 9 stops after reaching end
#### line 385: (9, 12, pointerOps), E..SE 0, S anyPrgm-4, SW..NE any; 0 ####
_k1.0, any.0, any.1, 0, 0, _l1.0, any.2, any.3, any.4, 0
#### line 385: E:9 ####
0, any.0, any.1, any.2, any.3, 0, _l1.0, _k1.0, any.4, 9
# ...with some edge-case handling
#### line 387: 9, E 9, SE 0, S 3, SW..NE any; 0 ####
9, any.0, any.1, 9, 0, 3, any.2, any.3, any.4, 0 # avoid double pointer if r-brack is the last character
#### line 388: 9, W 87, NW..S 0, SW any; 0 ####
9, 0, 0, 0, 0, 0, any.0, 87, 0, 0 # avoid punching through the prgm tape if comma is the last character
@COLORS
0 0 0 0
70 255 255 255
85 255 255 0
93 255 255 0
@ICONS
XPM
"15 1440 12 2"
".. c #000000"
"AA c #FFFFFF"
"BB c #00AA00"
"CC c #CC0000"
"DD c #666666"
"EE c #CCBB00"
"FF c #00AAFF"
"vc c #B7FFFF"
"_? c #DFFFFF"
"/7 c #FFFF00"
""\ c #E4FFFF"
"re c #F1FFFF"
/* #C Plus sign */
/* icon for state 1 */
"..........DDDDDDDDDD.........."
"........DDDDDDDDDDDDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDDDDDDDDDDD........"
"..........DDDDDDDDDD.........."
/* #C Minus sign */
/* icon for state 2 */
".............................."
".............................."
".............................."
".............................."
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
".............................."
".............................."
".............................."
".............................."
/* #C Right bracket */
/* icon for state 3 */
"......DDDDDDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDD........"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDDDDDDDDDDDDD........"
"......DDDDDDDDDDDDDD.........."
/* #C Left bracket */
/* icon for state 4 */
"..........DDDDDDDDDDDDDD......"
"........DDDDDDDDDDDDDDDD......"
"......DDDDDDAAAAAAAADDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDAAAADDDDDDDDDD......"
"......DDDDAAAADDDDDDDDDD......"
"......DDDDAAAADDDD............"
"......DDDDAAAADDDD............"
"......DDDDAAAADDDD............"
"......DDDDAAAADDDDDDDDDD......"
"......DDDDAAAADDDDDDDDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDDDAAAAAAAADDDD......"
"........DDDDDDDDDDDDDDDD......"
"..........DDDDDDDDDDDDDD......"
/* #C Left angle bracket */
/* icon for state 5 */
".............................."
"....................DDDDDDDDDD"
"................DDDDDDDDDDDDDD"
"............DDDDDDDDDDAAAADDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"DDDDDDAAAAAAAADDDDDDDDDDDD...."
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"............DDDDDDDDDDAAAADDDD"
"................DDDDDDDDDDDDDD"
"....................DDDDDDDDDD"
".............................."
/* #C Right angle bracket */
/* icon for state 6 */
".............................."
"DDDDDDDDDD...................."
"DDDDDDDDDDDDDD................"
"DDDDAAAADDDDDDDDDD............"
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"....DDDDDDDDDDDDAAAAAAAADDDDDD"
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDAAAADDDDDDDDDD............"
"DDDDDDDDDDDDDD................"
"DDDDDDDDDD...................."
".............................."
/* #C Period */
/* icon for state 7 */
".............................."
"..........DDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDAAAAAADDDDDDDD...."
"....DDDDAAAAAAAAAAAAAADDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAAAADDDD...."
"....DDDDDDDDAAAAAADDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
"..........DDDDDDDDDD.........."
".............................."
/* #C Comma */
/* icon for state 8 */
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDDDDDDDDDDDDDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAAAADDDD.."
"....DDDDDDDDDDDDAAAAAAAADDDD.."
"........DDDDDDDDAAAAAAAADDDD.."
"....DDDDDDDDDDAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAADDDDDDDD.."
"....DDDDDDDDDDDDDDDDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
/* #C "V" shape; instruction pointer */
/* icon for state 9 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 10 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 11 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 12 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 13 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 14 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 15 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 16 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 17 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* #C empty space/shadow */
/* icon for state 18 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C Plus sign */
/* icon for state 19 */
"..........DDDDDDDDDD.........."
"........DDDDDDDDDDDDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDDDDDDDDDDD........"
"..........DDDDDDDDDD.........."
/* #C Minus sign */
/* icon for state 20 */
".............................."
".............................."
".............................."
".............................."
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
".............................."
".............................."
".............................."
".............................."
/* #C Right bracket */
/* icon for state 21 */
"......DDDDDDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDD........"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDDDDDDDDDDDDD........"
"......DDDDDDDDDDDDDD.........."
/* #C Left angle bracket */
/* icon for state 22 */
".............................."
"....................DDDDDDDDDD"
"................DDDDDDDDDDDDDD"
"............DDDDDDDDDDAAAADDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"DDDDDDAAAAAAAADDDDDDDDDDDD...."
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"............DDDDDDDDDDAAAADDDD"
"................DDDDDDDDDDDDDD"
"....................DDDDDDDDDD"
".............................."
/* #C Right angle bracket */
/* icon for state 23 */
".............................."
"DDDDDDDDDD...................."
"DDDDDDDDDDDDDD................"
"DDDDAAAADDDDDDDDDD............"
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"....DDDDDDDDDDDDAAAAAAAADDDDDD"
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDAAAADDDDDDDDDD............"
"DDDDDDDDDDDDDD................"
"DDDDDDDDDD...................."
".............................."
/* #C Period */
/* icon for state 24 */
".............................."
"..........DDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDAAAAAADDDDDDDD...."
"....DDDDAAAAAAAAAAAAAADDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAAAADDDD...."
"....DDDDDDDDAAAAAADDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
"..........DDDDDDDDDD.........."
".............................."
/* #C Comma */
/* icon for state 25 */
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDDDDDDDDDDDDDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAAAADDDD.."
"....DDDDDDDDDDDDAAAAAAAADDDD.."
"........DDDDDDDDAAAAAAAADDDD.."
"....DDDDDDDDDDAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAADDDDDDDD.."
"....DDDDDDDDDDDDDDDDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
/* #C Plus sign */
/* icon for state 26 */
"..........DDDDDDDDDD.........."
"........DDDDDDDDDDDDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDDDDDDDDDDD........"
"..........DDDDDDDDDD.........."
/* #C Minus sign */
/* icon for state 27 */
".............................."
".............................."
".............................."
".............................."
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
".............................."
".............................."
".............................."
".............................."
/* #C Right bracket */
/* icon for state 28 */
"......DDDDDDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDD........"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDDDDDDDDDDDDD........"
"......DDDDDDDDDDDDDD.........."
/* #C Left angle bracket */
/* icon for state 29 */
".............................."
"....................DDDDDDDDDD"
"................DDDDDDDDDDDDDD"
"............DDDDDDDDDDAAAADDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"DDDDDDAAAAAAAADDDDDDDDDDDD...."
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"............DDDDDDDDDDAAAADDDD"
"................DDDDDDDDDDDDDD"
"....................DDDDDDDDDD"
".............................."
/* #C Right angle bracket */
/* icon for state 30 */
".............................."
"DDDDDDDDDD...................."
"DDDDDDDDDDDDDD................"
"DDDDAAAADDDDDDDDDD............"
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"....DDDDDDDDDDDDAAAAAAAADDDDDD"
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDAAAADDDDDDDDDD............"
"DDDDDDDDDDDDDD................"
"DDDDDDDDDD...................."
".............................."
/* #C Period */
/* icon for state 31 */
".............................."
"..........DDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDAAAAAADDDDDDDD...."
"....DDDDAAAAAAAAAAAAAADDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAAAADDDD...."
"....DDDDDDDDAAAAAADDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
"..........DDDDDDDDDD.........."
".............................."
/* #C Comma */
/* icon for state 32 */
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDDDDDDDDDDDDDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAAAADDDD.."
"....DDDDDDDDDDDDAAAAAAAADDDD.."
"........DDDDDDDDAAAAAAAADDDD.."
"....DDDDDDDDDDAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAADDDDDDDD.."
"....DDDDDDDDDDDDDDDDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
/* #C Plus sign */
/* icon for state 33 */
"..........DDDDDDDDDD.........."
"........DDDDDDDDDDDDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDAAAAAADDDDDDDDDDDD"
"..DDDDDDDDDDAAAAAADDDDDDDDDD.."
"........DDDDAAAAAADDDD........"
"........DDDDAAAAAADDDD........"
"........DDDDDDDDDDDDDD........"
"..........DDDDDDDDDD.........."
/* #C Minus sign */
/* icon for state 34 */
".............................."
".............................."
".............................."
".............................."
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDAAAAAAAAAAAAAAAAAAAAAADDDD"
"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
"..DDDDDDDDDDDDDDDDDDDDDDDDDD.."
".............................."
".............................."
".............................."
".............................."
/* #C Right bracket */
/* icon for state 35 */
"......DDDDDDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDD........"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"............DDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDDDDDDDAAAADDDD......"
"......DDDDAAAAAAAAAADDDD......"
"......DDDDAAAAAAAADDDDDD......"
"......DDDDDDDDDDDDDDDD........"
"......DDDDDDDDDDDDDD.........."
/* #C Left angle bracket */
/* icon for state 36 */
".............................."
"....................DDDDDDDDDD"
"................DDDDDDDDDDDDDD"
"............DDDDDDDDDDAAAADDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"DDDDDDAAAAAAAADDDDDDDDDDDD...."
"DDDDDDDDDDAAAAAAAADDDDDDDDDDDD"
"....DDDDDDDDDDAAAAAAAADDDDDDDD"
"........DDDDDDDDDDAAAAAAAADDDD"
"............DDDDDDDDDDAAAADDDD"
"................DDDDDDDDDDDDDD"
"....................DDDDDDDDDD"
".............................."
/* #C Right angle bracket */
/* icon for state 37 */
".............................."
"DDDDDDDDDD...................."
"DDDDDDDDDDDDDD................"
"DDDDAAAADDDDDDDDDD............"
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"....DDDDDDDDDDDDAAAAAAAADDDDDD"
"DDDDDDDDDDDDAAAAAAAADDDDDDDDDD"
"DDDDDDDDAAAAAAAADDDDDDDDDD...."
"DDDDAAAAAAAADDDDDDDDDD........"
"DDDDAAAADDDDDDDDDD............"
"DDDDDDDDDDDDDD................"
"DDDDDDDDDD...................."
".............................."
/* #C Period */
/* icon for state 38 */
".............................."
"..........DDDDDDDDDD.........."
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDAAAAAADDDDDDDD...."
"....DDDDAAAAAAAAAAAAAADDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAAAADDDD...."
"....DDDDDDDDAAAAAADDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
"..........DDDDDDDDDD.........."
".............................."
/* #C Comma */
/* icon for state 39 */
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDDDDDDDDDDDDDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAAAADDDD.."
"....DDDDDDDDDDDDAAAAAAAADDDD.."
"........DDDDDDDDAAAAAAAADDDD.."
"....DDDDDDDDDDAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAADDDDDDDD.."
"....DDDDDDDDDDDDDDDDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
/* #C Comma */
/* icon for state 40 */
"......DDDDDDDDDDDDDDDDDD......"
"....DDDDDDDDDDDDDDDDDDDDDD...."
"..DDDDDDAAAAAAAAAAAAAADDDDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDAAAAAAAAAAAAAAAAAADDDD.."
"..DDDDDDAAAAAAAAAAAAAAAADDDD.."
"....DDDDDDDDDDDDAAAAAAAADDDD.."
"........DDDDDDDDAAAAAAAADDDD.."
"....DDDDDDDDDDAAAAAAAADDDDDD.."
"....DDDDAAAAAAAAAAAADDDDDDDD.."
"....DDDDDDDDDDDDDDDDDDDDDD...."
"......DDDDDDDDDDDDDDDDDD......"
/* #C empty space/shadow */
/* icon for state 41 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 42 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 43 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 44 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 45 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 46 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 47 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 48 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 49 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 50 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 51 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 52 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 53 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 54 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 55 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 56 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C Darker "V" shape; delayed pointer */
/* icon for state 57 */
".............................."
"....DDDDDDDD......DDDDDDDD...."
"....DDDDDDDD......DDDDDDDD...."
"....DDDDDDDDDD..DDDDDDDDDD...."
"......DDDDDDDD..DDDDDDDD......"
"......DDDDDDDDDDDDDDDDDD......"
"........DDDDDDDDDDDDDD........"
"........DDDDDDDDDDDDDD........"
"..........DDDDDDDDDD.........."
"..........DDDDDDDDDD.........."
"............DDDDDD............"
"............DDDDDD............"
"..............DD.............."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 58 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 59 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 60 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 61 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 62 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 63 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 64 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Data pointer */
/* icon for state 65 */
".............................."
".............................."
"............EEEEEE............"
"............EEEEEE............"
"..........EEEEEEEEEE.........."
"..........EEEEEEEEEE.........."
"........EEEEEEEEEEEEEE........"
"........EEEEEEEEEEEEEE........"
"......EEEEEEEEEEEEEEEEEE......"
"......EEEEEEEE..EEEEEEEE......"
"....EEEEEEEEEE..EEEEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
"....EEEEEEEE......EEEEEEEE...."
".............................."
".............................."
/* #C Inert data */
/* icon for state 66 */
".............................."
"................EEEEEEEE......"
"..............EEEEEEEEEEEE...."
"............EEEEEEEEEEEEEEEE.."
"..........EEEEEEEEEEEEEEEEEE.."
"........EEEEEEEEEEEEEEEEEEEE.."
"......EEEEEEEEEEEEEEEEEEEEEE.."
"....EEEEEEEEEEEEEEEEEEEEEE...."
"..EEEEEEEEEEEEEEEEEEEEEE......"
"..EEEEEEEEEEEEEEEEEEEE........"
"..EEEEEEEEEEEEEEEEEE.........."
"..EEEEEEEEEEEEEEEE............"
"....EEEEEEEEEEEE.............."
"......EEEEEEEE................"
".............................."
/* #C Active forward-moving data */
/* icon for state 67 */
"....AAAAAAAAAAAAAAAAAAAAAAAAAA"
"......AABBBBBBBBBBBBBBBBBBBBAA"
"........AABBBBBBBBBBBBBBBBBBAA"
"........AABBBBBBBBBBBBBBBBBBAA"
"......AABBBBBBBBBBBBBBBBBBBBAA"
"....AABBBBBBBBBBBBBBBBBBBBBBAA"
"..AABBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"..AABBBBBBBBBBBBBBBBBBAAAABBAA"
"....AABBBBBBBBBBBBBBAA....AAAA"
"......AABBBBBBBBBBAA........AA"
"........AABBBBBBAA............"
"..........AAAAAA.............."
/* #C Active forward-moving data */
/* icon for state 68 */
"....AAAAAAAAAAAAAAAAAAAAAAAAAA"
"......AABBBBBBBBBBBBBBBBBBBBAA"
"........AABBBBBBBBBBBBBBBBBBAA"
"........AABBBBBBBBBBBBBBBBBBAA"
"......AABBBBBBBBBBBBBBBBBBBBAA"
"....AABBBBBBBBBBBBBBBBBBBBBBAA"
"..AABBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"..AABBBBBBBBBBBBBBBBBBAAAABBAA"
"....AABBBBBBBBBBBBBBAA....AAAA"
"......AABBBBBBBBBBAA........AA"
"........AABBBBBBAA............"
"..........AAAAAA.............."
/* icon for state 69 */
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
"vcvcvcvcvcvcvcvcvcvcvcvcvcvcvc"
/* icon for state 70 */
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
/* #C Active forward-moving data */
/* icon for state 71 */
"....AAAAAAAAAAAAAAAAAAAAAAAAAA"
"......AABBBBBBBBBBBBBBBBBBBBAA"
"........AABBBBBBBBBBBBBBBBBBAA"
"........AABBBBBBBBBBBBBBBBBBAA"
"......AABBBBBBBBBBBBBBBBBBBBAA"
"....AABBBBBBBBBBBBBBBBBBBBBBAA"
"..AABBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"AABBBBBBBBBBBBBBBBBBBBBBBBBBAA"
"..AABBBBBBBBBBBBBBBBBBAAAABBAA"
"....AABBBBBBBBBBBBBBAA....AAAA"
"......AABBBBBBBBBBAA........AA"
"........AABBBBBBAA............"
"..........AAAAAA.............."
/* #C Active backward-moving data */
/* icon for state 72 */
"..............AAAAAA.........."
"............AAFFFFFFAA........"
"AA........AAFFFFFFFFFFAA......"
"AAAA....AAFFFFFFFFFFFFFFAA...."
"AAFFAAAAFFFFFFFFFFFFFFFFFFAA.."
"AAFFFFFFFFFFFFFFFFFFFFFFFFFFAA"
"AAFFFFFFFFFFFFFFFFFFFFFFFFFFAA"
"AAFFFFFFFFFFFFFFFFFFFFFFFFFFAA"
"AAFFFFFFFFFFFFFFFFFFFFFFFFAA.."
"AAFFFFFFFFFFFFFFFFFFFFFFAA...."
"AAFFFFFFFFFFFFFFFFFFFFAA......"
"AAFFFFFFFFFFFFFFFFFFAA........"
"AAFFFFFFFFFFFFFFFFFFAA........"
"AAFFFFFFFFFFFFFFFFFFFFAA......"
"AAAAAAAAAAAAAAAAAAAAAAAAAA...."
/* #C Darker "V" shape; delayed pointer */
/* icon for state 73 */
".............................."
"....DDDDDDDD......DDDDDDDD...."
"....DDDDDDDD......DDDDDDDD...."
"....DDDDDDDDDD..DDDDDDDDDD...."
"......DDDDDDDD..DDDDDDDD......"
"......DDDDDDDDDDDDDDDDDD......"
"........DDDDDDDDDDDDDD........"
"........DDDDDDDDDDDDDD........"
"..........DDDDDDDDDD.........."
"..........DDDDDDDDDD.........."
"............DDDDDD............"
"............DDDDDD............"
"..............DD.............."
".............................."
".............................."
/* #C Check mark ('yes', aka 'loop') */
/* icon for state 74 */
".............................."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBAABB.."
"..BBBBBBBBBBBBBBBBBBBBAAAABB.."
"..BBBBBBBBBBBBBBBBBBAAAAAABB.."
"..BBBBBBBBBBBBBBBBAAAAAABBBB.."
"..BBBBAABBBBBBBBAAAAAABBBBBB.."
"..BBBBAAAABBBBAAAAAABBBBBBBB.."
"..BBBBAAAAAAAAAAAABBBBBBBBBB.."
"..BBBBBBAAAAAAAABBBBBBBBBBBB.."
"..BBBBBBBBAAAABBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
".............................."
/* #C Check mark ('yes', aka 'loop') */
/* icon for state 75 */
".............................."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBAABB.."
"..BBBBBBBBBBBBBBBBBBBBAAAABB.."
"..BBBBBBBBBBBBBBBBBBAAAAAABB.."
"..BBBBBBBBBBBBBBBBAAAAAABBBB.."
"..BBBBAABBBBBBBBAAAAAABBBBBB.."
"..BBBBAAAABBBBAAAAAABBBBBBBB.."
"..BBBBAAAAAAAAAAAABBBBBBBBBB.."
"..BBBBBBAAAAAAAABBBBBBBBBBBB.."
"..BBBBBBBBAAAABBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
".............................."
/* #C Check mark ('yes', aka 'loop') */
/* icon for state 76 */
".............................."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBAABB.."
"..BBBBBBBBBBBBBBBBBBBBAAAABB.."
"..BBBBBBBBBBBBBBBBBBAAAAAABB.."
"..BBBBBBBBBBBBBBBBAAAAAABBBB.."
"..BBBBAABBBBBBBBAAAAAABBBBBB.."
"..BBBBAAAABBBBAAAAAABBBBBBBB.."
"..BBBBAAAAAAAAAAAABBBBBBBBBB.."
"..BBBBBBAAAAAAAABBBBBBBBBBBB.."
"..BBBBBBBBAAAABBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
"..BBBBBBBBBBBBBBBBBBBBBBBBBB.."
".............................."
/* #C X sign ('no', aka 'break') */
/* icon for state 77 */
".............................."
"..CCCCCCCCCCCCCCCCCCCCCCCCCC.."
"..CCAAAACCCCCCCCCCCCCCAAAACC.."
"..CCAAAAAACCCCCCCCCCAAAAAACC.."
"..CCCCAAAAAACCCCCCAAAAAACCCC.."
"..CCCCCCAAAAAACCAAAAAACCCCCC.."
"..CCCCCCCCAAAAAAAAAACCCCCCCC.."
"..CCCCCCCCCCAAAAAACCCCCCCCCC.."
"..CCCCCCCCAAAAAAAAAACCCCCCCC.."
"..CCCCCCAAAAAACCAAAAAACCCCCC.."
"..CCCCAAAAAACCCCCCAAAAAACCCC.."
"..CCAAAAAACCCCCCCCCCAAAAAACC.."
"..CCAAAACCCCCCCCCCCCCCAAAACC.."
"..CCCCCCCCCCCCCCCCCCCCCCCCCC.."
".............................."
/* #C X sign ('no', aka 'break') */
/* icon for state 78 */
".............................."
"..CCCCCCCCCCCCCCCCCCCCCCCCCC.."
"..CCAAAACCCCCCCCCCCCCCAAAACC.."
"..CCAAAAAACCCCCCCCCCAAAAAACC.."
"..CCCCAAAAAACCCCCCAAAAAACCCC.."
"..CCCCCCAAAAAACCAAAAAACCCCCC.."
"..CCCCCCCCAAAAAAAAAACCCCCCCC.."
"..CCCCCCCCCCAAAAAACCCCCCCCCC.."
"..CCCCCCCCAAAAAAAAAACCCCCCCC.."
"..CCCCCCAAAAAACCAAAAAACCCCCC.."
"..CCCCAAAAAACCCCCCAAAAAACCCC.."
"..CCAAAAAACCCCCCCCCCAAAAAACC.."
"..CCAAAACCCCCCCCCCCCCCAAAACC.."
"..CCCCCCCCCCCCCCCCCCCCCCCCCC.."
".............................."
/* #C X sign ('no', aka 'break') */
/* icon for state 79 */
".............................."
"..CCCCCCCCCCCCCCCCCCCCCCCCCC.."
"..CCAAAACCCCCCCCCCCCCCAAAACC.."
"..CCAAAAAACCCCCCCCCCAAAAAACC.."
"..CCCCAAAAAACCCCCCAAAAAACCCC.."
"..CCCCCCAAAAAACCAAAAAACCCCCC.."
"..CCCCCCCCAAAAAAAAAACCCCCCCC.."
"..CCCCCCCCCCAAAAAACCCCCCCCCC.."
"..CCCCCCCCAAAAAAAAAACCCCCCCC.."
"..CCCCCCAAAAAACCAAAAAACCCCCC.."
"..CCCCAAAAAACCCCCCAAAAAACCCC.."
"..CCAAAAAACCCCCCCCCCAAAAAACC.."
"..CCAAAACCCCCCCCCCCCCCAAAACC.."
"..CCCCCCCCCCCCCCCCCCCCCCCCCC.."
".............................."
/* #C empty space/shadow */
/* icon for state 80 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 81 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 82 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 83 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* icon for state 84 */
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
"_?_?_?_?_?_?_?_?_?_?_?_?_?_?_?"
/* icon for state 85 */
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
/* icon for state 86 */
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
""\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"
/* #C empty space/shadow */
/* icon for state 87 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 88 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C empty space/shadow */
/* icon for state 89 */
".............................."
"........AAAAAAAAAAAAAA........"
"....AAAAAADDDDDDDDDDAAAAAA...."
"....AADDDDDDDDDDDDDDDDDDAA...."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"..AADDDD......DD......DDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDDDDDD......DDDDDDDDAA.."
"..AADDDDDD..........DDDDDDAA.."
"..AADDDD......DD......DDDDAA.."
"..AAAADDDD..DDDDDD..DDDDAAAA.."
"....AADDDDDDDDDDDDDDDDDDAA...."
"....AAAAAADDDDDDDDDDAAAAAA...."
"........AAAAAAAAAAAAAA........"
".............................."
/* #C Digit zero */
/* icon for state 90 */
".............................."
"..........CCCCCCCCCC.........."
"........CCAAAAAAAAAACC........"
"......CCAAAAAAAAAAAAAACC......"
"......CCAAAACCCCCCAAAACC......"
"......CCAAAACCCCAAAAAACC......"
"......CCAAAACCAAAAAAAACC......"
"......CCAAAAAAAAAAAAAACC......"
"......CCAAAAAAAACCAAAACC......"
"......CCAAAAAACCCCAAAACC......"
"......CCAAAACCCCCCAAAACC......"
"......CCAAAAAAAAAAAAAACC......"
"........CCAAAAAAAAAACC........"
"..........CCCCCCCCCC.........."
".............................."
/* icon for state 91 */
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
"rerererererererererererererere"
/* #C Digit zero */
/* icon for state 92 */
".............................."
"..........CCCCCCCCCC.........."
"........CCAAAAAAAAAACC........"
"......CCAAAAAAAAAAAAAACC......"
"......CCAAAACCCCCCAAAACC......"
"......CCAAAACCCCAAAAAACC......"
"......CCAAAACCAAAAAAAACC......"
"......CCAAAAAAAAAAAAAACC......"
"......CCAAAAAAAACCAAAACC......"
"......CCAAAAAACCCCAAAACC......"
"......CCAAAACCCCCCAAAACC......"
"......CCAAAAAAAAAAAAAACC......"
"........CCAAAAAAAAAACC........"
"..........CCCCCCCCCC.........."
".............................."
/* icon for state 93 */
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
"/7/7/7/7/7/7/7/7/7/7/7/7/7/7/7"
/* #C Darker "V" shape; delayed pointer */
/* icon for state 94 */
".............................."
"....DDDDDDDD......DDDDDDDD...."
"....DDDDDDDD......DDDDDDDD...."
"....DDDDDDDDDD..DDDDDDDDDD...."
"......DDDDDDDD..DDDDDDDD......"
"......DDDDDDDDDDDDDDDDDD......"
"........DDDDDDDDDDDDDD........"
"........DDDDDDDDDDDDDD........"
"..........DDDDDDDDDD.........."
"..........DDDDDDDDDD.........."
"............DDDDDD............"
"............DDDDDD............"
"..............DD.............."
".............................."
".............................."
/* #C "V" shape; instruction pointer */
/* icon for state 95 */
".............................."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAA......AAAAAAAA...."
"....AAAAAAAAAA..AAAAAAAAAA...."
"......AAAAAAAA..AAAAAAAA......"
"......AAAAAAAAAAAAAAAAAA......"
"........AAAAAAAAAAAAAA........"
"........AAAAAAAAAAAAAA........"
"..........AAAAAAAAAA.........."
"..........AAAAAAAAAA.........."
"............AAAAAA............"
"............AAAAAA............"
"..............AA.............."
".............................."
".............................."
/* icon for state 96 */
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
# Python 3.5 or above
# Check the `if __name__ == '__main__'` at the bottom for how to run this from command
# line -- or, alternatively, run it without arguments and just follow the input prompts
# (the 'numeric' flag is to determine whether an input of, say, '1,20' should be
# understood as `[1, 20]` or as `[ord('1'), ord(','), ord('2'), ord('0')]`)
import sys
import itertools
SYMBOLS = {
'+': 'A',
'-': 'B',
']': 'C',
'[': 'D',
'>': 'F',
'<': 'E',
'.': 'G',
',': 'H',
}
def _encode(seqs):
"""
Encode given string into Golly-compatible RLE.
"""
ret = '$'.join(
''.join(
'{}{}'.format(len(s), s[0]) if len(s) > 1 else ''.join(s)
for s in (
list(g)
for _, g in itertools.groupby(s)
)
)
for s in seqs
)
return _encode([ret]) if '$$' in ret else ret.rstrip('$23456789') + '!'
def _offset(n):
while n >= 0:
n -= 1
yield n
def convert(prgm, data=None, inp=None):
inp, data = inp[::-1] or [], data or []
prgm = list(map(SYMBOLS.get, filter(SYMBOLS.__contains__, prgm)))
inp = [j for i in inp for j in (['rS']*i or ['rT']) + ['rU']][:-1] + ['rM'] # rS: 91, rT: 92, rU: 93, rM: 85
pad = ['.'] * (1 + len(inp)) # + 1 because the input tape ends one cell east of (one cell before) data-tape cell 0
offset = _offset(max(data) if data else 0)
data = [
[*pad, *['.']*off, *i]
for off, i in
zip(offset, list(itertools.zip_longest(*map(['qR'].__mul__, data), fillvalue='.'))[::-1]) # qR: 66
]
# header = 'x = {}, y = {}, rule = bf'.format(..., len(data) + 5)
# ...but we actually don't need to bother calculating dimensions for Golly!
header = 'x = 0, y = 0, rule = bf'
rle = [
*data,
pad + ['qJ'], # Data pointer
pad + ['.', '.', 'pR'], # Shadow cell
inp,
pad + ['.', '.', 'I'], # Program-tape pointer
pad + ['.', '.', '.'] + prgm # Program tape
]
return '{}\n{}'.format(header, _encode(rle))
if __name__ == '__main__':
if sys.argv[1:]:
numeric = '--numeric' in sys.argv or '-n' in sys.argv
argv = [i for i in sys.argv[1:] if i not in ('--numeric', '-n')]
prgm, inp, data, *_ = argv + ['', '', ''][len(argv):]
else:
numeric = False
prgm, inp, data = input('Program tape: '), input('Input tape: '), input('Initial data-tape configuration: ')
if (inp or data) and all(seq.replace(',', '').isdigit() or not seq for seq in (inp, data)):
numeric = input(
'\nWere your data tape & input tape just sequences of Unicode/ASCII characters (c), or numeric values delimited by commas (n)?\nRespond c/n: '
).lower().startswith('n')
if numeric:
inp, data = list(map(int, inp.split(','))), list(map(int, data.split(',')))
else:
inp, data = list(map(ord, inp)), list(map(ord, data))
print('', convert(prgm, data, inp), sep='\n')
@NUTSHELL bf
Brainfuck.
: + {Plus}
: - {Minus}
: ] {RBrack}
: [ {LBrack}
: < {LAngle}
: > {RAngle}
: . {Dot}
: , {Comma}
: Plain pointer {Pointer}
: Pointer + {PointerPlus}
: Pointer - {PointerMinus}
: Pointer [ {PointerRBrack}
: Pointer < {PointerLAngle}
: Pointer > {PointerRAngle}
: Pointer . {PointerDot}
: Pointer , {PointerComma}
: Westbound backtracking pointer {WestPointer}
: Northbound no-op {NorthNOP}
: Northbound + {NorthPlus}
: Northbound - {NorthMinus}
: Northbound ] {NorthRBrack}
: Northbound < {NorthLAngle}
: Northbound > {NorthRAngle}
: Northbound . {NorthDot}
: Northbound , {NorthComma}
: Westbound + {WestPlus}
: Westbound - {WestMinus}
: Westbound ] {WestRBrack}
: Westbound < {WestLAngle}
: Westbound > {WestRAngle}
: Westbound . {WestDot}
: Westbound , {WestComma}
: Eastbound + {EastPlus}
: Eastbound - {EastMinus}
: Eastbound ] {EastRBrack}
: Eastbound < {EastLAngle}
: Eastbound > {EastRAngle}
: Eastbound . {EastDot}
: Eastbound , {EastComma}
: Southbound , {SouthComma}
: Eastward-pointing shadow cell {EastShadow}
: Westward-pointing shadow cell {WestShadow}
: Westbound shadow + {WestShadowPlus}
: Westbound shadow - {WestShadowMinus}
: Westbound shadow ] {WestShadowRBrack}
: Westbound shadow < {WestShadowLAngle}
: Westbound shadow > {WestShadowRAngle}
: Westbound shadow . {WestShadowDot}
: Westbound shadow , {WestShadowComma}
: Eastbound shadow + {EastShadowPlus}
: Eastbound shadow - {EastShadowMinus}
: Eastbound shadow ] {EastShadowRBrack}
: Eastbound shadow < {EastShadowLAngle}
: Eastbound shadow > {EastShadowRAngle}
: Eastbound shadow . {EastShadowDot}
: Eastbound shadow , {EastShadowComma}
: Pointer delay state {DelayedPointer}
: Data pointer {DataPointer}
: Data-pointer + {DataPointerPlus} == "data-output prompter"
: Data-pointer - {DataPointerMinus}
: Data-pointer ] {DataPointerRBrack}
: Data-pointer < {DataPointerLAngle}
: Data-pointer > {DataPointerRAngle}
: Data-pointer . {DataPointerDot}
: Data-pointer , {DataPointerComma}
: {Data} Data
: {DataOut} Data turned output signal; reverts to data on next generation
: {FinalDataOut} Data-born output signal that will not extend westward anymore
: {ZeroOut} Vacuum turned output signal; reverts to vacuum on next
: {FinalZeroOut} Vacuum-born output signal that will not extend westward anymore
: {DataPlus} Plus sign (incrementor) moving through data
: {DataMinus} Minus sign (decrementor) moving through data
: Second pointer delay state {DelayedPointer2} (down here b/c poor planning lol)
: eastbound YES signal {EastLoop} (not 0, keep looping) from data pointer after testing for r-bracket
: westbound YES signal {WestLoop}
: southbound YES signal {SouthLoop}
: eastbound NO signal {EastBreak} (is 0, continue)
: westbound NO signal {WestBreak}
: southbound NO signal {SouthBreak}
: west shadow holding southbound NO {WestShadowBreak}
: west shadow holding southbound YES {WestShadowLoop}
: east shadow holding southound NO {EastShadowBreak}
: east shadow holding southbound YES {EastShadowLoop}
: Input {NorthInput}
: Input head {InputHead}, which covers the input tape & directs input toward the data pointer
: Input traveling east {EastInput}
: misc state {Blank1}
: misc state {Blank2}
: eastbound misc state {BlankEast}
: blank input {Input0}
: {FreshInput} "Uninitialized" input data; this is only here for ease of storage in RLE format,
because otherwise the vertical input tape is very unfriendly to Golly. It moves diagonally to
the southeast until there’s something above it
: {FreshInput0} Uninitialized \x00 input, same as above
: {FreshInputHead} Uninitialized input head, same as above
: Yet another pointer delay state just to absolutely be sure of no timing conflicts {DelayedPointer3}
: Loop-skipping pointer {PointerSkip} (opposite of WestPointer)
+ To use:
Start with this template.
x = 5, y = 4, rule = bf
2.qJ$4.pR$rM$4.I!
- Enter a BF program from left to right, using cellstates 1-8, starting in the dead cell immediately southeast of
the bottommost live one.
- Initialize data as diagonal, northwest-leaning unary stacks of state-66 cells, starting each stack in the row
immediately above the topmost live cell.
- Initialize input as vertically-stacked vertical stacks of state-84 cells, starting in and going south from the
cell immediately below the westmost live one and with individual inputs delimited by state-85 cells.
An input of \x00 can be represented using a single state-90 cell in lieu of the state-84 ones.
- (Alternatively, should you wish to make your program friendlier to RLE encoding, you may initialize input as
horizontal (west-pointing) stacks of state-91 cells, delimited by state-93 cells and using state 92 for \x00;
the input tape will right itself automatically once the simulation starts.)
+ An example:
x = 19, y = 5, rule = bf
4.qJ$6.pR$2rSrM$6.I$7.H2DF2AEBCFGC!
@TABLE
anyPrgm = (Plus..Comma)
prgm = anyPrgm - (LBrack, RBrack)
vac = (0, anyPrgm)
northbound = (NorthPlus..NorthComma)
northboundNOP = (northbound, NorthNOP)
pointerOps = (PointerPlus..PointerComma) - PointerRBrack
northboundOps = northbound - NorthRBrack
westbound = (WestPlus..WestComma)
eastbound = (EastPlus..EastComma)
westshadows = (WestShadowPlus..WestShadowComma, WestShadow)
eastshadows = (EastShadowPlus..EastShadowComma, EastShadow)
datapointers = (DataPointerPlus..DataPointerComma)
vacdata = (0, Data)
data = (Data..DataMinus)
# Move uninitialized input data into proper position
(FreshInput, FreshInput0, FreshInputHead), E live, SE..NE any; 0 -> SE[0]
(FreshInput, FreshInput0, FreshInputHead), N live, NE..NW any; [0: (NorthInput, Input0, InputHead)]
#########################################################
##### INITIAL TELESCOPING OF BRACKET-ENCLOSED STUFF #####
#########################################################
# move program cell down if it has a closing bracket to its east
(prgm, RBrack), E RBrack, SE..NW vac, N..NE 0; 0 -> S[0]
# move program cell down if the cell to its east is below it
(prgm, RBrack), SE anyPrgm, S..E vac; 0 -> S[0]
## (NOTE: The above two groups aren't even necessary but symmetry finishes sooner) ##
# move program cell down if it has an opening bracket to its west
(prgm, LBrack), W LBrack, any, 0, NE..SW vac; 0 -> S[0]
# move program cell down if the cell to its west is below it
(prgm, LBrack), SW anyPrgm, W..S vac; 0 -> S[0]
# special-casing for ][, but could probably be handled above
LBrack, E..SE vac, S 0, SW RBrack, W..NE 0; 0 -> S:LBrack
RBrack, SE LBrack, 0, vac, vac, NW..E 0; 0 -> S:RBrack
# if a bracket has nothing in its mouth, assume it needs to travel south
# to catch up to a different level
# In the same vein, spawn a bracket if there's an empty cell between a bracket (N) and
# a prgm tape bit (SW/SE)
LBrack, N..SW 0, W vac, NW vac; 0 -> S:LBrack
RBrack, NE..E vac, SE..N 0; 0 -> S:RBrack
# if the above happens, move the now-hanging-one-lvl-too-high prgm-tape data south
prgm, E prgm, 0, 0, SW RBrack, 0, NW..NE 0; 0 -> S[0] # ]x
prgm, SE LBrack, 0, 0, W prgm, NW..E 0; 0 -> S[0] # x[
################
##### Data #####
################
### Data-pointer transformations ###
DataPointer, W eastbound, NW..SW any; [W: datapointers]
DataPointer, E westbound, SE..NE any; [E: datapointers]
# If a loaded shadow is directly below data pointer, pretend it's the same as a signal
DataPointer, S (westshadows-WestShadow, eastshadows-EastShadow), SW..SE any; [S: datapointers*2]
DataPointerMinus, N..NW any; DataPointer -> N:DataMinus
DataPointerPlus, N..NW (Data, any-Data); DataPointer -> N[(DataPlus, Data, ...)]
(DataPointerRAngle, DataPointerLAngle), N..NW any; 0 -> E[0: (DataPointer, _)] W[0: (_, DataPointer)]
# Test to see whether there is data above the data pointer -- if yes, send back a LOOP signal ('keep looping'), and if no, send a BREAK ('stop looping')
DataPointerRBrack, N 0, NE..SE any, S (0, WestShadow, EastShadow), SW..NW any; DataPointer -> W[S: (_, WestShadowBreak, EastShadowBreak)]
DataPointerRBrack, N live, NE..SE any, S (0, WestShadow, EastShadow), SW..NW any; DataPointer -> W[S: (_, WestShadowLoop, EastShadowLoop)]
# we can't send a signal from north to south directly (would exceed lightspeed) so we put it to the west first as a two-step sort of thing; this does delay things by one gen however
(WestShadow, EastShadow), NW (WestShadowBreak, EastShadowBreak, WestShadowLoop, EastShadowLoop), N DataPointer, NE..W any; [NW] -> NW:0 W:0
# continue on
WestRBrack, W DataPointer, NW (0, data), N..SW any; [NW: (EastBreak, EastLoop, ...)]
EastRBrack, NE (0, data), E DataPointer, SE..N any; [NE: (WestBreak, WestLoop, ...)]
# Reroute west-/eastbound yes/no signals to the south because we need to get them to the program-tape pointer
# ((not relevant at all but i am so proud of how nutshell just takes this and spits out a working translation with no issue))
(WestShadow, EastShadow), N (WestBreak, EastBreak, WestLoop, EastLoop), NE..NW any; [N: (WestShadowBreak, EastShadowBreak, WestShadowLoop, EastShadowLoop)] -> N:0 NW[N: (0, _, 0, _)] NE[N: (_, 0, _, 0)]
(WestShadowBreak, EastShadowBreak, WestShadowLoop, EastShadowLoop), N..NW any; [0: (EastShadow, WestShadow, EastShadow, WestShadow)] -> S[0: (SouthBreak, SouthBreak, SouthLoop, ...)]
# Finally, the r-brack receives the southbound yes/no signal from above
# If it's BREAK ('yes'), delete the waiting pointer and move it up to where it can continue traveling
# if it's LOOP ('no'), turn the waiting pointer into a westbound one to send it back to the appropriate l-brack
RBrack, N (SouthBreak, SouthLoop), NE..NW any; [0] -> N[(PointerRBrack, 0)] W[N: (0, WestPointer)]
any, SW LBrack, W Blank1, NW..S any; NorthRBrack -> W:Blank2
WestPointer, W LBrack, NW..SE any, S (LBrack, prgm), SW any; [S: (Blank1, pointerOps)] -> W:LBrack
WestPointer, N..NW any; 0 -> W:WestPointer N:NorthNOP
(WestBreak, WestLoop), N..NW any; 0 -> W[0]
(EastBreak, EastLoop), N..NW any; 0 -> E[0]
# Input
# make the comma signal stay put so the data pointer knows where to send the go-poll-for-input request (to have it reach the shadow cell)
WestComma, E 0, SE..SW any, W DataPointer, NW..NE any; Blank1 # just need a random nonmoving state
EastComma, E DataPointer, SE..SW any, W 0, NW..NE any; Blank2 # just need a random nonmoving state
# when input is requested, get the data pointer to zero the current cell,
DataPointerComma, N Data, NE..NW any; [0] -> N:DataMinus
DataPointerComma, N 0, NE..NW any; DataPointer # blank cell's cue
# then once done tell the shadow cell to go poll for input
## if nothing to south, send it in appropriate direction
Blank1, W DataPointer, NW 0, N..S any, SW 0; 0 -> S:EastComma
Blank2, NE 0, E DataPointer, SE 0, S..N any; 0 -> S:WestComma
## elif shadow cell to south, stay put and do something stupid to give it the signal regardless
#### (this could be merged into the above transition but I'm lazy)
DataPointerComma, N 0, NE..SE any, S (WestShadow, EastShadow), SW..NW any; DataPointer -> SW:EastComma
# Also have these misc cells not destroy the shadow if it's to their south
(Blank1, Blank2), S WestShadow, SW..SE any; 0 -> S:WestShadow SW:EastComma
(Blank1, Blank2), S EastShadow, SW..SE any; 0 -> S:EastShadow SW:EastComma
## shadow cell receiving go-poll-for-input signal: (none of those commas would ever appear above it otherwise so we can always assume this'll be the cause)
## on receiving the signal it stays put and sends a comma to the west to ask the input-tape head for its stuff
(EastShadow, WestShadow), N..NE any, E WestComma, SE..SW any, W 0, any; [0] -> S:WestComma
(EastShadow, WestShadow), N..NE any, E 0, SE..SW any, W EastComma, any; [0] -> S:WestComma
# Input head doubles as data delimiter so have it move east appropriately to move data with
InputHead, N 0, NE NorthInput, E..NW any; 0 -> N:InputHead # if it's the next up
0, (NorthInput, Input0), NE..SE any, InputHead, SW..NW any; InputHead # if it's farther down
InputHead, N InputHead, NE..NW any; 0
# Input head is otherwise invincible
InputHead, N..NW any; [0]
# When the west comma finds the input head,
# move the comma down one to let the input (if any) know it's there
InputHead, NE WestComma, E..N any; [0] -> N:0 E:WestComma
Input0, NE WestComma, E..N any; InputHead
# Move input up and then send it back to the shadow cell
NorthInput, NE (WestComma, NorthInput), E..SE any, S..N any; 0 -> E:NorthInput
NorthInput, W InputHead, NW..SW any; 0 -> N:EastInput
(NorthInput, Input0), N..SE 0, S any, SW..NW any; 0 -> N[0]
# When shadow cell receives eastbound input, relay it as an "inc" signal
DataPointer, S (WestShadow, EastShadow), SW EastInput, W..SE any; DataPointerPlus
(EastShadow, WestShadow), W EastInput, NW..SW any; [0] -> N[0: (EastPlus, WestPlus)]
# When it receives the "we're done" signal, restore the program-tape pointer & send it on its way
(EastShadow, WestShadow), W BlankEast, NW..SW any; [0] -> S:SouthComma
0, W Blank1, NW SouthComma, N..SE any, S LBrack, SW Comma; Blank2 -> W:NorthRBrack # emulate l-brack test from below
Blank1, N SouthComma, NE any, E (RBrack, prgm, 0), SE..NW vac; Pointer -> NE[E: (NorthRBrack, _, ...)]
# Also move eastbound input eastward
EastInput, N..NW any; 0 -> E:EastInput
# Send a "we're done" signal when there's no data or none left
InputHead, E (WestComma, NorthInput), SE..NE any; [0] -> SE:Blank1
# Move "we're done" signal
Blank1, W 0, NW InputHead, N..SW any; 0 -> N:Blank1
Blank1, W InputHead, NW 0, N..SW any; 0 -> N:BlankEast
BlankEast, N..NW any; 0 -> E:BlankEast
### Actual handling of data ###
DataPointerDot, N..NW any; DataPointer -> N[(0, _, ...)] # don't output if there's nothing to output
# Output
Data, S DataPointerDot, SW..SE any; DataOut
vacdata, E 0, SE any, S (ZeroOut, DataOut), SW..NE any; [0: (FinalZeroOut, FinalDataOut)]
(FinalZeroOut, FinalDataOut), N..NW (vacdata, any-vacdata); [0: vacdata] -> N[(FinalZeroOut, FinalDataOut, _, ...)]
DataOut, N..NW (vacdata, any-vacdata); Data -> N[(ZeroOut, DataOut, _, ...)]
(ZeroOut, DataOut), N..NW (vacdata, any-vacdata); [0: vacdata] -> N[(ZeroOut, DataOut, _, ...)] NE[(_, DataOut, _, ...)]
# inc/dec instructions
Data, SW DataMinus, W..S any; [NE: (0, DataMinus, ...)]
vacdata, SW DataPlus, W..S any; [0: (Data, DataPlus)]
0, SW DataPlus, W..S any; [NE: (Data, DataPlus, ...)]
DataMinus, SW 0, W..S any; [NE: (0, Data, ...)]
DataMinus, NE 0, E..N any; 0
(DataPlus, DataMinus), N..NW any; Data
#######################
##### SHADOW CELL #####
#######################
# If shadow is touching data pointer, flip direction before moving to it
EastShadow, NW DataPointer, N..W any; WestShadow
WestShadow, NE DataPointer, E..N any; EastShadow
eastshadows, SE northboundNOP, S..NW any, N DataPointer, NE..E any; 0 -> E[SE: westshadows]
westshadows, SW northboundNOP, W..NW any, N DataPointer, NE..S any; 0 -> W[SW: eastshadows]
# If a northbound cell is coming at shadow from a corner, move toward it & load self with it
eastshadows, SW northboundNOP, W..S any; 0 -> W[SW: eastshadows]
westshadows, SW northboundNOP, W..S any; 0 -> W[SW: westshadows]
eastshadows, SE northboundNOP, S..E any; 0 -> E[SE: eastshadows]
westshadows, SE northboundNOP, S..E any; 0 -> E[SE: westshadows]
# If it's coming from right below, just load without moving
eastshadows, S northboundNOP, SW..SE any; [S: eastshadows]
westshadows, S northboundNOP, SW..SE any; [S: westshadows]
# A "loaded" shadow cell turns into a normal one and releases its signal
eastshadows, N..NW any; EastShadow -> N[0: (eastbound, _)]
westshadows, N..NW any; WestShadow -> N[0: (westbound, _)]
# override northbound-signal transitions from ptr-movement section
(EastShadow, WestShadow), N..NW any; [0]
############################
##### Pointer MOVEMENT #####
############################
# Stop moving after reaching a comma or l-brack
PointerComma, E (RBrack, vac), SE..NE any; Blank1 -> NE:0 # just needs a random non-moving state, so blank_1 works
## l-brack test stuff
(Pointer, pointerOps), SE LBrack, S anyPrgm-Comma, SW..E any; NorthRBrack -> E:Blank2 # send out a test signal
NorthRBrack, N northbound, NE..NW any; Blank1 -> N:0
(Blank1, Blank2), E Blank2, SE..NE any; [0: (Blank2, NorthRBrack)]
### for most cases:
Blank2, NW (SouthLoop, SouthBreak), N..SE any, S LBrack, SW..W any; [NW: (Pointer, PointerSkip)] -> W:0 N:NorthNOP
### and for when it's on an l-brack that's right after a first l-brack:
Blank2, N (SouthLoop, SouthBreak), NE..SE any, S LBrack, SW..NW any; [N: (Pointer, PointerSkip)]
### and one more edge case:
Blank2, NE (SouthLoop, SouthBreak), E..SE any, S LBrack, SW..N any; [NE: (Pointer, PointerSkip)] -> E:0
## keep moving eastward till pointer_skip finds an r-brack
PointerSkip, SE (RBrack, 0), S..E any; 0 -> E[SE: (Pointer, PointerSkip, ...)] NE:NorthNOP
# Also don't put out north-bound signals after hitting r-brack
pointerOps, N..NE any, E RBrack, SE..NW any; Pointer -> NE:NorthRBrack
# But elsewhere do so as normal
(Pointer, pointerOps), any, 0, vac, SE (LBrack, prgm), S..SW vac, (LBrack, vac), any; DelayedPointer -> N[0: (_, northboundOps)]
DelayedPointer, N..NW any; DelayedPointer2
DelayedPointer2, N..NW any; DelayedPointer3 # need 3 delay states to give data pointer breathing room from both sides
DelayedPointer3, any, 0, vac, SE (LBrack, prgm), S..SW vac, (LBrack, vac), any; 0 -> E[SE: (Pointer, pointerOps)]
LBrack, N Pointer, NE..E 0, SE (LBrack, prgm), S..NW any; LBrack -> N:NorthNOP E[SE: (Blank2, pointerOps)]
0, S Blank2, SW LBrack, W NorthNOP, NW..SE 0; NorthRBrack
0, S NorthRBrack, SW 0, W NorthNOP, NW..SE any; NorthRBrack -> S:0
# Replicate the above NE-output behavior if a bare pointer is on top of an RBrack with another to its east
# (this needs a special case; nothing happens otherwise)
PointerRBrack, E (RBrack, any), SE..NE any; Pointer -> NE[E: (NorthRBrack, _, ...)]
# Make north_r_brack wait 4 generations before going up to absolutely make sure it won't collide badly with the data pointer
NorthRBrack, W northbound, NW..SW any; [0] -> N:0
NorthRBrack, NW northbound, N..W any; Blank1 -> N:0 # random non-interfering state (any would do)
Blank1, S RBrack, SW..SE any; RBrack
RBrack, S RBrack, SW..SE any; NorthRBrack
# Move signals
(NorthRBrack, northboundNOP), N..NW any; 0 => N[0]
(WestRBrack, westbound), N..NW any; 0 => W[0]
(EastRBrack, eastbound), N..NW any; 0 => E[0]
(SouthComma, SouthBreak, SouthLoop), N..NW any; 0 -> S[0]
# Pointer stops after reaching end
(Pointer, PointerRBrack, pointerOps), E..SE 0, S anyPrgm-LBrack, SW..NE any; 0 -> E:Pointer
# ...with some edge-case handling
Pointer, E Pointer, SE 0, S RBrack, SW..NE any; 0 # avoid double pointer if r-brack is the last character
Pointer, W Blank1, NW..S 0, SW any; 0 # avoid punching through the prgm tape if comma is the last character
@COLORS
000: 0
FFF: FinalZeroOut
FF0: InputHead, FreshInputHead
@ICONS
? 0FF .. FFF
0: 000
1: FFF
2: 0A0
3: C00
4: 666
5: CB0
6: 0AF
#C empty space/shadow
#C NorthNOP, EastShadow..EastShadowComma, WestShadowBreak..EastShadowLoop, Blank1..BlankEast
x = 13, y = 13, rule = bf
3.7A$.3A5D3A$.A9DA$2A2D.3D.2D2A$A2D3.D3.2DA$A3D5.3DA$A4D3.4DA$A3D5.3D
A$A2D3.D3.2DA$2A2D.3D.2D2A$.A9DA$.3A5D3A$3.7A!
#C Left bracket
#C LBrack
x = 9, y = 15, rule = bf
2.7D$.8D$3D4A2D$2D5A2D$2D2A5D$2D2A5D$2D2A2D$2D2A2D$2D2A2D$2D2A5D$2D2A
5D$2D5A2D$3D4A2D$.8D$2.7D!
#C Right bracket
#C RBrack, NorthRBrack, WestRBrack, EastRBrack
x = 9, y = 15, rule = bf
7D$8D$2D4A3D$2D5A2D$5D2A2D$5D2A2D$3.2D2A2D$3.2D2A2D$3.2D2A2D$5D2A2D$
5D2A2D$2D5A2D$2D4A3D$8D$7D!
#C Plus sign
#C Plus, NorthPlus, WestPlus, EastPlus
x = 15, y = 15, rule = bf
5.5D$4.7D$4.2D3A2D$4.2D3A2D$.5D3A5D$6D3A6D$2D11A2D$2D11A2D$2D11A2D$6D
3A6D$.5D3A5D$4.2D3A2D$4.2D3A2D$4.7D$5.5D!
#C Minus sign
#C Minus, NorthMinus, WestMinus, EastMinus
x = 15, y = 7, rule = bf
.13D$15D$2D11A2D$2D11A2D$2D11A2D$15D$.13D!
#C Left angle bracket
#C LAngle, NorthLAngle, WestLAngle, EastLAngle
x = 15, y = 13, rule = bf
10.5D$8.7D$6.5D2A2D$4.5D4A2D$2.5D4A4D$5D4A6D$3D4A6D$5D4A6D$2.5D4A4D$
4.5D4A2D$6.5D2A2D$8.7D$10.5D!
#C Right angle bracket
#C RAngle, NorthRAngle, WestRAngle, EastRAngle
x = 15, y = 13, rule = bf
5D$7D$2D2A5D$2D4A5D$4D4A5D$6D4A5D$2.6D4A3D$6D4A5D$4D4A5D$2D4A5D$2D2A
5D$7D$5D!
#C Comma
#C Comma, NorthComma, WestComma, EastComma, SouthComma
x = 13, y = 15, rule = bf
2.9D$.11D$3D7A3D$2D9A2D$2D9A2D$2D9A2D$2D9A2D$2D9A2D$3D8A2D$.6D4A2D$3.
4D4A2D$.5D4A3D$.2D6A4D$.11D$2.9D!
#C Period
#C Dot, NorthDot, WestDot, EastDot
x = 13, y = 13, rule = bf
4.5D$2.9D$.4D3A4D$.2D7A2D$3D7A3D$2D9A2D$2D9A2D$2D9A2D$3D7A3D$.2D7A2D$
.4D3A4D$2.9D$4.5D!
#C "V" shape; instruction pointer
#C Pointer..WestPointer, PointerSkip
x = 11, y = 12, rule = bf
4A3.4A$4A3.4A$5A.5A$.4A.4A$.9A$2.7A$2.7A$3.5A$3.5A$4.3A$4.3A$5.A!
#C Darker "V" shape; delayed pointer
#C DelayedPointer, DelayedPointer2, DelayedPointer3
x = 11, y = 12, rule = bf
4D3.4D$4D3.4D$5D.5D$.4D.4D$.9D$2.7D$2.7D$3.5D$3.5D$4.3D$4.3D$5.D!
#C Data pointer
#C DataPointer..DataPointerComma
x = 11, y = 11, rule = bf
4.3E$4.3E$3.5E$3.5E$2.7E$2.7E$.9E$.4E.4E$5E.5E$4E3.4E$4E3.4E!
#C Inert data
#C Data
x = 13, y = 13, rule = bf
7.4E$6.6E$5.8E$4.9E$3.10E$2.11E$.11E$11E$10E$9E$8E$.6E$2.4E!
#C Active forward-moving data
#C DataOut, FinalDataOut, DataPlus
x = 15, y = 15, rule = bf
2.13A$3.A10BA$4.A9BA$4.A9BA$3.A10BA$2.A11BA$.A12BA$A13BA$A13BA$A13BA$
.A9B2ABA$2.A7BA2.2A$3.A5BA4.A$4.A3BA$5.3A!
#C Active backward-moving data
#C DataMinus
x = 15, y = 15, rule = bf
7.3A$6.A3FA$A4.A5FA$2A2.A7FA$AF2A9FA$A13FA$A13FA$A13FA$A12FA$A11FA$A
10FA$A9FA$A9FA$A10FA$13A!
#C Check mark ('yes', aka 'loop')
#C EastLoop..SouthLoop
x = 13, y = 13, rule = bf
13B$13B$11BAB$10B2AB$9B3AB$8B3A2B$2BA4B3A3B$2B2A2B3A4B$2B6A5B$3B4A6B$
4B2A7B$13B$13B!
#C X sign ('no', aka 'break')
#C EastBreak..SouthBreak
x = 13, y = 13, rule = bf
13C$C2A7C2AC$C3A5C3AC$2C3A3C3A2C$3C3AC3A3C$4C5A4C$5C3A5C$4C5A4C$3C3AC
3A3C$2C3A3C3A2C$C3A5C3AC$C2A7C2AC$13C!
#C Digit zero
#C Input0, FreshInput0
x = 9, y = 13, rule = bf
2.5C$.C5AC$C7AC$C2A3C2AC$C2A2C3AC$C2AC4AC$C7AC$C4AC2AC$C3A2C2AC$C2A3C
2AC$C7AC$.C5AC$2.5C!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.