算額あれこれ

算額問題をコンピュータで解きます

2013-10-01から1ヶ月間の記事一覧

send+more=money その4

# 漢字かななども使える(1 文字も可)バージョンsmm = function(str) { str = gsub("[ \t]", "", str) str = unlist(strsplit(str, "")) if (grepl(str[1], "+-")) { stop("Unary minus or plus is invalid.") } str = c(str, ".") nChar = length(str) ope…

send+more=money その3

R の for の特性を生かせば,f5 は f6 のようにできる。そして,f6 は f5 より速い。あっという間に答えが出る。 関数の中で base::setdiff を最適化したものを使うようにしている。そのようにしないと(base::setdiff を使うと)むしろ f5 より遅くなる。 f…

send+more=money その2

for なんか使うと遅いだろうと思うだろうが,制約条件をせばめてやれば,むしろ他の方法より速くなる。 f5 = function() { m = 1 o = 0 for (s in 2:9) { for (e in 2:9) { if (e == s) next for (n in 2:9) { if (n == s || n == e) next for (d in 2:9) { …

send+more=money

元記事の関数の実行時間のほぼ90%は,permutations が占める。 なので,残りの部分を凝ってみても速度向上は望めないので,せめて分かりやすく書いてみるか。 f2 = function() { library(gtools) perm = t(gtools::permutations(10, 8))-1 perm = perm[, pe…

列ごとに同じ検定を繰り返すプログラム

某所に掲載されていたプログラム 以下のようにするとコンパクト KrusRep <- function(dat) { x <- ncol(dat) mat <- matrix(sapply(dat[, -x], function(z) kruskal.test(z ~ dat[, x])$statistic), ncol=1) dimnames(mat) <- list(colnames(dat[, -x]), "ch…

確率の問題をシミュレーションで解く

斎藤さんには二人の子供がいる。日曜日生まれの女の子はいるかと聞くと、いると言う。 では、もう一人も女の子である確率は? 分かりやすくするために,冗長に書く n = 100000000d = data.frame(mf1=sample(2, n, replace=TRUE), mf2=sample(2, n, replace=T…

とある弁当屋の...

石田基弘著「とある弁当屋の統計技師-データ分析のはじめかた」共立出版 読んでみました。 出版社の校正係,もっとしっかり仕事しなさい ii ページコンピューター → 普通は,「コンピュータ」一日キーボードを叩きながら → 一日中キーボードを叩きながら「ハ…

ダメ出し:統計学の問題を作るのも難しいもので...

CodeIQで「『データサイエンティスト養成読本』著者陣さんの問題」やってみたけど…http://m884.hateblo.jp/entry/2013/09/19/171218 なんですけどね。どっちもどっち??? 問題文は孫引き(大元の記事は参照できなくなっている)だが,問1. Rに標準装備され…