Ultra slow lua solution (aka as slow as my naive rust solution)
This commit is contained in:
		
							
								
								
									
										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("}") | ||||
		Reference in New Issue
	
	Block a user