裏 RjpWiki

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

send+more=money その3

2013年10月21日 | ブログラミング

R の for の特性を生かせば,f5 は f6 のようにできる。そして,f6 は f5 より速い。あっという間に答えが出る。

関数の中で base::setdiff を最適化したものを使うようにしている。そのようにしないと(base::setdiff を使うと)むしろ f5 より遅くなる。

f6 = function() {
    setdiff = function (x, y) {
        x[match(x, y, 0L) == 0L]
    }
    m = 1L
    o = 0L
    domain = 2:9
    for (s in domain) {
        domain2 = setdiff(domain, s)
        for (e in domain2) {
            domain3 = setdiff(domain2, e)
            for (n in domain3) {
                domain4 = setdiff(domain3, n)
                for (d in domain4) {
                    domain5 = setdiff(domain4, d)
                    for (r in domain5) {
                        domain6 = setdiff(domain5, r)
                        for (y in domain6) {
                            if (sum(10^(3:0)*c(s+m, e+o, n+r, d+e)) == sum(10^(4:0)*c(m, o, n, e, y))) {
                                cat(sprintf("%s%s%s%s + %s%s%s%s = %s%s%s%s%s\n",
                                            s, e, n, d, m, o, r, e, m, o, n, e, y))
}}}}}}}}

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« send+more=money その2 | トップ | send+more=money その4 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事