Letter frequency
func letter_frequency(File file) {
file.read.chars.grep{.match(/[[:alpha:]]/)} \
.group_by {|letter| letter.downcase} \
.map_val {|_, val| val.len} \
.sort_by {|_, val| -val}
}
var top = letter_frequency(File(__FILE__))
top.each{|pair| say "#{pair[0]}: #{pair[1]}"}
Output:
e: 22
a: 18
l: 16
r: 15
t: 12
p: 9
f: 8
i: 8
c: 7
v: 6
y: 5
n: 5
o: 5
u: 4
h: 4
s: 4
b: 2
g: 2
m: 2
d: 2
q: 2
w: 1