6□4□5□2□1でカウントダウンする問題


流行っていたのでRでやってみた。
Python では既にやられている。

num <- c(6, 4, 5, 2, 1)
calc <- c("+", "-", "/", "*")

cmb <- as.matrix(expand.grid(calc, calc, calc, calc))

res <- NULL
for(i in seq(nrow(cmb))){
  eq <- num[1]
  for(j in 2:length(num)){
    eq <- paste(eq, num[j], sep=cmb[i, j-1])
  }
  res <- rbind(res, c(eq, eval(parse(text=eq))))
}

x <- as.numeric(res[,2])
table(sort(x[x==ceiling(x)]))
 [1] -35 -34 -34 -33 -17 -16 -16 -15 -13 -12 -12 -11  -9  -8  -8  -7  -6  -5  -5
 [20]  -5  -4  -4  -4  -3  -2  -2  -1  -1  -1  -1  -1   0   0   0   0   1   2   3
 [39]   3   3   4   4   4   4   5   5   5   6   6   7   7   8   8   9   9  10  11
 [58]  12  12  12  13  13  13  13  14  14  14  14  15  15  15  15  16  16  16  16
 [77]  16  17  17  17  17  17  18  18  19  20  20  20  21  21  21  22  23  24  24
 [96]  25  26  27  27  27  28  28  28  29  30  31  31  32  33  34  34  35  45  46
[115]  46  47  59  60  60  61 117 118 118 119 121 122 122 123 239 240 240 241

256通りあるが1回しかないパターンもあれば複数パターンで得られる日もある。考えてみれば当たり前だ。