First julia impl, very slow
This commit is contained in:
parent
dfcc8562e6
commit
eb2ed15e33
65
src/main/julia/main.jl
Normal file
65
src/main/julia/main.jl
Normal 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()
|
Loading…
Reference in New Issue
Block a user