-
-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathone_dimensional.py
97 lines (85 loc) · 2.15 KB
/
one_dimensional.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Mengembalikan gambar 16 generasi automata seluler satu
# dimensi berdasarkan yang diberikan nomor aturan
# https://mathworld.wolfram.com/ElementaryCellularAutomaton.html
from __future__ import annotations
from PIL import Image
CELLS = [
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
]
]
def format_ruleset(ruleset: int) -> list[int]:
"""
>>> format_ruleset(11100)
[0, 0, 0, 1, 1, 1, 0, 0]
"""
return [int(c) for c in f"{ruleset:08}"[:8]]
def new_generation(cells: list[list[int]], rule: list[int], time: int) -> list[int]:
populasi = len(cells[0])
next_generation = []
for i in range(populasi):
left = 0 if i == 0 else cells[time][i - 1]
right = 0 if i == populasi - 1 else cells[time][i + 1]
situasi = 7 - int(f"{left}{cells[time][i]}{right}", 2)
next_generation.append(rule[situasi])
return next_generation
def generate_image(cells: list[list[int]]) -> Image.Image:
"""
Ubah sel menjadi PIL.Image.
Image skala abu-abu dan kembalikan ke pemanggil.
>>> from random import random
>>> cells = [[random() for w in range(31)] for h in range(16)]
>>> img = generate_image(cells)
>>> isinstance(img, Image.Image)
True
>>> img.width, img.height
(31, 16)
"""
# membuat ouput
img = Image.new("RGB", (len(cells[0]), len(cells)))
pixels = img.load()
for w in range(img.width):
for h in range(img.height):
color = 255 - int(255 * cells[h][w])
pixels[w, h] = (color, color, color)
return img
if __name__ == "__main__":
import doctest
doctest.testmod()
rule_num = bin(int(input("input pada rule:").strip()))[2:]
rule = format_ruleset(int(rule_num))
for time in range(16):
CELLS.append(new_generation(CELLS, rule, time))
img = generate_image(CELLS)
# img.save(f"rule_{rule_num}.png")
img.show()