# 列舉抽出且放回1-5的所有情況，一列一輪，共5^3種情況
m <- gtools::permutations(5, 3, repeats.allowed = T)

# 保留左右相鄰不等的列，剩80種
ri1 <-
  apply(m, 1, function(x) {
    foo <- vector("logical", length(x) - 1)
    for (i in 1:(length(x) - 1)) {
      if (x[i] != x[i + 1]) {
        foo[i] <- T
      }
    }
    all(foo)
  })
m <- m[ri1, ]

# 取出二個列的所有可能排列序號
ri2 <- gtools::permutations(nrow(m), 2)
# 用來儲存符合題意的容器
res <- vector("list", nrow(ri2))
# 上下相鄰全不相等的情況存入容器中
for (i in 1:nrow(ri2)) {
  m.this <- m[ri2[i, ], ]
  if (all(m.this[1, ] != m.this[2, ])) {
    res[[i]] <- m.this
  }
}

# 去除NULL後為所求，共3380種情況
ans <- res[!sapply(res, is.null)]
length(ans)
print(ans[1:10])
