Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的数独解检查器_R - Fatal编程技术网

R中的数独解检查器

R中的数独解检查器,r,R,我有一个名为sukokus的变量,它是一个9x9x50数组,它代表了50个不同数独游戏的解决方案,有些是对的,有些是错的。如何使用简单索引检查正确的解决方案 这里有一个。它使用以下有趣的属性: 可能效率不高,但它显示了一种通过简单索引检查行、列和3*3框的方法: #创建示例数据 图书馆(数独) sudokus想给你反馈为什么这个问题会被否决。通常不赞成要求别人给你代码来为你解决问题,特别是如果你没有表明你自己已经为解决问题做出了任何努力。此外,您应该提供那些可以帮助您获得示例数据的人,以便他们能

我有一个名为sukokus的变量,它是一个9x9x50数组,它代表了50个不同数独游戏的解决方案,有些是对的,有些是错的。如何使用简单索引检查正确的解决方案

这里有一个。它使用以下有趣的属性:


可能效率不高,但它显示了一种通过简单索引检查行、列和3*3框的方法:

#创建示例数据
图书馆(数独)

sudokus想给你反馈为什么这个问题会被否决。通常不赞成要求别人给你代码来为你解决问题,特别是如果你没有表明你自己已经为解决问题做出了任何努力。此外,您应该提供那些可以帮助您获得示例数据的人,以便他们能够轻松地帮助您。请参阅和了解如何在此网站上提问谢谢您的解释。不会再发生了。
check.solutions <- function(solutions) {
   board <- matrix(1:81, 9, 9)
   row.idx <- row(board)
   col.idx <- col(board)
   squ.idx <- (row.idx - 1L) %/% 3L  + 1L + 3L * (col.idx - 1L) %/% 3L
   grp.mat <- t(cbind(sapply(1:9, `==`, row.idx),
                      sapply(1:9, `==`, col.idx),
                      sapply(1:9, `==`, squ.idx)))
   flat.sol <- 2^(solutions - 1)
   dim(flat.sol) <- c(81, dim(flat.sol)[3])
   colSums(grp.mat %*% flat.sol == 511) == 27
}
s1 <- matrix(c(9,4,6,1,7,3,8,2,5,
               2,8,3,9,4,5,1,7,6,
               5,7,1,8,2,6,9,4,3,
               4,1,5,2,3,7,6,9,8,
               8,3,9,4,6,1,7,5,2,
               6,2,7,5,9,8,4,3,1,
               3,6,4,7,1,2,5,8,9,
               7,5,2,6,8,9,3,1,4,
               1,9,8,3,5,4,2,6,7), 9, 9)
s2 <- s1
s2[1:2] <- s2[2:1]
check.solutions(array(c(s1, s2), c(9,9,2)))
# [1]  TRUE FALSE
# create example data
library(sudoku)
sudokus <- array(dim=c(9, 9, 50))
for (i in 1:50)
  sudokus[,,i] <- generateSudoku(Nblank = sample(c(0,1), size=1, prob=c(.9, .1)))

# main function (FALSE if invalid, TRUE if solved)
boxes <- expand.grid(col=seq(1, 9, 3), row=seq(1, 9, 3)) 
isValidSudoku <- function(sud) {
  checkVec <- function(v)
    1:9 %in% v
  all(sapply(as.data.frame(sud), checkVec)) & 
  all(sapply(as.data.frame(t(sud)), checkVec)) & 
  all(sapply(1:nrow(boxes), function(i) {
    checkVec(sud[as.matrix(expand.grid(row=boxes$col[i]:(boxes$col[i]+2), 
                                       col=boxes$row[i]:(boxes$row[i]+2)))])
  }))
}

# check example data
sapply(1:dim(sudokus)[3], function(i) {
  isValidSudoku(sudokus[,,i])
})