mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-02-12 04:18:08 +00:00
Added doctests to game_of_life.py
This commit is contained in:
parent
03a42510b0
commit
acaeb9b531
|
@ -28,6 +28,7 @@ Game-Of-Life Rules:
|
||||||
comes a live cell, as if by reproduction.
|
comes a live cell, as if by reproduction.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import doctest
|
||||||
import random
|
import random
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
@ -42,6 +43,28 @@ random.shuffle(choice)
|
||||||
|
|
||||||
|
|
||||||
def create_canvas(size: int) -> list[list[bool]]:
|
def create_canvas(size: int) -> list[list[bool]]:
|
||||||
|
"""
|
||||||
|
For creating a nested list of boolean values,
|
||||||
|
based on the size parameter provided
|
||||||
|
|
||||||
|
Args:
|
||||||
|
size: integer
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A nested list of boolean values
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
>>> create_canvas(1)
|
||||||
|
[[False]]
|
||||||
|
>>> create_canvas(2)
|
||||||
|
[[False, False], [False, False]]
|
||||||
|
>>> create_canvas(3)
|
||||||
|
[[False, False, False], [False, False, False], [False, False, False]]
|
||||||
|
>>> create_canvas(0)
|
||||||
|
[]
|
||||||
|
>>> create_canvas(-1)
|
||||||
|
[]
|
||||||
|
"""
|
||||||
canvas = [[False for i in range(size)] for j in range(size)]
|
canvas = [[False for i in range(size)] for j in range(size)]
|
||||||
return canvas
|
return canvas
|
||||||
|
|
||||||
|
@ -56,13 +79,37 @@ def run(canvas: list[list[bool]]) -> list[list[bool]]:
|
||||||
"""
|
"""
|
||||||
This function runs the rules of game through all points, and changes their
|
This function runs the rules of game through all points, and changes their
|
||||||
status accordingly.(in the same canvas)
|
status accordingly.(in the same canvas)
|
||||||
@Args:
|
|
||||||
--
|
|
||||||
canvas : canvas of population to run the rules on.
|
|
||||||
|
|
||||||
@returns:
|
Args:
|
||||||
--
|
canvas : canvas of population to run the rules on.
|
||||||
canvas of population after one step
|
|
||||||
|
Returns:
|
||||||
|
canvas of population after one step
|
||||||
|
|
||||||
|
Example #1:
|
||||||
|
>>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
|
||||||
|
>>> run(canvas)
|
||||||
|
[[False, False, False], [False, False, False], [False, False, False]]
|
||||||
|
|
||||||
|
Example #2:
|
||||||
|
>>> canvas=[[True, False, False], [True, False, False], [False, False, False]]
|
||||||
|
>>> run(canvas)
|
||||||
|
[[False, False, False], [False, False, False], [False, False, False]]
|
||||||
|
|
||||||
|
Example #3:
|
||||||
|
>>> canvas=[[True, True, True], [True, False, False], [False, False, False]]
|
||||||
|
>>> run(canvas)
|
||||||
|
[[False, False, False], [False, False, False], [False, False, False]]
|
||||||
|
|
||||||
|
Example #4:
|
||||||
|
>>> canvas=[[True, False, False], [False, False, True], [False, True, False]]
|
||||||
|
>>> run(canvas)
|
||||||
|
[[False, False, False], [False, True, False], [False, False, False]]
|
||||||
|
|
||||||
|
Example #5:
|
||||||
|
>>> canvas=[[True, True, True], [True, True, True], [True, True, True]]
|
||||||
|
>>> run(canvas)
|
||||||
|
[[False, False, False], [False, False, False], [False, False, True]]
|
||||||
"""
|
"""
|
||||||
current_canvas = np.array(canvas)
|
current_canvas = np.array(canvas)
|
||||||
next_gen_canvas = np.array(create_canvas(current_canvas.shape[0]))
|
next_gen_canvas = np.array(create_canvas(current_canvas.shape[0]))
|
||||||
|
@ -76,6 +123,66 @@ def run(canvas: list[list[bool]]) -> list[list[bool]]:
|
||||||
|
|
||||||
|
|
||||||
def __judge_point(pt: bool, neighbours: list[list[bool]]) -> bool:
|
def __judge_point(pt: bool, neighbours: list[list[bool]]) -> bool:
|
||||||
|
"""
|
||||||
|
Update canvas provided
|
||||||
|
|
||||||
|
Args:
|
||||||
|
pt: boolean
|
||||||
|
neighbours: canvas
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Updated canvas
|
||||||
|
|
||||||
|
Example #1:
|
||||||
|
Tests pt = True, and alive < 2; expected 'alive' count = 0
|
||||||
|
>>> pt=True
|
||||||
|
>>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
|
||||||
|
>>> __judge_point(pt, canvas)
|
||||||
|
False
|
||||||
|
|
||||||
|
Example #2:
|
||||||
|
Tests pt = True, and alive < 2; expected 'alive' count = 1
|
||||||
|
>>> pt=True
|
||||||
|
>>> canvas=[[True, False, False], [True, False, False], [False, False, False]]
|
||||||
|
>>> __judge_point(pt, canvas)
|
||||||
|
False
|
||||||
|
|
||||||
|
Example #3:
|
||||||
|
Tests pt = True, and alive 'in' 2
|
||||||
|
>>> pt=True
|
||||||
|
>>> canvas=[[True, True, True], [False, False, False], [False, False, False]]
|
||||||
|
>>> __judge_point(pt, canvas)
|
||||||
|
True
|
||||||
|
|
||||||
|
Example #4:
|
||||||
|
Tests pt = True, and alive 'in' 3
|
||||||
|
>>> pt=True
|
||||||
|
>>> canvas=[[True, True, True], [True, False, False], [False, False, False]]
|
||||||
|
>>> __judge_point(pt, canvas)
|
||||||
|
True
|
||||||
|
|
||||||
|
Example #5:
|
||||||
|
Tests pt = True, and alive > 3; expected 'alive' count = 4
|
||||||
|
>>> pt=True
|
||||||
|
>>> canvas=[[True, True, True], [True, False, False], [False, False, True]]
|
||||||
|
>>> __judge_point(pt, canvas)
|
||||||
|
False
|
||||||
|
|
||||||
|
Example #6:
|
||||||
|
Tests pt = False, and alive == 3
|
||||||
|
>>> pt=False
|
||||||
|
>>> canvas=[[True, False, False], [False, False, True], [False, True, False]]
|
||||||
|
>>> __judge_point(pt, canvas)
|
||||||
|
True
|
||||||
|
|
||||||
|
Example #7:
|
||||||
|
Tests pt = False, and alive != 3; expected 'alive' count = 0
|
||||||
|
>>> pt=False
|
||||||
|
>>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
|
||||||
|
>>> __judge_point(pt, canvas)
|
||||||
|
False
|
||||||
|
"""
|
||||||
|
|
||||||
dead = 0
|
dead = 0
|
||||||
alive = 0
|
alive = 0
|
||||||
# finding dead or alive neighbours count.
|
# finding dead or alive neighbours count.
|
||||||
|
@ -111,6 +218,7 @@ if __name__ == "__main__":
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
raise Exception(usage_doc)
|
raise Exception(usage_doc)
|
||||||
|
|
||||||
|
doctest.testmod()
|
||||||
canvas_size = int(sys.argv[1])
|
canvas_size = int(sys.argv[1])
|
||||||
# main working structure of this module.
|
# main working structure of this module.
|
||||||
c = create_canvas(canvas_size)
|
c = create_canvas(canvas_size)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user