challenge コード中の文字の頻度分析

プログラムコード中の文字の頻度は言語によって相当にばらつきがあると思います。ある言語はピリオドが頻出するとか、別の言語はカッコの頻出頻度が高い、とか。そこで、

  • 文字の頻度解析をするプログラムを作成し、
  • 適当なプログラムに対して実行し、結果を出力して、そのような頻度になっている理由を教えてください。

(その言語で書かれた「典型的な」プログラムコード、といえるようなものがあると良いのですが・・)

簡単すぎるという方は、複数文字にしてみたり単語の頻度にしてみてください。

参考;Wikipedia 頻度分析

http://ja.wikipedia.org/wiki/%E9%A0%BB%E5%BA%A6%E5%88%86%E6%9E%90

出題者です。 こちらで用意していた回答は 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 - Python

httplib.pyを解析させました。

spaceが多いのはインデントのせいでしょう。

辞書いいです。

[nori@Asama]~/Desktop/study/python/code% python count.py /usr/lib64/python2.4/httplib.py

{'\n': 1370, ' ': 14394, '"': 262, '(': 385, '*': 15, ',': 317, '.': 707, '0': 131, '2': 46, '4': 36, '6': 16, '8': 6, ':': 337, '<': 12, '>': 23, 'B': 22, 'D': 55, 'F': 52, 'H': 93, 'L': 78, 'N': 210, 'P': 112, 'R': 148, 'T': 313, 'V': 13, 'X': 25, 'Z': 4, '\\': 22, '`': 5, 'b': 215, 'd': 859, 'f': 1013, 'h': 761, 'j': 24, 'l': 1444, 'n': 1682, 'p': 606, 'r': 1429, 't': 1968, 'v': 182, 'x': 68, 'z': 26, '|': 19, '~': 1, '!': 12, '#': 224, '%': 18, "'": 220, ')': 390, '+': 21, '-': 127, '/': 39, '1': 110, '3': 18, '5': 20, '7': 6, '9': 19, ';': 8, '=': 440, '?': 8, 'A': 84, 'C': 109, 'E': 195, 'G': 16, 'I': 106, 'K': 17, 'M': 31, 'O': 104, 'Q': 22, 'S': 163, 'U': 64, 'W': 23, 'Y': 12, '[': 53, ']': 54, '_': 615, 'a': 1247, 'c': 809, 'e': 3748, 'g': 253, 'i': 1345, 'k': 254, 'm': 324, 'o': 1443, 'q': 60, 's': 2200, 'u': 579, 'w': 206, 'y': 169, '{': 5, '}': 5}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import sys

fn = sys.argv[1]

if not fn:
  sys.exit(1)

hist = dict()
f = file(fn)
buf = f.read(1000)
while buf:
  for ch in buf:
    count = hist.get(ch, 0)
    count +=1
    hist.update({ch:count})
  buf = f.read(1000)
print hist

Index

Feed

Other

Link

Pathtraq

loading...