s3Eva_IT2005_T2 Juego biológico

Ejercicio: 3Eva_IT2005_T2 Juego biológico

Resultado esperado:

tamaño de matriz nxn:5
cantidad seres vivos: 20
[[1 1 1 1 0]
 [1 1 1 0 1]
 [0 1 1 1 1]
 [1 1 1 1 1]
 [0 0 1 1 1]]
porcentaje inicial: 80.0
nueva matriz:
[[1 1 1 1 0]
 [1 0 1 0 1]
 [0 1 0 1 1]
 [1 1 1 0 1]
 [0 0 1 1 1]]
porcentaje final: 68.0
>>> 

Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 3Eva_IT2005_T2 Juego biológico
# propuesta: edelros@espol.edu.ec
# por ser semejante, se usa la funcion de: 
#  3Eva_IT2006_T4 Juego planta bombas (buscaminas)
import numpy as np
import random as rnd

def plantabombas(m,n):
    campo = np.zeros(shape=(n,n),dtype=int)
    bomba = 1
    while not(bomba>m):
        fila = int(rnd.random()*n)+0
        columna = int(rnd.random()*n)+0
        if (campo[fila,columna]==0):
            campo[fila,columna] = 1
            bomba = bomba + 1
    return(campo)

def porcentaje(campo):
    tamano = np.shape(campo)
    n = tamano[0]
    m = tamano[1]
    suma = 0
    fila = 0
    while not(fila>=n):
        columna = 0
        while not(columna>=m):
            suma = suma + campo[fila,columna]
            columna = columna + 1
        fila = fila + 1
    z = 100*suma/(n*n)
    return(z)

# PROGRAMA  literal a ------------------
n = int(input('tamaño de matriz nxn:'))
vivos = int(input('cantidad seres vivos: '))

# PROCEDIMIENTO
biologico  = plantabombas(vivos,n)
participa1 = porcentaje(biologico)

# SALIDA
print(biologico)
print('porcentaje inicial:', participa1)

# PROGRAMA  literal b ------------------
fila = 1 # desde segunda fila
while not(fila>=(n-1)): # hasta penultima fila

    columna = 1 # desde segunda columna
    while not(columna>=(n-1)): # hasta penultima columna

        # suma celda izquierda y derecha
        suma = biologico[fila-1,columna]+ biologico[fila+1,columna]
        # suma celda arriba y abajo
        suma = suma + biologico[fila,columna-1]+biologico[fila,columna+1]
        
        if suma >=4: # sobrepoblacion, en la celda no se sobrevive
            biologico[fila,columna] = 0
            
        columna = columna + 1
        
    fila = fila + 1

participa2 = porcentaje(biologico)
print('nueva matriz:')
print(biologico)
print('porcentaje final:', participa2)