Решение на Игра на живот от Алек Андреев

Обратно към всички решения

Към профила на Алек Андреев

Резултати

  • 6 точки от тестове
  • 3 бонус точки
  • 9 точки общо
  • 1 успешни тест(а)
  • 0 неуспешни тест(а)

Код

BOARD_SIZE = 48
def step_board(board):
for x in range(1, BOARD_SIZE):
for y in range(1, BOARD_SIZE):
curr = board[x][y] & 1
neighbors = sum((board[x-1][y-1] & 2 == 2, board[x-1][y] & 2 == 2, board[x-1][y+1] & 2 == 2,
board[x][y-1] & 2 == 2, board[x][y+1] & 1,
board[x+1][y-1] & 1, board[x+1][y] & 1, board[x+1][y+1] & 1))
board[x][y] = (2 if curr else 0) + (neighbors == 3 or curr and neighbors == 2)

Лог от изпълнението

.
----------------------------------------------------------------------
Ran 1 test in 0.135s

OK

История (1 версия и 2 коментара)

Алек обнови решението на 22.03.2012 09:57 (преди почти 13 години)

+BOARD_SIZE = 48
+
+def step_board(board):
+ for x in range(1, BOARD_SIZE):
+ for y in range(1, BOARD_SIZE):
+ curr = board[x][y] & 1
+ neighbors = sum((board[x-1][y-1] & 2 == 2, board[x-1][y] & 2 == 2, board[x-1][y+1] & 2 == 2,
+ board[x][y-1] & 2 == 2, board[x][y+1] & 1,
+ board[x+1][y-1] & 1, board[x+1][y] & 1, board[x+1][y+1] & 1))
+ board[x][y] = (2 if curr else 0) + (neighbors == 3 or curr and neighbors == 2)

Не, че искам да се заяждам, но ми се струва, че това изобщо не се държи като играта на живота без да споменавам, че е трудно разбираемо и неспазващо pep8...

*Редакция: нямах много време да погледна кода... всъщност не е толкова трудноразбираем и видях причините за нарушаването на стила... колкото до грешката - май единствено трябва да се увеличи втория аргумент на range-овете с една единица. т.к. в текущото състояние не проверява последните реални ред и колона(47ми от ядрото, но 48ми реално заради 0вата рамка)