R/generate_nonogram.R

Defines functions generate_nonogram

# Random NONOGRAMM
generate_nonogram = function(pattern){
  if (pattern == "random"){
    nonogram_matrix = matrix(sample(x = 0:1, size = ncols*nrows, replace = T, prob = c(1-p, p)), nrow = nrows, ncol = ncols)
    while (sum(rowSums(nonogram_matrix) == 0) != 0 | sum(colSums(nonogram_matrix) == 0) != 0) {
      nonogram_matrix = matrix(sample(x = 0:1, size = ncols*nrows, replace = T, prob = c(1-p,p)), nrow = nrows, ncol = ncols)
    }
    
    rows_clues = list()
    cols_clues = list()

    for (i in 1:nrows){
      r = rle(nonogram_matrix[i,])
      r_clues = r$lengths[r$values != 0]
      rows_clues[[i]] = r_clues
    }
    for (i in 1:ncols){
      r = rle(nonogram_matrix[,i])
      r_clues = r$lengths[r$values != 0]
      cols_clues[[i]] = r_clues
    }
    
    return(list(nonogram = nonogram_matrix, rows_clues = rows_clues, cols_clues = cols_clues))
    
  } else if (pattern == "penguin"){
    
    penguin = list(
      nonogram = c(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,
                   0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,0,0,1,1,1,
                   1,1,1,1,0,0,0,0,1,1,0,1,1,0,1,1,0,0,0,0,0,0,
                   0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,1,1,
                   1,1,1,1,1,0,0,0,1,1,0,0,0,1,1,1,1,1,1,1,1,0,
                   0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,
                   0,0,0,0,0,0,1,1) , 
      
      rows_clues = list(2, 2:1, 7, 6, c(1,3), 
                      1:2, 1:2,c(1,3), c(1,3), 
                      1:2, 1:2, c(1,1), c(3,2), c(2,5)
                      ),
      cols_clues = list(1, 1, c(3,4,1), c(6,2,1),
                      c(1,2,1), c(4,2), c(7,2),
                      c(8,1), 7, 2)
    )
    return(penguin)
    
  } else if (pattern == "yinyang"){
      yinyang = list(
        nonogram = NULL, 
        
        rows_clues = list(4,8,10,12,
                       c(12,1), c(2,8,1), c(3,6,1),
                       c(10,1), c(6,2,1), c(6,2,1), 
                       c(4,1), c(3,1), c(2,1), c(1,1), 
                       c(2,2), c(4)
                       ) , 
        cols_clues = list(4,8,10,c(3,7), 
                       c(4,4,1), c(9,1), c(8,1), c(8,1), 
                       c(8,1), c(8,1), c(6,1), c(5,2,1), 
                       c(4,2,1), c(1,1), 
                       c(2,2), 4)
        )
      return(yinyang)
      
  } else if(pattern == "boat"){
      boat = list(
        nonogram = NULL, 
        rows_clues = list(c(6,2), c(1,1,3), c(6,1,1,2), 
                       c(6,4,1,12), c(17,2), c(2,2), 26,
                       c(1,25), 26, 1),
        cols_clues = list(3,c(6,1),c(1,7),c(1,3,3),
                       c(1,3,3), c(1,3,3),c(5,3), c(1,3), 
                       c(1,3),
                       c(2,3), c(3,3), c(2,3), c(2,3),
                       c(1,3), c(1,3), c(1,3), c(2,3), 
                       c(3,1,3), c(2,1,3), c(3,3), c(2,3),
                       c(1,3), c(1,3), c(1,3), c(1,3), c(1,3),
                       c(1,2), c(1,2), 3, 2)
        )
  } else if(pattern =="boat2"){
      boat2 = list(
        nonogram = NULL, 
        rows_clues = list(1,3,c(1,2), c(1,3), 
                          c(1,3), c(2,4), 
                          6, 1, 10, 8), 
        cols_clues = list(1, c(3,2), 
                          c(1,2,2), c(1,1,2), 10, 
                          c(6,2), c(4,2), c(2,2), 2 ,1)
        )
  } else if(pattern == "fisherman"){
      fisherman = list(
        nonogram = NULL, 
        rows_clues = list(c(2,3), c(2,1,2), 
                          c(3,1,1,1), c(1,2,1,2),
                          c(1,2,3), c(1,2,3), c(1,2,4),
                          c(1,7,1), c(1,4,1), c(1,1,1),
                          c(1,1,5,2), c(1,2,2,1), c(1,1,2,4),
                          c(1,2,1), c(4,1)),
        cols_clues = list(c(1,1), c(10,2), c(2,1,1), c(2,1), 
                          c(2), c(2), c(3,1), c(2,2,1), c(1,2,5), 
                          c(1,1,2,1,3), c(1,1,1,2,2), c(1,11), c(2,5,1), 
                          c(3,2,3), c(5,1))
        )
  } else if(pattenr == "rabbit"){
      rabbit = list(
        nonogram = NULL,
        rows_clues = list(c(1,1,4,4,2), c(1,2,1,3,2,2), c(1,1,1,2,2,1), c(3,2,2,3,1,1), 
                          c(2,1,2,3,2), c(1,4,2,5,1), c(1,2,2,3,2,1), c(2,2,4,1,2),
                          c(1,1,1,5,3,1), c(2,2,3,3,1), c(1,2,3,1), c(2,1,4,3,1,1), 
                          c(5,1,5,3), c(1,3,3), c(1,1,4,6)), 
        
        cols_clues = list(c(6,3,1), c(1,2,3,2), c(3,2,1,1), rep(2,4), c(3,1,1,1), c(2,1,2,2), 
                          c(1,3,1,2), c(1,2,2,3,1), c(1,2,1,5,1), c(3,2,3,2), c(2,1,4,2), 
                          c(1,2,1,1,5), c(1,2,1,1,4,1), c(3,1,2,1,1), c(2,1,1,1),
                          c(2,1,2), c(1,1,2,3), c(2,1,4,2), c(6,2))
      )
    }
}
  
ezulfica/SANonogramSolver documentation built on Dec. 20, 2021, 7:39 a.m.