裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

覆面算3

2017年03月30日 | ブログラミング

謹賀新年(2017年) 覆面算
http://quiz-tairiku.com/q.cgi?mode=view&no=18773

(1) きんが + しんねん = 2017 となり,2, 0, 1, 7 をすべて含むもの
(2) とりにく + とりにく + … + とりにく = やきとり
  すなわち,n(とりにく) = やきとり
  となり,解に 2, 9 両方が含まれるもの

----------------------------------------

f = function(x) {
    library(e1071)
    a = permutations(5)
    a = apply(a, 1, function(y) c(2, 0, 1, 7, x)[y])
    きんが = 10^(2:0) %*% a[c(1, 2, 3), ]
    しんねん = 10^(3:0) %*% a[c(4, 2, 5, 2), ]
    ans = きんが + しんねん == 2017
    if (any(ans)) {
        cat(sprintf("%6d\n+%5d\n------\n%6d\n", きんが[ans], しんねん[ans], 2017))
    }
}
for (x in c(3:6, 8, 9)) {
    f(x)
}

   270
+ 1747
------
  2017

g = function() {
    library(e1071)
    a = data.frame(permutations(10) - 1)
    a = as.matrix(unique(a[a[, 1] != 0 & a[, 5] != 0, 1:6]))
    w = 10^(3:0)
    とりにく = a[, c(1:4)] %*% w
    やきとり = a[, c(5, 6, 1, 2)] %*% w
    for (i in seq_along(とりにく)) {
        ans = which(1:9 * とりにく[i] == やきとり[i])
        if (any(ans) && # n 「とりにく」 = 「やきとり」
            ans %in% a[i, ] == FALSE && # ただし,n は「とりにくやき」に含まれない
            all(c(2, 9) %in% c(a[i, ], ans))) { # また,2, 9 を含む
            cat(sprintf("\n%6d\nx%5d\n------\n%6d\n", とりにく[i], ans, やきとり[i]))
        }
    }
}
g()

答えは一意に決まると書いてあいるが,そうではないようだ(やはり,「適切な」総当たりというのは必要)

  1402    これを唯一の解としているが
x    7
------
  9814

  1809    他にも 4 通りの解がある
x    2
------
  3618

  1859
x    2
------
  3718

  3819
x    2
------
  7638

  2709
x    3
------
  8127

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村