From 337a220a8d501e08df39de2d5331c0e89b27dd76 Mon Sep 17 00:00:00 2001 From: nightmono <163682003+nightmono@users.noreply.github.com> Date: Tue, 6 Aug 2024 13:31:27 +0100 Subject: [PATCH] Add inital files --- rule-n.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++ static/rule-110.py | 40 ++++++++++++++++++++++++++++++ static/rule-30.py | 40 ++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 rule-n.py create mode 100644 static/rule-110.py create mode 100644 static/rule-30.py diff --git a/rule-n.py b/rule-n.py new file mode 100644 index 0000000..6d96b64 --- /dev/null +++ b/rule-n.py @@ -0,0 +1,61 @@ +#!/usr/bin/python3 + +PATTERNS = ( + (1, 1, 1), + (1, 1, 0), + (1, 0, 1), + (1, 0, 0), + (0, 1, 1), + (0, 1, 0), + (0, 0, 1), + (0, 0, 0) +) + +def get_rule_set(rule): + binary = bin(rule)[2:].zfill(8) + return set(i for i in range(8) if binary[i] == "1") + +def new_state(rule_set, l, m, r): + for i in rule_set: + if (l, m, r) == PATTERNS[i]: + return 1 + return 0 + +def tick(cells, rule_set): + next_gen = [0] * len(cells) + + for i in range(len(cells)): + l = cells[i-1] + m = cells[i] + r = cells[(i+1)%len(cells)] + + next_gen[i] = new_state(rule_set, l, m, r) + + return next_gen + +def main(): + import time + import sys + + rule = 110 + cell_length = 60 + + args = sys.argv + for i, arg in enumerate(args): + if arg == "--rule": + rule = int(args[i+1]) + elif arg == "--length" or arg == "--len": + cell_length = int(args[i+1]) + + cells = [0] * cell_length + cells[cell_length//2] = 1 + rule_set = get_rule_set(rule) + print(rule_set) + + while 1: + print("".join(map(str, cells)).replace("0", " ").replace("1", "#")) + cells = tick(cells, rule_set) + time.sleep(0.05) + +if __name__ == "__main__": + main() diff --git a/static/rule-110.py b/static/rule-110.py new file mode 100644 index 0000000..171f9cd --- /dev/null +++ b/static/rule-110.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 + +patterns = ( + (1, 1, 1), + (1, 1, 0), + (1, 0, 1), + (1, 0, 0), + (0, 1, 1), + (0, 1, 0), + (0, 0, 1), + (0, 0, 0) +) + +def rule110(l, m, r): + for i in (1, 2, 4, 5, 6): + if (l, m, r) == patterns[i]: + return 1 + return 0 + +def tick(cells): + next_gen = [0] * len(cells) + + for i in range(len(cells)): + l = cells[i-1] + m = cells[i] + r = cells[(i+1)%len(cells)] + + next_gen[i] = rule110(l, m, r) + + return next_gen + +import time + +cells = [0] * 60 +cells[len(cells)//2] = 1 + +while 1: + print("".join(map(str, cells)).replace("0", " ").replace("1", "#")) + cells = tick(cells) + time.sleep(0.1) diff --git a/static/rule-30.py b/static/rule-30.py new file mode 100644 index 0000000..e755dd8 --- /dev/null +++ b/static/rule-30.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 + +patterns = ( + (1, 1, 1), + (1, 1, 0), + (1, 0, 1), + (1, 0, 0), + (0, 1, 1), + (0, 1, 0), + (0, 0, 1), + (0, 0, 0) +) + +def rule30(l, m, r): + for i in (3, 4, 5, 6): + if (l, m, r) == patterns[i]: + return 1 + return 0 + +def tick(cells): + next_gen = [0] * len(cells) + + for i in range(len(cells)): + l = cells[i-1] + m = cells[i] + r = cells[(i+1)%len(cells)] + + next_gen[i] = rule30(l, m, r) + + return next_gen + +import time + +cells = [0] * 60 +cells[len(cells)//2] = 1 + +while 1: + print("".join(map(str, cells)).replace("0", " ").replace("1", "#")) + cells = tick(cells) + time.sleep(0.1)