|
4 | 4 |
|
5 | 5 | typedef uint64_t cell; |
6 | 6 |
|
7 | | -// human attempt, 54 gates |
8 | | -cell conway_clayton(cell in[9]) { |
9 | | - // pairs |
10 | | - cell p00 = ~(in[0] | in[1]); |
11 | | - cell p10 = ~(in[2] | in[3]); |
12 | | - cell p20 = ~(in[5] | in[6]); |
13 | | - cell p30 = ~(in[7] | in[8]); |
14 | | - cell p01 = in[0] ^ in[1]; |
15 | | - cell p11 = in[2] ^ in[3]; |
16 | | - cell p21 = in[5] ^ in[6]; |
17 | | - cell p31 = in[7] ^ in[8]; |
18 | | - cell p02 = in[0] & in[1]; |
19 | | - cell p12 = in[2] & in[3]; |
20 | | - cell p22 = in[5] & in[6]; |
21 | | - cell p32 = in[7] & in[8]; |
22 | | - // halfs |
23 | | - cell h00 = p00 & p10; |
24 | | - cell h10 = p20 & p30; |
25 | | - cell h01 = (p00 & p11) | (p10 & p01); |
26 | | - cell h11 = (p20 & p31) | (p30 & p21); |
27 | | - cell h03 = (p02 & p11) | (p12 & p01); |
28 | | - cell h13 = (p22 & p31) | (p32 & p21); |
29 | | - cell h02 = (p02 & p10) | (p00 & p12) | (p01 & p11); |
30 | | - cell h12 = (p22 & p30) | (p20 & p32) | (p21 & p31); |
31 | | - // neighbors |
32 | | - cell n2 = (h01 & h11) | (h02 & h10) | (h00 & h12); |
33 | | - cell n3 = (h03 & h10) | (h13 & h00) | (h02 & h11 ) | (h12 & h01); |
34 | | - // rule |
35 | | - cell out = n3 | (in[4] & n2); |
36 | | - return out; |
37 | | -} |
38 | | - |
39 | 7 | cell conway(cell in[9]) { |
40 | 8 | cell in_0 = in[0]; |
41 | 9 | cell in_1 = in[1]; |
@@ -223,6 +191,38 @@ cell conway(cell in[9]) { |
223 | 191 | return out; |
224 | 192 | } |
225 | 193 |
|
| 194 | +// human attempt, 54 gates |
| 195 | +cell conway_clayton(cell in[9]) { |
| 196 | + // pairs |
| 197 | + cell p00 = ~(in[0] | in[1]); |
| 198 | + cell p10 = ~(in[2] | in[3]); |
| 199 | + cell p20 = ~(in[5] | in[6]); |
| 200 | + cell p30 = ~(in[7] | in[8]); |
| 201 | + cell p01 = in[0] ^ in[1]; |
| 202 | + cell p11 = in[2] ^ in[3]; |
| 203 | + cell p21 = in[5] ^ in[6]; |
| 204 | + cell p31 = in[7] ^ in[8]; |
| 205 | + cell p02 = in[0] & in[1]; |
| 206 | + cell p12 = in[2] & in[3]; |
| 207 | + cell p22 = in[5] & in[6]; |
| 208 | + cell p32 = in[7] & in[8]; |
| 209 | + // halfs |
| 210 | + cell h00 = p00 & p10; |
| 211 | + cell h10 = p20 & p30; |
| 212 | + cell h01 = (p00 & p11) | (p10 & p01); |
| 213 | + cell h11 = (p20 & p31) | (p30 & p21); |
| 214 | + cell h03 = (p02 & p11) | (p12 & p01); |
| 215 | + cell h13 = (p22 & p31) | (p32 & p21); |
| 216 | + cell h02 = (p02 & p10) | (p00 & p12) | (p01 & p11); |
| 217 | + cell h12 = (p22 & p30) | (p20 & p32) | (p21 & p31); |
| 218 | + // neighbors |
| 219 | + cell n2 = (h01 & h11) | (h02 & h10) | (h00 & h12); |
| 220 | + cell n3 = (h03 & h10) | (h13 & h00) | (h02 & h11 ) | (h12 & h01); |
| 221 | + // rule |
| 222 | + cell out = n3 | (in[4] & n2); |
| 223 | + return out; |
| 224 | +} |
| 225 | + |
226 | 226 | typedef struct { |
227 | 227 | cell* cells; |
228 | 228 | size_t cells_len; |
|
0 commit comments