コード中の文字の頻度分析
出題者です。 こちらで用意していた回答は awk を使ったものでした。一応解説すると、組み込み変数FSを空にし、1行単位の文字毎に連想配列に格納しています。
1 2 3 4 5 6 7 8 9 | # 1文字版
BEGIN { FS="" }
{ for (i=1; i<=NF; i++) ht[$i]++}
END { for (c in ht) print ht[c],c }
# 3文字版
BEGIN { FS="" }
{ for (i=1; i<=NF-2; i++) { ht[$i$(i+1)$(i+2)]++}}
END { for (c in ht) print ht[c],c }
|
Posted feedbacks - Groovy
jdk1.6に付属されていた サンプルソース「Intro.java」を解析しました。
[a] = 1557 [e] = 2746 [i] = 2116 [l] = 1008 [n] = 1981 [r] = 1314 [s] = 1209 [t] = 2340
e,s,tが多いのは、 setter、getterメソッドのためでしょうか。 int,String などもキーワードからも、 i,r,tは多いのでしょうか。
1 2 3 4 5 6 7 8 9 | def text = new File("c:/Intro.java").text
(0..(text.size()-1)).collect{
text[it]
}.unique().sort().each{
def key = "[${it}]".padLeft(5)
def value = text.count(it).toString().padLeft(7)
println "${key} = ${value}"
}
|




crane
#6382()
Rating0/0=0.00
プログラムコード中の文字の頻度は言語によって相当にばらつきがあると思います。ある言語はピリオドが頻出するとか、別の言語はカッコの頻出頻度が高い、とか。そこで、
(その言語で書かれた「典型的な」プログラムコード、といえるようなものがあると良いのですが・・)
簡単すぎるという方は、複数文字にしてみたり単語の頻度にしてみてください。
参考;Wikipedia 頻度分析
http://ja.wikipedia.org/wiki/%E9%A0%BB%E5%BA%A6%E5%88%86%E6%9E%90
1 reply [ reply ]