|
| 1 | +import random |
| 2 | + |
| 3 | +GRID_SIZE = 50 |
| 4 | +NUM_ORGANISMS = 5 |
| 5 | +NUM_RESOURCES = 20 |
| 6 | +ENERGY_THRESHOLD = 10 |
| 7 | + |
| 8 | +RULES = { |
| 9 | + 0: lambda neighbors, energy: (sum(neighbors) + energy) % 2, |
| 10 | + 1: lambda neighbors, energy: (sum(neighbors) - energy) % 2 |
| 11 | +} |
| 12 | + |
| 13 | +def initialize_grid(): |
| 14 | + grid = [0] * GRID_SIZE |
| 15 | + for _ in range(NUM_ORGANISMS): |
| 16 | + organism_position = random.randint(0, GRID_SIZE - 1) |
| 17 | + grid[organism_position] = random.randint(1, 5) |
| 18 | + for _ in range(NUM_RESOURCES): |
| 19 | + resource_position = random.randint(0, GRID_SIZE - 1) |
| 20 | + resource_value = random.randint(1, 5) |
| 21 | + grid[resource_position] = -resource_value |
| 22 | + return grid |
| 23 | + |
| 24 | +def get_neighbors(grid, index): |
| 25 | + neighbors = [] |
| 26 | + if index > 0: |
| 27 | + neighbors.append(grid[index - 1]) |
| 28 | + if index < GRID_SIZE - 1: |
| 29 | + neighbors.append(grid[index + 1]) |
| 30 | + return neighbors |
| 31 | + |
| 32 | +def apply_rule(grid, index): |
| 33 | + cell_state = grid[index] |
| 34 | + neighbors = get_neighbors(grid, index) |
| 35 | + if cell_state > 0: # If the cell represents an organism. |
| 36 | + energy = cell_state |
| 37 | + new_state = RULES[cell_state % len(RULES)](neighbors, energy) |
| 38 | + if energy >= ENERGY_THRESHOLD and grid.count(0) > 1: |
| 39 | + empty_spots = [i for i in range(GRID_SIZE) if grid[i] == 0] |
| 40 | + new_organism_position = random.choice(empty_spots) |
| 41 | + grid[new_organism_position] = energy // 2 # New organism created through reproduction. |
| 42 | + grid[index] = new_state |
| 43 | + elif cell_state < 0: # If the cell represents a resource. |
| 44 | + grid[index] = 0 |
| 45 | + |
| 46 | +def run_simulation(grid, num_iterations): |
| 47 | + for _ in range(num_iterations): |
| 48 | + new_grid = grid.copy() |
| 49 | + for i in range(GRID_SIZE): |
| 50 | + apply_rule(new_grid, i) |
| 51 | + grid = new_grid |
| 52 | + return grid |
| 53 | + |
| 54 | +def display_grid(grid): |
| 55 | + for cell in grid: |
| 56 | + if cell == 0: |
| 57 | + print('.', end=' ') |
| 58 | + elif cell > 0: |
| 59 | + print('O', end=' ') |
| 60 | + else: |
| 61 | + print(abs(cell), end=' ') |
| 62 | + print() |
| 63 | + |
| 64 | +def main(): |
| 65 | + grid = initialize_grid() |
| 66 | + display_grid(grid) |
| 67 | + |
| 68 | + num_iterations = 10 |
| 69 | + grid = run_simulation(grid, num_iterations) |
| 70 | + |
| 71 | + print("\nSimulation Results:") |
| 72 | + display_grid(grid) |
| 73 | + |
| 74 | +if __name__ == "__main__": |
| 75 | + main() |
0 commit comments