Canon
(Redirected from Rule 108)
- "Rule 108" redirects here. For the elementary cellular automaton, see Rule 108.
Canon is a one-dimensional cellular automaton created by User:TheCanon2.
Rules
Canon has a single pointer. The pointed moves based on the value of the pointer cell b and its neighbours a and c. Canon has four rules.
- If a = c != b, flip b and move the pointer two cells to the left.
- If a = b = c, flip b and move the pointer one cell to the left.
- If a != c and b = 1, flip b and move the pointer two cells to the right.
- If a != c and b = 0, flip b and move the pointer one cell to the right.
Implementations
The following Amtu script defines Canon as a Turing machine.
A < R < R < R R > Z > Z > O Z > ZZ > ZZ > ZO O > OZ > OZ > OO ZZ <1< A <1< A <1>> A ZO <0<< A <0<< A <0> A OZ <1>> A <1<< A <1<< A OO <0> A <0> A <0< A
The following Python script performs Canon.
tape = [0] # Canon
import random
for i in range(0, 60):
tape.append(random.randint(0, 1)) # Replace with 0 for blank input
pointer = 30
while True:
subtape = [tape[pointer-1],tape[pointer],tape[pointer+1]]
if subtape == [0, 0, 0]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer -= 1
elif subtape == [0, 0, 1]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer += 2
elif subtape == [0, 1, 0]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer -= 2
elif subtape == [0, 1, 1]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer += 1
elif subtape == [1, 0, 0]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer += 2
elif subtape == [1, 0, 1]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer -= 2
elif subtape == [1, 1, 0]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer += 1
elif subtape == [1, 1, 1]:
tape[pointer] = (tape[pointer] + 1) % 2
pointer -= 1
for i in range(0, len(tape)):
print(tape[i], end="")
print("\n", end="")