裏 RjpWiki

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

5×5ラテン方陣アナグラム

2014年10月29日 | ブログラミング

数限られているから数回の試行錯誤でもできるとは思うが,ユニーク解であるかどうかは,しらみつぶしでやるしかないかな

word.list = c("steal", "stela", "telas", "teals", "elast", "least", "laste", "astel")
w.l = sapply(word.list, function(w) unlist(strsplit(w, "")))
ans = combn(length(word.list), nchar(word.list[1]), function(o) apply(w.l[,o], 1, paste, collapse=""))
sapply(ans[,apply(apply(ans, 2, "%in%", word.list), 2, all)], function(w) unlist(strsplit(w, "")))

combn では,全てを尽くせないので,e1071permutations を使って以下のようにやってみる。

word.list = c("steal", "stela", "telas", "teals", "elast", "least", "laste", "astel")
w.l = sapply(word.list, function(w) unlist(strsplit(w, "")))
suf = unique(permutations(length(word.list))[, 1:nrow(w.l)])
ans = apply(suf, 1, function(o) apply(w.l[,o], 1, paste, collapse=""))
ans = sapply(ans[,apply(apply(ans, 2, "%in%", word.list), 2, all)], function(w) unlist(strsplit(w, "")))
dim(ans) = c(5, 5, ncol(ans)/5)
ans

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 換字式暗号 | トップ | Color Space の変換 »
最新の画像もっと見る

コメントを投稿

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