# joc de la vida # "*" : planta # "." : espai buit # m : matriu estat actual orlada amb espais # mb : matriu amb la nova generació # constants PLANTA = "*" ESPAI = "." # funcions clc <- function(){ cat(rep("\n", 50)) } escriuMatriu <- function(m){ cat("\n") for (i in 1 : nrow(m)){ cat(m[i, ]) cat("\n") } cat("\n") } comptaVeins <- function(m, i, j){ n <- 0 for (ii in (i-1) : (i+1)){ for (jj in (j-1) : (j+1)){ # cat("ii ", ii, " jj ", jj) if (!(ii == i && jj == j) && m[ii, jj] == PLANTA){ n <- n + 1 } } } return (n) } novaGeneracio <- function(parcela, n){ if (parcela == PLANTA){ if ( n > 3 || n < 2 ){ return(ESPAI) }else{ return (parcela) } }else{ if ( n == 3 ){ return(PLANTA) }else{ return (parcela) } } } evoluciona <- function(m){ mb <- matrix(ESPAI, ncol = ncol(m), nrow = nrow(m)) for (i in 2 : (nrow(m)-1)){ for (j in 2 : (ncol(m)-1)){ n <- comptaVeins(m, i, j) mb[i, j] <- novaGeneracio(m[i, j], n) } } return (mb) } # programa principal nf <- 10 nc <- 10 m <- matrix(ESPAI, nrow = nf+2, ncol = nc+2) # generació inicial alatòria #nPlantes <- 60 #for (i in 1 : nPlantes){ # i <- trunc(nf * runif(1)) + 1 # j <- trunc(nc * runif(1)) + 1 # m[i+1, j+1] <- PLANTA #} # generació inicial assignada # oscil.lador simple m[6, 5] <- PLANTA m[6, 6] <- PLANTA m[6, 7] <- PLANTA m[5, 6] <- PLANTA m[7, 6] <- PLANTA cat("Població inicial \n") escriuMatriu(m) maxGeneracions <- 20 generacio <- 1 #while (generacio <= maxGeneracions){ while(1){ Sys.sleep(1) cat('\f') m <- evoluciona(m) cat("Generacio ", generacio, "\n") escriuMatriu(m) generacio <- generacio + 1 }