Codon-based Cellular Automaton

For discussion of other cellular automata.
Post Reply
User avatar
PHPBB12345
Posts: 1150
Joined: August 5th, 2015, 11:55 pm
Contact:

Codon-based Cellular Automaton

Post by PHPBB12345 »

https://git123hub.github.io/multistate- ... 70123.html
sqrt(t) growth:

Code: Select all

-ra20cf-0d04ke-0d05b-0e057t47t47t47t47t47t47t47t47t47t47t47t47z60575s075s075s075s075s075s075s075s075s075s075s075s07z60575s075s075s075s075s075s075s075s075s075s075s075s07z6054k474k074k074k474k474k474k074k474k074k074k474k074k47z3050707070707070707070707070707070707070707070707070707z3050k070k070k070k070k070k470k470k470k070k470k070k470k07z3050707070707070707070707070707070707070707070707070707z3050k070k070k070k070k070k470k470k470k470k070k470k070k47z3050707070707070707070707070707070707070707070707070707z3050k070k070k470k470k470k470k070k470k070k070k070k470k47z3050707070707070707070707070707070707070707070707070707z3050k070k470k470k470k470k470k470k070k070k470k470k470k47z3050707070707070707070707070707070707070707070707070707z3050k470k070k070k070k470k470k070k070k470k070k470k470k47z3050707070707070707070707070707070707070707070707070707z3050k070k070k070k070k470k070k070k070k070k070k470k070k07z305t07t07t07t07t07t07t07t07t07t07t07t07t07z305t0wv47z305wz6
Golly's RLE format:

Code: Select all

x = 53, y = 22, rule = Codon170123
.LO$DTN$EK$EG3DG3DG3DG3DG3DG3DG3DG3DG3DG3DG3DG3DG$EGE2.GE2.GE2.GE2.GE
2.GE2.GE2.GE2.GE2.GE2.GE2.GE2.G$EGE2.GE2.GE2.GE2.GE2.GE2.GE2.GE2.GE2.
GE2.GE2.GE2.G$EDTDGDT.GDT.GDTDGDTDGDTDGDT.GDTDGDT.GDT.GDTDGDT.GDTDG$E
.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G$E.T.G.T.G.T.G.T.
G.T.G.TDG.TDG.TDG.T.G.TDG.T.G.TDG.T.G$E.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G
.G.G.G.G.G.G.G.G.G.G.G$E.T.G.T.G.T.G.T.G.T.G.TDG.TDG.TDG.TDG.T.G.TDG.
T.G.TDG$E.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G$E.T.G.T
.G.TDG.TDG.TDG.TDG.T.G.TDG.T.G.T.G.T.G.TDG.TDG$E.G.G.G.G.G.G.G.G.G.G.
G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G$E.T.G.TDG.TDG.TDG.TDG.TDG.TDG.T.G.T.G
.TDG.TDG.TDG.TDG$E.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.
G$E.TDG.T.G.T.G.T.G.TDG.TDG.T.G.T.G.TDG.T.G.TDG.TDG.TDG$E.G.G.G.G.G.G
.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G$E.T.G.T.G.T.G.T.G.TDG.T.G.T.
G.T.G.T.G.T.G.TDG.T.G.T.G$E3.G3.G3.G3.G3.G3.G3.G3.G3.G3.G3.G3.G3.G$E
3.48DG$E52F!

@RULE Codon170123

@TABLE
n_states:64
neighborhood:vonNeumann
symmetries:none

var a0={0,1,2,3}
var f0={ 8,16}
var g0={ 9,17}
var h0={10,18}
var i0={11,19}
var j0={4,5,6,7,8,9,10,11}
var k0={12,13,14,15,16,17,18,19}
var l0={20,21,22,23,24,25,26,27}
var m0={j0,l0}
var n0={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}
var o0={ 8,21,23,26,27}
var o1={ 9,22,23,26,27}
var o2={10,21,23,26,27}
var o3={11,22,23,26,27}
var o4={16,21,23,26,27}
var o5={17,22,23,26,27}
var o6={18,21,23,26,27}
var o7={19,22,23,26,27}
var o8={36,37,38,39}
var p0={4,8}
var p1={5,9}
var p2={6,10}
var p3={7,11}
var q0={12,16}
var q1={13,17}
var q2={14,18}
var q3={15,19}
var r0={36,37,38,39,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}
var s0={p1,p2,p3,q1,q2,q3}
var s1={p0,p2,p3,q0,q2,q3}
var s2={p0,p1,p3,q0,q1,q3}
var s3={p0,p1,p2,q0,q1,q2}
var s4={21,22,23}
var s5={20,24,26}
var s6={25,27}
var t0={a0,5,6,7,k0,l0,n0}
var t1={a0,4,6,7,k0,l0,n0}
var t2={a0,4,5,7,k0,l0,n0}
var t3={a0,4,5,6,k0,l0,n0}

var w0={a0,k0,m0,n0}
var x0=w0
var y0=w0
var z0=w0

var b0={a0,4,5,6,7,8, 9,10, 12,13,14,15,16,17,18,m0}
var c0={a0,4,5,6,7,8, 9,11, 12,13,14,15,16,17,19,m0}
var d0={a0,4,5,6,7,8,10,11, 12,13,14,15,16,18,19,m0}
var e0={a0,4,5,6,7,9,10,11, 12,13,14,15,17,18,19,m0}

a0,b0,c0,d0,f0,28
a0,b0,c0,g0,e0,29
a0,b0,h0,d0,e0,30
a0,i0,c0,d0,e0,31

m0,x0,y0,z0,16,0
m0,x0,y0,17,z0,0
m0,x0,18,y0,z0,0
m0,19,x0,y0,z0,0

p0,z0,r0,o1,y0,0
p0,y0,r0,x0,o0,0
p0,o3,r0,z0,x0,0
p1,r0,o2,y0,z0,0
p1,r0,x0,o1,y0,0
p1,r0,z0,x0,o0,0
p2,o3,y0,z0,r0,0
p2,x0,o2,y0,r0,0
p2,z0,x0,o1,r0,0
p3,y0,z0,r0,o0,0
p3,o3,y0,r0,x0,0
p3,x0,o2,r0,z0,0

p0,z0,x0,o1,y0, 8
p0,y0,z0,x0,o0, 8
p0,o3,y0,z0,x0, 8
p1,x0,o2,y0,z0, 9
p1,z0,x0,o1,y0, 9
p1,y0,z0,x0,o0, 9
p2,o3,y0,z0,x0,10
p2,x0,o2,y0,z0,10
p2,z0,x0,o1,y0,10
p3,y0,z0,x0,o0,11
p3,o3,y0,z0,x0,11
p3,x0,o2,y0,z0,11

 8,w0,x0,y0,z0,4
 9,w0,x0,y0,z0,5
10,w0,x0,y0,z0,6
11,w0,x0,y0,z0,7

k0,x0,y0,z0, 8,0
k0,x0,y0, 9,z0,0
k0,x0,10,y0,z0,0
k0,11,x0,y0,z0,0

q0,z0,r0,o5,y0,0
q0,y0,r0,x0,o4,0
q0,o7,r0,z0,x0,0
q1,r0,o6,y0,z0,0
q1,r0,x0,o5,y0,0
q1,r0,z0,x0,o4,0
q2,o7,y0,z0,r0,0
q2,x0,o6,y0,r0,0
q2,z0,x0,o5,r0,0
q3,y0,z0,r0,o4,0
q3,o7,y0,r0,x0,0
q3,x0,o6,r0,z0,0

q0,z0,x0,o5,y0,16
q0,y0,z0,x0,o4,16
q0,o7,y0,z0,x0,16
q1,x0,o6,y0,z0,17
q1,z0,x0,o5,y0,17
q1,y0,z0,x0,o4,17
q2,o7,y0,z0,x0,18
q2,x0,o6,y0,z0,18
q2,z0,x0,o5,y0,18
q3,y0,z0,x0,o4,19
q3,o7,y0,z0,x0,19
q3,x0,o6,y0,z0,19

16,w0,x0,y0,z0,12
17,w0,x0,y0,z0,13
18,w0,x0,y0,z0,14
19,w0,x0,y0,z0,15

20,s3,s2, 9, 8,23
20,s3,s2,p1, 8,21
20,s3,s2, 9,p0,22

20,s3,p2,s1, 8,21
20,s3,10,s1,p0,21

20,11,s2,s1, 8,23
20,p3,s2,s1, 8,21
20,11,s2,s1,p0,22

20,s3,10, 9,s0,23
20,s3,p2, 9,s0,22
20,s3,10,s1,s0,21

20,p3,s2, 9,s0,22
20,11,s2,s1,s0,22

20,11,10,s1,s0,23
20,p3,10,s1,s0,21
20,11,p2,s1,s0,22

s4,x0,y0, 9, 8,23
s4,y0,10, 9,x0,23
s4,11,10,x0,y0,23
s4,11,x0,y0, 8,23
s4,x0,y0,z0, 8,21
s4,y0,z0, 9,x0,22
s4,z0,10,x0,y0,21
s4,11,x0,y0,z0,22
s4,w0,x0,y0,z0,20

s5, 7,x0,y0,z0,20
s5,z0, 6,x0,y0,20
s5,y0,z0, 5,x0,20
s5,x0,y0,z0, 4,20
s5,t0,t1,t2,t3,20
s5,w0,x0,y0,z0,25

s6, 7,x0,y0,z0,26
s6,z0, 6,x0,y0,26
s6,y0,z0, 5,x0,26
s6,x0,y0,z0, 4,26
s6,t0,t1,t2,t3,26
s6,w0,x0,y0,z0,27

28,x0,y0,z0,f0,36
29,x0,y0,g0,z0,37
30,x0,h0,y0,z0,38
31,i0,x0,y0,z0,39
28,w0,x0,y0,z0,32
29,w0,x0,y0,z0,33
30,w0,x0,y0,z0,34
31,w0,x0,y0,z0,35

32,x0,y0,z0,f0,44
33,x0,y0,g0,z0,45
34,x0,h0,y0,z0,46
35,i0,x0,y0,z0,47
32,w0,x0,y0,z0,40
33,w0,x0,y0,z0,41
34,w0,x0,y0,z0,42
35,w0,x0,y0,z0,43

36,x0,y0,z0,f0,0
37,x0,y0,g0,z0,0
38,x0,h0,y0,z0,0
39,i0,x0,y0,z0,0
o8,w0,x0,y0,z0,20

40,x0,y0,z0,f0,52
41,x0,y0,g0,z0,53
42,x0,h0,y0,z0,54
43,i0,x0,y0,z0,55
40,w0,x0,y0,z0,48
41,w0,x0,y0,z0,49
42,w0,x0,y0,z0,50
43,w0,x0,y0,z0,51

44,x0,y0,z0,f0,60
45,x0,y0,g0,z0,61
46,x0,h0,y0,z0,62
47,i0,x0,y0,z0,63
44,w0,x0,y0,z0,56
45,w0,x0,y0,z0,57
46,w0,x0,y0,z0,58
47,w0,x0,y0,z0,59

48,x0,y0,z0,f0,6
49,x0,y0,g0,z0,7
50,x0,h0,y0,z0,4
51,i0,x0,y0,z0,5
48,w0,x0,y0,z0,4
49,w0,x0,y0,z0,5
50,w0,x0,y0,z0,6
51,w0,x0,y0,z0,7

52,x0,y0,z0,f0,7
53,x0,y0,g0,z0,4
54,x0,h0,y0,z0,5
55,i0,x0,y0,z0,6
52,w0,x0,y0,z0,5
53,w0,x0,y0,z0,6
54,w0,x0,y0,z0,7
55,w0,x0,y0,z0,4

56,x0,y0,z0,f0,14
57,x0,y0,g0,z0,15
58,x0,h0,y0,z0,12
59,i0,x0,y0,z0,13
56,w0,x0,y0,z0,12
57,w0,x0,y0,z0,13
58,w0,x0,y0,z0,14
59,w0,x0,y0,z0,15

60,x0,y0,z0,f0,15
61,x0,y0,g0,z0,12
62,x0,h0,y0,z0,13
63,i0,x0,y0,z0,14
60,w0,x0,y0,z0,13
61,w0,x0,y0,z0,14
62,w0,x0,y0,z0,15
63,w0,x0,y0,z0,12

@COLORS
0 0 0 0
1 0 0 0
2 0 0 0
3 0 0 0
4 96 96 192
5 96 96 192
6 96 96 192
7 96 96 192
8 96 192 96
9 96 192 96
10 96 192 96
11 96 192 96
12 192 96 96
13 192 96 96
14 192 96 96
15 192 96 96
16 192 96 192
17 192 96 192
18 192 96 192
19 192 96 192
20 0 192 96
21 0 192 96
22 0 192 96
23 0 192 96
24 153 153 0
25 153 153 0
26 153 153 0
27 153 153 0
28 255 0 0
29 255 0 0
30 255 0 0
31 255 0 0
32 255 85 0
33 255 85 0
34 255 85 0
35 255 85 0
36 255 85 0
37 255 85 0
38 255 85 0
39 255 85 0
40 255 119 0
41 255 119 0
42 255 119 0
43 255 119 0
44 255 119 0
45 255 119 0
46 255 119 0
47 255 119 0
48 255 153 0
49 255 153 0
50 255 153 0
51 255 153 0
52 255 153 0
53 255 153 0
54 255 153 0
55 255 153 0
56 255 153 0
57 255 153 0
58 255 153 0
59 255 153 0
60 255 153 0
61 255 153 0
62 255 153 0
63 255 153 0
Codon170123.zip
(3.27 KiB) Downloaded 216 times
Last edited by PHPBB12345 on February 24th, 2023, 1:46 am, edited 1 time in total.
User avatar
Tezcatlipoca
Posts: 81
Joined: September 9th, 2014, 11:40 am

Re: Codon-based Cellular Automaton

Post by Tezcatlipoca »

Where do you get the Codon ruleset to run this?
User avatar
PHPBB12345
Posts: 1150
Joined: August 5th, 2015, 11:55 pm
Contact:

Re: Codon-based Cellular Automaton

Post by PHPBB12345 »

Tezcatlipoca wrote:Where do you get the Codon ruleset to run this?
Javascript code:

Code: Select all

function UpdateFunction (center, north, east, south, west) {
	/* parameter: C, N, E, S, W */
	/* return value: C' */
	var __cell0 = [
	[0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,1, 0,0,1,1],
	[0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,1, 0,0,1,1],
	[0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,1,0,1, 0,0,1,1],
	[0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,1,1, 0,0,1,1],
	];
	var __cell1 = [
	[0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 1,0,0,0, 0,1,0,1, 0,0,1,1],
	[0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,1,1, 0,0,1,1],
	[0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,0, 0,1,0,1, 0,0,1,1],
	[0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,1,1, 0,0,1,1],
	];
	var __cell2 = [
	[0,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0],
	];
	var __cellin = [
	[0,0,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 0,1,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 0,0,1,0, 0,0,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 0,0,0,1, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0],
	];
	var __cellout = [
	[0,0,0,0, 0,1,1,1, 0,1,1,1, 0,1,1,1, 0,1,1,1, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 1,0,1,1, 1,0,1,1, 1,0,1,1, 1,0,1,1, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 1,1,0,1, 1,1,0,1, 1,1,0,1, 1,1,0,1, 0,0,0,0, 0,0,0,0],
	[0,0,0,0, 1,1,1,0, 1,1,1,0, 1,1,1,0, 1,1,1,0, 0,0,0,0, 0,0,0,0],
	];
	var __celldec = [0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,1];
	var decay0 = [[8,0,1], [10,0,1], [5,0,0], [12,0,1], [14,0,1], [1,0,1], [1,1,1], [3,0,1], [3,1,1]];
	var decay1 = [[9,0,1], [11,0,1], [0,0,0], [13,0,1], [15,0,1], [1,2,1], [1,3,1], [3,2,1], [3,3,1]];

	var __conflu = [20,25,26,27];
	for (var __i = 28; __i < 64; __i++) {
		for (var __j = 0; __j < 4; __j++) {
			__cell0[__j][__i] = 0;
			__cell1[__j][__i] = 0;
			__cell2[__j][__i] = 0;
			__cellin[__j][__i] = 0;
			__cellout[__j][__i] = 0;
		}
	}

	function __ishassts(d) {
		return d[0] ===  8 || d[1] ===  9 || d[2] === 10 || d[3] === 11;
	}
	function __ishasots(d) {
		return d[0] === 16 || d[1] === 17 || d[2] === 18 || d[3] === 19;
	}

	function callf0(c) {
		var ds = 0, d = 4, e;
		while (ds < 2 && d--) {
			__cell2[d][c[d]] && (e = d, ds++);
		}
		return ds === 1 ? 28 + e : 0;
	}

	function callf1(c, d, e) {
		if (__ishasots(d)) return 0;
		var e1 = (c + 1) % 4, e2 = (c + 2) % 4, e3 = (c + 3) % 4;
		var pre;
		if (__cell0[e3][d[e3]] || __cell0[c][d[c]] || __cell0[e1][d[e1]]) pre = 1; else pre = 0;
		return (pre && __celldec[d[e2] >> 2]
			? 0
			: ((pre ? 8 : 4) + c)
		);
	}

	function callf3(c, d, e) {
		if (__ishassts(d)) return 0;
		var e1 = (c + 1) % 4, e2 = (c + 2) % 4, e3 = (c + 3) % 4;
		var pre;
		if (__cell1[e3][d[e3]] || __cell1[c][d[c]] || __cell1[e1][d[e1]]) pre = 1; else pre = 0;
		return (pre && __celldec[d[e2] >> 2]
			? 0
			: ((pre ? 16 : 12) + c)
		);
	}

	function callf5(c, d) {
		if (__ishasots(d)) return 0;
		var i, s;
		if (c === 0) {
			i = __cellin[0][d[0]] + __cellin[1][d[1]] + __cellin[2][d[2]] + __cellin[3][d[3]];
			if (i !== 2) {
				return callf6b(0,d,i); // if input wires not equals 2
			}
			s = __cellout[0][d[0]] + __cellout[1][d[1]] + __cellout[2][d[2]] + __cellout[3][d[3]];
			if (s !== 2) {
				return callf6b(0,d,i); // if output wires not equals 2
			}
		}
		return 20 + (d[0] === 8 || d[2] === 10) + 2*(d[1] === 9 || d[3] === 11);
	}

	function callf6(c, d) {
		if (__ishasots(d)) return 0;
		return callf6b(c, d, __cellin[0][d[0]] + __cellin[1][d[1]] + __cellin[2][d[2]] + __cellin[3][d[3]]);
	}

	function callf6b(c, d, e) {
		var i = 0;
		var a = (d[0] === 8) + (d[1] === 9) + (d[2] === 10) + (d[3] === 11);
		if (e === a && e !== 0) {i = 1};
		return __conflu[(c << 1) & 2 | i];
	}

	function __decay(c, d, e) {
		return __cell2[d][e[d]] ? decay1[c][0]*4 + (decay1[c][1] + decay1[c][2]*d)%4 : decay0[c][0]*4 + (decay0[c][1] + decay0[c][2]*d)%4;
	}

	neighbor = [north, east, south, west];
	var cs = center >> 2, cdir = center & 3;
	switch (cs) {
		case 0: return callf0(neighbor); // break;
		case 1: return callf1(cdir,neighbor,0); // break;
		case 2: return callf1(cdir,neighbor,1); // break;
		case 3: return callf3(cdir,neighbor,0); // break;
		case 4: return callf3(cdir,neighbor,1); // break;
		case 5: return callf5(cdir,neighbor); // break;
		case 6: return callf6(cdir,neighbor); // break;
		default: return __decay(cs-7,cdir,neighbor);
	}
}
User avatar
Tezcatlipoca
Posts: 81
Joined: September 9th, 2014, 11:40 am

Re: Codon-based Cellular Automaton

Post by Tezcatlipoca »

Thank you, but is this the javascript code you are using in your web app? I am looking for the code I can use in Golly as a .rule file.
User avatar
Tezcatlipoca
Posts: 81
Joined: September 9th, 2014, 11:40 am

Re: Codon-based Cellular Automaton

Post by Tezcatlipoca »

I found it. Thank you.

Edit: Cells in this rule have 64 states! There is a lot to explore.
Post Reply