Виктор обнови решението на 29.03.2012 18:13 (преди над 12 години)
+#!/usr/bin/env python3
+import os
+import time
+from random import Random
+from itertools import product
+
+BOARD_SIZE = 48
+
+def print_board(board, wait = False, sleep = False):
+ os.system(['clear','cls'][os.name == 'nt'])
+ print('=' * (BOARD_SIZE + 2), end = '|\n')
+ for row in board:
+ print(*['X' if x else ' ' for x in row], end = ' |\n', sep = '')
+
+ print([[x & 1 for x in row] for row in board])
+ input("Press enter to continue.")
+
+def create_board(fill_rate = 0.3):
+ rand = Random()
+ return [[int(x and x != BOARD_SIZE + 1 and y and y != BOARD_SIZE + 1
+ and rand.normalvariate(0.5,0.2) < fill_rate) for x in range(0,BOARD_SIZE + 2)] for y in range(0,BOARD_SIZE + 2)]
+
+def step_board(board):
+ """The official solution to the second Python homework.
+
+ Note that this solution is not for real men.
+ Use this at your own risk!
+
+ I used 'for' so the function doesn't become too 'fat' with
+ list comperhensions.
+
+ """
+ assistant_board = []
+ for row in range(1,49):
+ assistant_board.append([int(column and column != 49 and
+ dead_or_alive(board, row, column))
+ for column in range(50)])
+ board[1:-1] = assistant_board
+
+def dead_or_alive(board, row, column):
+ """This is a function that decides whether a cell lives or dies.
+
+ In a certain sense it is the cell god.
+ And you are composed of cells.
+ Therefore it is advised that you treat it nicely!
+
+ More concretely it decides whether the cell from the matrix
+ 'board' with coordinates 'row' and 'column' lives or dies.
+
+ The decision is tough, but someone must make it.
+
+ """
+ _ = product([-1, 0, 1], [-1, 0, 1])
+ cell_consortium = [board[row+i][column+j] for i, j in _]
+ number_of_neighbours = sum(cell_consortium) - board[row][column]
+ return int(number_of_neighbours == 3 or (number_of_neighbours == 2 and
+ board[row][column]))
+
+def step_board_for_real_men(board):
+ """This is the single-expression solution for real men!
+
+ The function's line-wrapping is not very nice for the sake of...
+ Readability. Yeah, let's say that... Readability.
+
+ """
+ board[1:-1] = [[column and column != 49 and (sum(board[row+i][column+j]
+ for j in range(-1,2) for i in range(-1,2)) - board[row][column] == 3 or
+ (sum(board[row+i][column+j] for j in range(-1,2) for i in range(-1,2)) -
+ board[row][column] == 2 and board[row][column]))
+ for column in range(50)] for row in range(1,49)]
+
+if __name__ == '__main__':
+ board = create_board()
+ while True:
+ step_board(board)
+ print_board(board)