import hashlib
# Convenience function to generate initial state from an 8-character ASCII string
def generate_initial_state(seed_string, length):
seed_bytes = seed_string.encode('ascii')
seed_hash = hashlib.sha256(seed_bytes).hexdigest()
seed_bits = bin(int(seed_hash, 16))[2:].zfill(length)
return [int(bit) for bit in seed_bits[:length]]
def rule_90(left, center, right):
return left ^ right
def rule_150(left, center, right):
return left ^ center ^ right
def update_ca(ca, rule_90_length):
new_ca = [0] * len(ca)
for i in range(1, len(ca) - 1):
if i < rule_90_length:
new_ca[i] = rule_90(ca[i-1], ca[i], ca[i+1])
else:
new_ca[i] = rule_150(ca[i-1], ca[i], ca[i+1])
# Set the boundaries using zero instead of wrap-around
new_ca[0] = rule_90(0, ca[0], ca[1])
new_ca[-1] = rule_150(ca[-2], ca[-1], 0)
return new_ca
# Generate the initial state from an 8-character ASCII string
seed_string = "corecore55"
ca = generate_initial_state(seed_string, 65)
rule_90_length = 64 # Apply Rule 90 to all but the last cell
# Evolve the cellular automaton for a given number of steps
steps = 5000
for step in range(steps):
ca = update_ca(ca, rule_90_length)
print(ca[0])