require "io2" -- Split a string using one or more whitespace or comma characters as the separator. local function split2(s) -- Replace all commas with spaces. s = s:replace(",", " ") -- Split on spaces and remove empty entries. return s:split(" "):filter(|e| -> #e > 0):reorder() end local function spark(s0) local ss = split2(s0) local n = #ss local vs = table.create(n) local min = math.huge local max = -min for i, s in ss do local v = tonumber(s) if math.isnan(v) or v == math.huge or v == -math.huge then error("Infinities and NaN not supported.") end if v < min then min = v end if v > max then max = v end vs[i] = v end local sp if min == max then sp = string.rep("▄", n) else local rs = table.create(n) local f = 8 / (max - min) for j, v in vs do local i = math.floor(f * (v - min)) if i > 7 then i = 7 end rs[j] = utf8.char(0x2581 + i) end sp = rs:concat() end return sp, n, min, max end while true do local numbers = io.readStr("Numbers please separated by spaces/commas or q to quit:\n", 1) if !numbers then break end local s, n, min, max = spark(numbers) if n == 1 then print($"1 value = {min}") else print($"{n} values. Min: {min} Max: {max}") end print(s) print() end