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)