blob: 55bee9611ee9ed98bb9a9f30d0820aa6026a5ab4 [file] [log] [blame]
-- $Id: wordfreq.lua,v 1.1.1.1 2004-05-19 18:14:18 bfulgham Exp $
-- http://www.bagley.org/~doug/shootout/
-- implemented by: Roberto Ierusalimschy
-- this version reads input line by line and so it is
-- noticably slower than the version that reads the
-- input in blocks.
local read = io.read
local gsub,strlower,format = string.gsub,string.lower,string.format
local tinsert,sort = table.insert,table.sort
local words = {} -- list of all words (for sorting)
local count = {} -- count occurrences of each word
while 1 do
local line = read()
if line == nil then break end
gsub(strlower(line), "(%l+)", function (w)
local cw = count[w]
if cw == nil then -- first occurrence?
cw = 0
tinsert(words, w)
end
count[w] = cw + 1
end)
end
sort(words, function (a,b)
return count[a] > count[b] or
(count[a] == count[b] and a > b)
end)
for i=1,#words do
local w = words[i]
io.write(format("%7d\t%s\n", count[w], w))
end