OPEN 28/6



0by 0x tinyZED imageTEXT theTUBE

- conservation of creation -

zett

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])