28
28
comes a live cell, as if by reproduction.
29
29
"""
30
30
31
+ import doctest
31
32
import random
32
33
import sys
33
34
42
43
43
44
44
45
def create_canvas (size : int ) -> list [list [bool ]]:
46
+ """
47
+ For creating a nested list of boolean values,
48
+ based on the size parameter provided
49
+
50
+ Args:
51
+ size: integer
52
+
53
+ Returns:
54
+ A nested list of boolean values
55
+
56
+ Examples:
57
+ >>> create_canvas(1)
58
+ [[False]]
59
+ >>> create_canvas(2)
60
+ [[False, False], [False, False]]
61
+ >>> create_canvas(3)
62
+ [[False, False, False], [False, False, False], [False, False, False]]
63
+ >>> create_canvas(0)
64
+ []
65
+ >>> create_canvas(-1)
66
+ []
67
+ """
45
68
canvas = [[False for i in range (size )] for j in range (size )]
46
69
return canvas
47
70
@@ -56,13 +79,37 @@ def run(canvas: list[list[bool]]) -> list[list[bool]]:
56
79
"""
57
80
This function runs the rules of game through all points, and changes their
58
81
status accordingly.(in the same canvas)
59
- @Args:
60
- --
61
- canvas : canvas of population to run the rules on.
62
82
63
- @returns:
64
- --
65
- canvas of population after one step
83
+ Args:
84
+ canvas : canvas of population to run the rules on.
85
+
86
+ Returns:
87
+ canvas of population after one step
88
+
89
+ Example #1:
90
+ >>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
91
+ >>> run(canvas)
92
+ [[False, False, False], [False, False, False], [False, False, False]]
93
+
94
+ Example #2:
95
+ >>> canvas=[[True, False, False], [True, False, False], [False, False, False]]
96
+ >>> run(canvas)
97
+ [[False, False, False], [False, False, False], [False, False, False]]
98
+
99
+ Example #3:
100
+ >>> canvas=[[True, True, True], [True, False, False], [False, False, False]]
101
+ >>> run(canvas)
102
+ [[False, False, False], [False, False, False], [False, False, False]]
103
+
104
+ Example #4:
105
+ >>> canvas=[[True, False, False], [False, False, True], [False, True, False]]
106
+ >>> run(canvas)
107
+ [[False, False, False], [False, True, False], [False, False, False]]
108
+
109
+ Example #5:
110
+ >>> canvas=[[True, True, True], [True, True, True], [True, True, True]]
111
+ >>> run(canvas)
112
+ [[False, False, False], [False, False, False], [False, False, True]]
66
113
"""
67
114
current_canvas = np .array (canvas )
68
115
next_gen_canvas = np .array (create_canvas (current_canvas .shape [0 ]))
@@ -76,6 +123,66 @@ def run(canvas: list[list[bool]]) -> list[list[bool]]:
76
123
77
124
78
125
def __judge_point (pt : bool , neighbours : list [list [bool ]]) -> bool :
126
+ """
127
+ Update canvas provided
128
+
129
+ Args:
130
+ pt: boolean
131
+ neighbours: canvas
132
+
133
+ Returns:
134
+ Updated canvas
135
+
136
+ Example #1:
137
+ Tests pt = True, and alive < 2; expected 'alive' count = 0
138
+ >>> pt=True
139
+ >>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
140
+ >>> __judge_point(pt, canvas)
141
+ False
142
+
143
+ Example #2:
144
+ Tests pt = True, and alive < 2; expected 'alive' count = 1
145
+ >>> pt=True
146
+ >>> canvas=[[True, False, False], [True, False, False], [False, False, False]]
147
+ >>> __judge_point(pt, canvas)
148
+ False
149
+
150
+ Example #3:
151
+ Tests pt = True, and alive 'in' 2
152
+ >>> pt=True
153
+ >>> canvas=[[True, True, True], [False, False, False], [False, False, False]]
154
+ >>> __judge_point(pt, canvas)
155
+ True
156
+
157
+ Example #4:
158
+ Tests pt = True, and alive 'in' 3
159
+ >>> pt=True
160
+ >>> canvas=[[True, True, True], [True, False, False], [False, False, False]]
161
+ >>> __judge_point(pt, canvas)
162
+ True
163
+
164
+ Example #5:
165
+ Tests pt = True, and alive > 3; expected 'alive' count = 4
166
+ >>> pt=True
167
+ >>> canvas=[[True, True, True], [True, False, False], [False, False, True]]
168
+ >>> __judge_point(pt, canvas)
169
+ False
170
+
171
+ Example #6:
172
+ Tests pt = False, and alive == 3
173
+ >>> pt=False
174
+ >>> canvas=[[True, False, False], [False, False, True], [False, True, False]]
175
+ >>> __judge_point(pt, canvas)
176
+ True
177
+
178
+ Example #7:
179
+ Tests pt = False, and alive != 3; expected 'alive' count = 0
180
+ >>> pt=False
181
+ >>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
182
+ >>> __judge_point(pt, canvas)
183
+ False
184
+ """
185
+
79
186
dead = 0
80
187
alive = 0
81
188
# finding dead or alive neighbours count.
@@ -111,6 +218,7 @@ def __judge_point(pt: bool, neighbours: list[list[bool]]) -> bool:
111
218
if len (sys .argv ) != 2 :
112
219
raise Exception (usage_doc )
113
220
221
+ doctest .testmod ()
114
222
canvas_size = int (sys .argv [1 ])
115
223
# main working structure of this module.
116
224
c = create_canvas (canvas_size )
0 commit comments