


"""simple docstring"""







from __future__ import annotations

from PIL import Image

# Define glider example
a__				:							Dict						=     [
    [0, 1, 0, 0, 0, 0, 0, 0],
    [0, 0, 1, 0, 0, 0, 0, 0],
    [1, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
]

# Define blinker example
a__				:							List[str]						=     [[0, 1, 0], [0, 1, 0], [0, 1, 0]]




def    UpperCAmelCase__       (lowerCAmelCase_   ):




					'''simple docstring'''


					__SCREAMING_SNAKE_CASE						   =				[]
					for i in range(len(lowerCAmelCase_   )   ):
										__SCREAMING_SNAKE_CASE						   =				[]
										for j in range(len(cells[i]   )   ):
															# Get the number of live neighbours
															__SCREAMING_SNAKE_CASE						   =				0
															if i > 0 and j > 0:
																				neighbour_count += cells[i - 1][j - 1]
															if i > 0:
																				neighbour_count += cells[i - 1][j]
															if i > 0 and j < len(cells[i]   ) - 1:
																				neighbour_count += cells[i - 1][j + 1]
															if j > 0:
																				neighbour_count += cells[i][j - 1]
															if j < len(cells[i]   ) - 1:
																				neighbour_count += cells[i][j + 1]
															if i < len(lowerCAmelCase_   ) - 1 and j > 0:
																				neighbour_count += cells[i + 1][j - 1]
															if i < len(lowerCAmelCase_   ) - 1:
																				neighbour_count += cells[i + 1][j]
															if i < len(lowerCAmelCase_   ) - 1 and j < len(cells[i]   ) - 1:
																				neighbour_count += cells[i + 1][j + 1]

															# Rules of the game of life (excerpt from Wikipedia):
															# 1. Any live cell with two or three live neighbours survives.
															# 2. Any dead cell with three live neighbours becomes a live cell.
															# 3. All other live cells die in the next generation.
															#    Similarly, all other dead cells stay dead.
															__SCREAMING_SNAKE_CASE						   =				cells[i][j] == 1
															if (
															    (alive and 2 <= neighbour_count <= 3)
															    or not alive
															    and neighbour_count == 3
															):
																				next_generation_row.append(1   )
															else:
																				next_generation_row.append(0   )

										next_generation.append(lowerCAmelCase_   )
					return next_generation




def    UpperCAmelCase__       (lowerCAmelCase_  ,						lowerCAmelCase_   ):




					'''simple docstring'''


					__SCREAMING_SNAKE_CASE						   =				[]
					for _ in range(lowerCAmelCase_   ):
										# Create output image
										__SCREAMING_SNAKE_CASE						   =				Image.new("RGB"  ,						(len(cells[0]   ), len(lowerCAmelCase_   ))   )
										__SCREAMING_SNAKE_CASE						   =				img.load()

										# Save cells to image
										for x in range(len(lowerCAmelCase_   )   ):
															for y in range(len(cells[0]   )   ):
																				__SCREAMING_SNAKE_CASE						   =				255 - cells[y][x] * 255
																				__SCREAMING_SNAKE_CASE						   =				(colour, colour, colour)

        # Save image
										images.append(lowerCAmelCase_   )
										__SCREAMING_SNAKE_CASE						   =				new_generation(lowerCAmelCase_   )
					return images


if __name__ == "__main__":
		a__				:							Optional[Any]						=     generate_images(GLIDER, 1_6)
		images[0].save('''out.gif''', save_all=True, append_images=images[1:])




"""simple docstring"""







from __future__ import annotations




def    UpperCAmelCase__       (lowerCAmelCase_  ,						lowerCAmelCase_ = None  ,						lowerCAmelCase_ = None   ):




					'''simple docstring'''


					if start is None:
										__SCREAMING_SNAKE_CASE						   =				0

					if end is None:
										__SCREAMING_SNAKE_CASE						   =				len(lowerCAmelCase_   ) - 1

					if start >= end:
										return

					__SCREAMING_SNAKE_CASE						   =				(start + end) // 2

					slowsort(lowerCAmelCase_  ,						lowerCAmelCase_  ,						lowerCAmelCase_   )
					slowsort(lowerCAmelCase_  ,						mid + 1  ,						lowerCAmelCase_   )

					if sequence[end] < sequence[mid]:
										__SCREAMING_SNAKE_CASE   ,  __SCREAMING_SNAKE_CASE						   =				sequence[mid], sequence[end]

					slowsort(lowerCAmelCase_  ,						lowerCAmelCase_  ,						end - 1   )


if __name__ == "__main__":
		from doctest import testmod

		testmod()
