من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

حل تمرین بازی زندگی کوئرا با پایتون

حل تمرین بازی زندگی کوئرا با پایتون

حل تمرین بازی زندگی کوئرا با پایتون

در این نوشته به روش حل یکی از سوالات پیاده سازی برنامه نویسی وب‌سایت کوئرا می‌پردازیم.

 

حل تمرین بازی زندگی کوئرا با پایتون

قواعد بازی زندگی (Game of Life) که توسط جان کانوی طراحی شده است، ساده هستند اما رفتارهای پیچیده‌ای را تولید می‌کنند. این بازی در یک شبکه‌ی دو‌بعدی انجام می‌شود که هر خانه می‌تواند دو حالت دارد: زنده (1) یا مرده (0). تغییر وضعیت هر خانه براساس وضعیت همسایه‌های آن رخ می‌دهد. در ضمن در نظر بگیرید که دو خانه را همسایه می‌گوییم اگر در یک نقطه یا یک ضلع مشترک شوند.

قواعد بازی

  • هر سلول زنده با کم‌تر از دو همسایه‌ی زنده می‌میرد. (تنهایی)
  • هر سلول زنده با دو یا سه همسایه‌ی زنده، زنده می‌ماند. (ثبات)
  • هر سلول زنده با بیش از سه همسایه‌ی زنده می‌میرد. (ازدحام)
  • هر سلول مرده با دقیقاً سه همسایه‌ی زنده، زنده می‌شود. (تولد)
  • هر سلول مرده با غیر از سه همسایه‌ی زنده، مرده می‌ماند. (مرگ)

برنامه‌ای بنویسید که یک جدول n×n بگیرد، که هر خانه‌ی آن 0 ‍(مرده) یا 1 (زنده) است. این برنامه باید پس از هر مرحله، وضعیت جدید سلول‌ها را با توجه به قواعد بازی زندگی به روز کند و نتیجه را چاپ کند.

 

ورودی

در سطر اول ورودی، یک صحیح n داده می‌شود که اندازه جدول را مشخص می‌کند.

ورودی در تمرین بازی زندگی

در n سطر بعدی، یک جدول n × n شامل 0 و 1 که وضعیت اولیه‌‌ی بازی را مشخص می‌کند.

 

خروجی

در n سطر مانند ورودی، یک جدول از 0 و 1 چاپ کنید که وضعیت جدید جدول پس از یک مرحله بازی را مشخص کند.

 

مثال

ورودی نمونه 1

4
0 1 0 0
0 0 1 0
1 1 1 0
0 0 0 0

 

خروجی نمونه 1

0 0 0 0
1 0 1 0
0 1 1 0
0 1 0 0

 

ورودی نمونه 2

3
0 0 1
0 1 0
0 1 0

 

خروجی نمونه 2

0 0 0
0 1 1
0 0 0

 

کد پایتون سوال تمرین سوال بازی زندگی

def count_live_neighbors(matrix, x, y, n): 
    directions = [(-1, -1), (-1, 0), (-1, 1), 
                  (0, -1),         (0, 1), 
                  (1, -1), (1, 0), (1, 1)] 
    count = 0 
    for dx, dy in directions: 
        nx, ny = x + dx, y + dy 
        if 0 <= nx < n and 0 <= ny < n: 
            count += matrix[nx][ny] 
    return count 

n = int(input()) 
matrix = [] 
for _ in range(n): 
    row = list(map(int, input().split())) 
    matrix.append(row) 

new_matrix = [[0] * n for _ in range(n)] 

for i in range(n): 
    for j in range(n): 
        live_neighbors = count_live_neighbors(matrix, i, j, n) 
        if matrix[i][j] == 1: 
            if live_neighbors == 2 or live_neighbors == 3: 
                new_matrix[i][j] = 1 
            else: 
                new_matrix[i][j] = 0 
        else: 
            if live_neighbors == 3: 
                new_matrix[i][j] = 1 
            else: 
                new_matrix[i][j] = 0 

for row in new_matrix: 
    print(' '.join(map(str, row)))

 

منبع سوال: کوئرا

اگر نیاز به حل تمرین‌های دیگری از کوئرا دارید در بخش نظرات همین نوشته برای ما بنویسید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]