Ultra slow lua solution (aka as slow as my naive rust solution)
This commit is contained in:
parent
3dbc9c32d1
commit
0ea10a3c1b
57
src/main/lua/main.lua
Normal file
57
src/main/lua/main.lua
Normal file
@ -0,0 +1,57 @@
|
||||
local file_path = "../../../measurements.txt"
|
||||
|
||||
local file = io.open(file_path, "rb")
|
||||
if not file then
|
||||
print("Unable to open file")
|
||||
return
|
||||
end
|
||||
|
||||
local function split_semi(inputstr)
|
||||
local t = {}
|
||||
for str in string.gmatch(inputstr, "([^;]+)") do
|
||||
table.insert(t, str)
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
local stations = {}
|
||||
|
||||
local iterations = 1
|
||||
|
||||
for line in file:lines("*l") do
|
||||
if iterations % 1000000 == 0 then
|
||||
io.write("\x1b[J\x1b[H")
|
||||
io.write(iterations / 10000000)
|
||||
io.write("\n")
|
||||
end
|
||||
local split_line = split_semi(line)
|
||||
local station = split_line[1]
|
||||
local temp_str = string.gsub(split_line[2], "[ ]", "")
|
||||
local temp = tonumber(temp_str)
|
||||
if stations[station] == nil then
|
||||
stations[station] = { min = temp, max = temp, sum = temp, count = 1 }
|
||||
else
|
||||
if temp < stations[station].min then
|
||||
stations[station].min = temp
|
||||
elseif temp > stations[station].max then
|
||||
stations[station].max = temp
|
||||
end
|
||||
stations[station].sum = stations[station].sum + temp
|
||||
stations[station].count = stations[station].count + 1
|
||||
end
|
||||
iterations = iterations + 1
|
||||
end
|
||||
|
||||
local keys = {}
|
||||
for k in pairs(stations) do table.insert(keys, k) end
|
||||
table.sort(keys)
|
||||
|
||||
local fstations = {}
|
||||
io.write("{")
|
||||
for _, station in ipairs(keys) do
|
||||
local avg = ((stations[station].sum / 10) / stations[station].count)
|
||||
local res_str = string.format("%s=%.1f/%.1f/%.1f", station, stations[station].min, avg, stations[station].max)
|
||||
table.insert(fstations, res_str)
|
||||
end
|
||||
io.write(table.concat(fstations, ","))
|
||||
print("}")
|
Loading…
Reference in New Issue
Block a user