Game of life
Assume the board is a 40x20 grid. When a Cell is near or on the edge, assume there are simply fewer neighbors—the same B3/S23 rules apply, you simply need to handle the border cases without crashing your program. You can also think of this as meaning there are only permanently-dead Cells outside the board.
We should be capable of calculating one generation past the initial starting state.
Our task is to use Python classes to represent a Cell, a Board, and then to be able to answer some basic questions about the board and the next generation. The program will begin by asking for a file name containing an initial state, and it will then open that file and transfer the contents into a Board of Cells as its internal representation. (Converting between the string contents of the file to the Board of Cells requires understanding of classes, and file access, and lists).