From eb2ed15e33c813b828e33d3416e9048109164623 Mon Sep 17 00:00:00 2001
From: Fabian Schmidt <fabschmidt96@gmail.com>
Date: Fri, 30 Aug 2024 13:39:21 +0200
Subject: [PATCH] First julia impl, very slow

---
 src/main/julia/main.jl | 65 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 src/main/julia/main.jl

diff --git a/src/main/julia/main.jl b/src/main/julia/main.jl
new file mode 100644
index 0000000..44d59c6
--- /dev/null
+++ b/src/main/julia/main.jl
@@ -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()