「10 を作る」の発展版 1158 で10 を 作れと... あんたは,ほんとに,「いい娘や」ねえ
とはいえ,汎用のプログラムを書く気にはならないので,少しだけ変更・追加
Expr = c("n1 %s (n2 %s (n3 %s n4))",
"(n1 %s n2) %s (n3 %s n4)",
"((n1 %s n2) %s n3) %s n4",
"(n1 %s (n2 %s n3)) %s n4",
"n1 %s ((n2 %s n3) %s n4)")
Op = c("+", "-", "*", "/")
Num = c(1, 1, 5, 8)
Eval = function(Expr) {
for (i in Op) {
for (j in Op) {
for (k in Op) {
s = sprintf(Expr, i, j, k)
a = eval(parse(text=s))
if (!is.na(a) && a == 10) {
cat(s, "\n")
}
}
}
}
}
library(e1071)
n = permutations(4)
for (i in 1:24) {
Expr2 = gsub("n1", Num[n[i, 1]], Expr)
Expr2 = gsub("n2", Num[n[i, 2]], Expr2)
Expr2 = gsub("n3", Num[n[i, 3]], Expr2)
Expr2 = gsub("n4", Num[n[i, 4]], Expr2)
for (expr in Expr2) {
Eval(expr)
}
}
ダブルで出てくるが,解答は
8 / (1 - (1 / 5))
昔の記事ですが、総当りで10を作ることの出来る全部の組合せを計算しました。並び替え許可の場合と、不許可の場合も計算しています。