First julia impl, very slow

This commit is contained in:
Fabian Schmidt 2024-08-30 13:39:21 +02:00
parent dfcc8562e6
commit eb2ed15e33

65
src/main/julia/main.jl Normal file
View File

@ -0,0 +1,65 @@
using Mmap
mutable struct StationMeasurements
min::Float64
max::Float64
sum::Float64
count::Int64
end
function update(sm, temp::Float64)
if temp < min
sm.min = temp
elseif temp > max
sm.max = temp
end
sm.sum += temp
sm.count += 1
end
function print_measurements(stations::Dict{String,StationMeasurements})
sorted_keys = sort(collect(keys(stations)))
print("{")
sm_vec = []
for city in sorted_keys
sm = stations[city]
min = round(sm.min; digits=1)
max = round(sm.max; digits=1)
avg = round((sm.sum / sm.count); digits=1)
push!(sm_vec, "$city=$min/$avg/$max")
end
joined = join(sm_vec, ", ")
print(joined)
print("}")
end
function main()
open("../../../measurements.txt", "r") do f
println("Start")
stations = Dict{String,StationMeasurements}()
iteration = 0
for line in eachline(f)
if iteration % 1000000 == 0 && iteration > 0
print("\x1b[J\x1b[H")
percent = round((iteration / 1000000000) * 100; digits=2)
println("$(percent)%")
end
station, temp_str = rsplit(line, ";")
temp = parse(Float32, temp_str)
if haskey(stations, station)
sm = stations[station]
sm.min = ifelse(temp < sm.min, temp, sm.min)
sm.max = ifelse(temp > sm.max, temp, sm.max)
sm.sum += temp
sm.count += 1
else
stations[station] = StationMeasurements(temp, temp, temp, 1)
end
iteration += 1
end
print_measurements(stations)
println("End")
end
end
main()