裏 RjpWiki

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

算数パズルの解を求めるプログラム(その2)

2014年03月04日 | ブログラミング

子供がやってた算数問題(改)
http://r-statistics-fan.hatenablog.com/entry/2014/03/03/220956
 にあるプログラム。

あまり速くないと言われてる gtools の permutations() ではあるが,使い方によっては,べらぼうに速い。あっという間に解が得られる。(私も意外であったが)

 f3 = function() {
     library(gtools)
     x = permutations(10,4)
     apply(x, 1, function(y) {
         if (all(y != 6) && abs(y[1]-y[2]) == 6) {
             z1 = abs(diff(y))
             z2 = abs(diff(z1))
             z3 = abs(diff(z2))
             if (length(table(c(y, z1, z2, z3))) == 10) {
                 print(c(y, z1, z2, z3))
                 return
             }
         }
    })
    invisible()
 }
 > system.time(f3())
  [1]  9  3 10  8  6  7  2  1  5  4
    ユーザ   システム       経過  
       0.101      0.001      0.101

プログラム実行時間を短くするにはいくつかのやり方があるが,
1. 探索範囲を狭くする
2. 全体の実行時間を短くするためには,準備に実行時間をかければ,その努力は十分に報われることもある
というようなものもあるということで。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 算数パズルの解を求めるプロ... | トップ | ばば抜きのシミュレーション »
最新の画像もっと見る

コメントを投稿

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