Purpose - Stepping Stone Algos
I came across in a reference to Markov chain

20 by 20 layout with 2 colors 10000 trials are not enough

> library(grid)
> library(RColorBrewer)
> vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
> colors <- c("white", "black")
> data <- matrix(data = NA, nrow = 20, ncol = 20)
> getGrid <- function(data) {
+     data.ref <- matrix(data = NA, nrow = 22, ncol = 22)
+     for (i in 2:21) {
+         for (j in 2:21) {
+             data.ref[i, j] <- data[(i - 1), (j - 1)]
+         }
+     }
+     data.ref[1, 2:21] <- data[20, ]
+     data.ref[22, 2:21] <- data[1, ]
+     data.ref[2:21, 1] <- data[, 20]
+     data.ref[2:21, 22] <- data[, 1]
+     data.ref[1, 1] <- data[20, 20]
+     data.ref[22, 22] <- data[1, 1]
+     data.ref[1, 22] <- data[20, 1]
+     data.ref[22, 1] <- data[1, 20]
+     return(data.ref)
+ }
> for (i in 1:20) {
+     for (j in 1:20) {
+         data[i, j] <- sample(1:2, 1)
+     }
+ }
> counter <- 0
> while (counter < 10000) {
+     temp <- getGrid(data)
+     cell <- sample(1:20, 2, replace = T)
+     cell.ref <- cell + 1
+     x <- cell.ref[1]
+     y <- cell.ref[2]
+     temp.ref <- temp[(x - 1):(x + 1), (y - 1):(y + 1)]
+     temp.col <- sample(c(temp.ref)[-5], 1)
+     x.orig <- cell[1]
+     y.orig <- cell[2]
+     data[x.orig, y.orig] <- temp.col
+     counter <- counter + 1
+ }
> print(counter)
[1] 10000

8 by 8 layout with 2 colors

> library(grid)
> library(RColorBrewer)
> colors <- c("white", "black")
> data <- matrix(data = NA, nrow = 8, ncol = 8)
> getGrid <- function(data) {
+     data.ref <- matrix(data = NA, nrow = 10, ncol = 10)
+     for (i in 2:9) {
+         for (j in 2:9) {
+             data.ref[i, j] <- data[(i - 1), (j - 1)]
+         }
+     }
+     data.ref[1, 2:9] <- data[8, ]
+     data.ref[10, 2:9] <- data[1, ]
+     data.ref[2:9, 1] <- data[, 8]
+     data.ref[2:9, 10] <- data[, 1]
+     data.ref[1, 1] <- data[8, 8]
+     data.ref[10, 10] <- data[1, 1]
+     data.ref[1, 10] <- data[8, 1]
+     data.ref[10, 1] <- data[1, 8]
+     return(data.ref)
+ }
> getFilledStatus <- function(data) {
+     temp1 <- length(which(c(data) == 1))
+     temp2 <- length(which(c(data) == 2))
+     completed <- max(temp1, temp2)/(temp1 + temp2)
+     return(completed)
+ }
> for (i in 1:8) {
+     for (j in 1:8) {
+         data[i, j] <- sample(1:2, 1)
+     }
+ }
> counter <- 0
> while (counter < 15000) {
+     temp <- getGrid(data)
+     cell <- sample(1:8, 2, replace = T)
+     cell.ref <- cell + 1
+     x <- cell.ref[1]
+     y <- cell.ref[2]
+     temp.ref <- temp[(x - 1):(x + 1), (y - 1):(y + 1)]
+     temp.col <- sample(c(temp.ref)[-5], 1)
+     x.orig <- cell[1]
+     y.orig <- cell[2]
+     data[x.orig, y.orig] <- temp.col
+     counter <- counter + 1
+     status <- getFilledStatus(data)
+     if (status == 1)
+         break
+ }
> print(counter)
[1] 2541

8 by 8 layout with 3 colors

> library(grid)
> library(RColorBrewer)
> colors <- c("white", "sienna", "black")
> data <- matrix(data = NA, nrow = 8, ncol = 8)
> getGrid <- function(data) {
+     data.ref <- matrix(data = NA, nrow = 10, ncol = 10)
+     for (i in 2:9) {
+         for (j in 2:9) {
+             data.ref[i, j] <- data[(i - 1), (j - 1)]
+         }
+     }
+     data.ref[1, 2:9] <- data[8, ]
+     data.ref[10, 2:9] <- data[1, ]
+     data.ref[2:9, 1] <- data[, 8]
+     data.ref[2:9, 10] <- data[, 1]
+     data.ref[1, 1] <- data[8, 8]
+     data.ref[10, 10] <- data[1, 1]
+     data.ref[1, 10] <- data[8, 1]
+     data.ref[10, 1] <- data[1, 8]
+     return(data.ref)
+ }
> getFilledStatus <- function(data) {
+     temp1 <- length(which(c(data) == 1))
+     temp2 <- length(which(c(data) == 2))
+     temp3 <- length(which(c(data) == 3))
+     completed <- max(temp1, temp2, temp3)/(temp1 + temp2 + temp3)
+     return(completed)
+ }
> for (i in 1:8) {
+     for (j in 1:8) {
+         data[i, j] <- sample(1:3, 1)
+     }
+ }
> counter <- 0
> while (counter < 15000) {
+     temp <- getGrid(data)
+     cell <- sample(1:8, 2, replace = T)
+     cell.ref <- cell + 1
+     x <- cell.ref[1]
+     y <- cell.ref[2]
+     temp.ref <- temp[(x - 1):(x + 1), (y - 1):(y + 1)]
+     temp.col <- sample(c(temp.ref)[-5], 1)
+     x.orig <- cell[1]
+     y.orig <- cell[2]
+     data[x.orig, y.orig] <- temp.col
+     counter <- counter + 1
+     status <- getFilledStatus(data)
+     if (status == 1)
+         break
+ }
> print(counter)
[1] 7237