typestar

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

  1. gmatch("%a+") itera las palabras; or 0 siembra el conteo.
  2. Los pares pasan a un arreglo para que table.sort los clasifique.
  3. string.rep("#", n) dibuja la barra de cada palabra.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Bis; paso 25 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →