word_freq.lua en Lua
Una tabla de frecuencias con gmatch, una tabla de conteo y un orden.
-- Count word frequencies in a passage and chart the leaders.
local passage = "the rain in maine falls mainly on the plain and "
.. "the rain stays on the plain"
-- Tally every word with gmatch; missing keys start at zero.
local counts = {}
for word in passage:gmatch("%a+") do
counts[word] = (counts[word] or 0) + 1
end
-- Move to an array and sort: count descending, ties by word.
local ranked = {}
for word, n in pairs(counts) do
ranked[#ranked + 1] = { word = word, n = n }
end
table.sort(ranked, function(a, b)
if a.n ~= b.n then return a.n > b.n end
return a.word < b.word
end)
print(#ranked .. " distinct words")
print("word ct bar")
for _, entry in ipairs(ranked) do
print(string.format("%-7s %2d %s",
entry.word, entry.n, string.rep("#", entry.n)))
end
Cómo funciona
gmatch("%a+")itera las palabras;or 0siembra el conteo.- Los pares pasan a un arreglo para que
table.sortlos clasifique. string.rep("#", n)dibuja la barra de cada palabra.
Palabras clave y builtins usados aquí
doendforfunctionifinipairslocalpairsprintreturnthen
El intento, en números
- Líneas
- 27
- Caracteres a escribir
- 768
- Tokens
- 167
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 154 segundos.
Paso 1 de 3 en Bis; paso 25 de 27 en Fundamentos del lenguaje.